vLLM多GPU张量并行大模型推理完整实操教程
为什么需要多GPU张量并行
当你部署一个参数量超过单卡显存的大模型(例如70B、130B)时,单张显卡根本塞不下。张量并行(Tensor Parallelism) 能把模型权重切分到多张GPU上,让它们协同完成推理。
vLLM作为一个高性能推理框架,原生支持张量并行,配置非常简单。
本文围绕vLLM多GPU张量并行大模型推理完整实操教程,从零开始带你在多卡服务器上跑通推理。
准备工作:硬件与软件
硬件要求
- 至少2张NVIDIA GPU(建议同型号,显存8GB以上)
- 显存总量需超过模型权重大小(例如70B模型FP16约140GB,你需要至少4张40GB A100)
- 服务器需安装NVIDIA驱动、CUDA(推荐11.8或12.1)和cuDNN
软件环境
- Python 3.8 – 3.11
- PyTorch(建议从官网安装CUDA对应版本)
- vLLM(最新版):
pip install vllm
如果网络慢,可以换国内源:pip install vllm -i https://pypi.tuna.tsinghua.edu.cn/simple
核心操作:配置并启动多GPU推理
1. 确认GPU状态
运行 nvidia-smi 检查GPU数量和可用显存。
确保GPU之间已通过NVLink或PCIe连接,否则张量并行通信会有瓶颈。
2. 编写推理脚本
vLLM通过 LLM 或 AsyncLLMEngine 启动。
最简便的方式是使用Python脚本。
示例文件 infer_tp.py:
from vLLM import LLM, SamplingParams
# 关键参数:tensor_parallel_size 设置为GPU数量(这里假设4张)
model_path = "/path/to/your/model" # 可以是本地路径或HuggingFace模型名
llm = LLM(model=model_path, tensor_parallel_size=4)
prompts = [
"介绍一下张量并行的原理。",
"用Python写一个快速排序。"
]
sampling_params = SamplingParams(temperature=0.8, max_tokens=256)
outputs = llm.generate(prompts, sampling_params)
for output in outputs:
print(output.outputs[0].text)
关键行:tensor_parallel_size=4 告诉vLLM将模型切分到4张GPU上。
如果你的服务器只有2张,改为2即可。
3. 启动推理
python infer_tp.py
首次运行会自动下载模型(如果模型在云端)并切分权重。
你会看到类似 Launching tensor parallel with size 4 的日志。
4. 使用vLLM服务模式(可选)
如果你需要HTTP API,可以用以下命令启动:
python -m vLLM.entrypoints.openai.api_server \
--model /path/to/model \
--tensor-parallel-size 4 \
--port 8000
然后通过 curl 或客户端发送请求。
避坑说明:常见错误与解决
错误1:CUDA out of memory
- 原因:单卡显存不足以放下切分后的碎片,或未正确设置
tensor_parallel_size。 - 解决:检查模型是否太大,减少
max num batched tokens或使用更小的精度(如FP16、INT8)。在启动参数中添加--dtype half。
错误2:RuntimeError: Expected tensor to have ... 通信错误
- 原因:GPU之间不支持P2P访问,或驱动版本不匹配。
- 解决:运行
python -c "import torch; print(torch.cuda.is_available()); print(torch.cuda.device_count())"确认PyTorch能识别全部显卡。再执行torch.cuda.nccl.all_reduce测试。如果报错,尝试设置环境变量export NCCL_P2P_DISABLE=1(会降低性能但稳定)。
错误3:模型下载极慢
- 解决:提前用
huggingface-cli下载模型到本地,指定model参数为本地路径。
效果验证:确认多GPU真正并行工作
- 运行上述脚本或API服务。
- 另开终端执行
watch -n 1 nvidia-smi,观察所有GPU的显存使用率和计算利用率。 - 如果每张GPU显存占用接近 模型总权重/GPU数,且利用率均有波动,说明张量并行成功。
- 也可以比较单卡推理(
tensor_parallel_size=1)与多卡推理的响应速度,多卡在模型足够大时会有明显加速。
常见问题解答
Q:张量并行与数据并行有什么区别?
A:数据并行把不同batch分给各卡,每卡存完整模型;张量并行把模型切分,每卡只存一部分权重,适合单batch推理。
Q:我的模型不支持vLLM怎么办?
A:vLLM目前支持大多数HuggingFace上常见的Transformer架构(如Llama、Mistral、Qwen)。如果无法加载,参考官方文档检查支持列表。
Q:多GPU推理显存反而比单卡高?
A:张量并行会引入额外通信缓冲区,显存略有增加(约5-10%),但单卡放不下的模型只有多卡才能跑。
小结
本文以vLLM多GPU张量并行大模型推理完整实操教程为主线,从环境准备、核心参数设置到常见错误排查,给出可直接运行的步骤。
实际操作时,建议先从2卡开始测试,确认环境稳定后再扩展到更多GPU。
遇到异常时优先回看上文的避坑说明,大部分问题都能解决。
如果你正在处理类似的部署需求,按本文流程走一遍,多GPU推理不会太复杂。