如何在多卡部署vllm
时间: 2025-07-06 11:08:10 浏览: 4
在多 GPU 卡(多卡)环境下部署 **vLLM**(一个高效的大语言模型推理框架)可以显著提升吞吐量和降低延迟,尤其是处理高并发请求时。以下是详细的部署步骤和关键配置说明:
---
### **1. 环境准备**
#### **(1) 硬件要求**
- 多块支持 CUDA 的 NVIDIA GPU(建议同型号,避免性能差异)。
- 确保 GPU 之间通过 **NVLink** 或 **PCIe** 高速互联(多卡通信依赖此)。
#### **(2) 软件依赖**
- **Python 3.8+**
- **PyTorch 2.0+**(需与 CUDA 版本匹配)
- **vLLM 最新版本**(通过 `pip install vllm` 安装)
- **NCCL**(NVIDIA 集体通信库,多卡训练/推理必备):
```bash
# 检查 NCCL 是否安装
ls /usr/lib/x86_64-linux-gnu/libnccl* # Ubuntu
```
#### **(3) 验证多卡可用性**
```bash
nvidia-smi # 确认所有 GPU 被识别
python -c "import torch; print(torch.cuda.device_count())" # 输出 GPU 数量
```
---
### **2. 安装 vLLM 并启用多卡支持**
#### **(1) 安装 vLLM**
```bash
pip install vllm # 默认安装 CPU 版本,需手动指定 GPU 版本
# 或从源码安装(推荐)
git clone https://github.com/vllm-project/vllm.git
cd vllm
pip install -e .
```
#### **(2) 关键依赖优化**
- **CUDA 和 cuDNN**:确保与 PyTorch 版本匹配(如 `torch==2.1.0+cu118` 对应 CUDA 11.8)。
- **安装 Apex(可选,用于混合精度)**:
```bash
git clone https://github.com/NVIDIA/apex
cd apex
pip install -v --no-cache-dir --global-option="--cpp_ext" --global-option="--cuda_ext" ./
```
---
### **3. 多卡部署配置**
#### **(1) 启动命令(核心参数)**
使用 `torchrun` 或 `vllm` 自带的启动脚本分配多卡:
```bash
# 方法 1:使用 torchrun(推荐)
torchrun --nproc_per_node=NUM_GPUS --master_port=29500 \
vllm/entrypoints/openai/api_server.py \
--model MODEL_NAME \
--tensor-parallel-size NUM_GPUS \
--port 8000
# 方法 2:直接调用 Python(需手动设置设备)
python -m vllm.entrypoints.openai.api_server \
--model gpt2 \
--tensor-parallel-size 2 \ # 使用 2 张卡
--port 8000
```
**关键参数**:
- `--tensor-parallel-size`:指定张量并行度(即使用的 GPU 数量)。
- `--nproc_per_node`:`torchrun` 分配的进程数(通常等于 GPU 数)。
- `--master_port`:主进程通信端口(避免冲突)。
#### **(2) 配置文件示例(`config.py`)**
```python
from vllm.config import LaunchConfig, ModelConfig
launch_config = LaunchConfig(
num_gpus=4, # 使用 4 张卡
tensor_parallel_size=4, # 张量并行度
worker_use_ray=False, # 是否用 Ray 管理进程
)
model_config = ModelConfig(
model="facebook/opt-125m", # 模型名称或路径
tokenizer="facebook/opt-125m",
dtype="auto", # 自动选择半精度/全精度
tensor_parallel_mode="auto", # 自动选择并行策略
)
```
---
### **4. 模型并行策略**
vLLM 支持两种多卡并行方式:
#### **(1) 张量并行(Tensor Parallelism)**
- **原理**:将模型层(如线性层)拆分到多张卡上,每张卡存储部分参数。
- **适用场景**:单模型过大(如 70B+ 参数),单卡无法容纳。
- **配置**:
```bash
--tensor-parallel-size 4 # 4 卡张量并行
```
#### **(2) 流水线并行(Pipeline Parallelism)**
- **原理**:将模型按层拆分到多张卡上,形成流水线。
- **适用场景**:模型极长(如超长序列推理)。
- **配置**(需手动修改代码):
```python
model_config = ModelConfig(
model="...",
pipeline_parallel_size=2, # 2 卡流水线并行
)
```
#### **(3) 数据并行(Data Parallelism)**
- **原理**:不同卡处理不同批次的数据(vLLM 默认支持)。
- **配置**:无需额外参数,`torchrun` 自动分配。
---
### **5. 性能优化技巧**
#### **(1) 混合精度推理**
```bash
--dtype half # 使用 FP16(需 GPU 支持)
--dtype bfloat16 # 使用 BF16(A100+ 推荐)
```
#### **(2) 批处理动态调整**
```bash
--max-num-batched-tokens 4096 # 动态批处理的最大 token 数
--max-num-seqs 256 # 最大序列数
```
#### **(3) GPU 通信优化**
- 确保 **NVLink** 已启用(比 PCIe 带宽高 5-10 倍):
```bash
nvidia-smi nvlink --status # 检查 NVLink 状态
```
- 调整 `NCCL` 参数(在启动脚本前设置):
```bash
export NCCL_DEBUG=INFO
export NCCL_IB_DISABLE=0 # 启用 InfiniBand(如有)
```
---
### **6. 监控与调试**
#### **(1) 查看 GPU 使用率**
```bash
watch -n 1 nvidia-smi # 实时监控
```
#### **(2) 日志分析**
- vLLM 默认输出日志到控制台,关键信息包括:
- `"Tensor parallel size"`:实际使用的并行度。
- `"Batch size"`:动态批处理的结果。
- `"Latency"`:请求延迟(需关注 P99 值)。
#### **(3) 性能剖析**
- 使用 `py-spy` 生成火焰图:
```bash
py-spy top --pid $(pgrep -f api_server.py)
```
---
### **7. 完整部署示例**
#### **(1) 4 卡部署 OPT-6.7B 模型**
```bash
# 启动命令
torchrun --nproc_per_node=4 --master_port=29500 \
vllm/entrypoints/openai/api_server.py \
--model facebook/opt-6.7b \
--tensor-parallel-size 4 \
--dtype bfloat16 \
--port 8000
# 测试请求
curl http://localhost:8000/generate \
-H "Content-Type: application/json" \
-d '{"prompt": "Hello,", "max_tokens": 32}'
```
#### **(2) 预期输出**
```json
{
"id": "cmpl-...",
"object": "text_completion",
"created": 1680000000,
"model": "facebook/opt-6.7b",
"choices": [
{
"text": " Hello, how can I help you today?",
"index": 0,
"logprobs": null,
"finish_reason": "length"
}
]
}
```
---
### **总结**
| 步骤 | 关键操作 |
|---------------------|--------------------------------------------------------------------------|
| 环境准备 | 确认多 GPU 可用,安装匹配的 PyTorch/CUDA 版本 |
| 启动多卡 | 使用 `torchrun --nproc_per_node=NUM_GPUS` 并指定 `--tensor-parallel-size` |
| 并行策略 | 根据模型大小选择张量并行或流水线并行 |
| 性能优化 | 启用混合精度、调整批处理参数、优化 GPU 通信 |
| 监控 | 通过 `nvidia-smi` 和日志分析实时状态 |
---
阅读全文
相关推荐


















