③-进阶篇:vLLM实战——多卡部署、压测与排障

本篇目标:掌握多卡并行配置、学会压测工具、能处理常见报错、理解显存精细管理

前置要求:已完成第③篇基础篇,成功跑起单卡服务。


第一步:多卡部署(RTX 5090 双卡示例)

如果你有两张 RTX 5090(或者两张 4090),可以让 vLLM 把模型切分到两张卡上:

bash 复制代码
vllm serve Qwen/Qwen2.5-32B-Instruct \
    --tensor-parallel-size 2 \
    --quantization fp8 \
    --max-model-len 8192 \
    --port 8001

--tensor-parallel-size 2 告诉 vLLM:「把模型切成两半,分别放在两张卡上,然后协同推理。」

💡 双 RTX 5090 能跑多大? 32B Q4 量化约 20GB,配合 fp8 双卡可以跑起来。这样你就有能力跑 Qwen2.5-32B、Mistral-34B 等大模型了。

检查两张卡是否都在工作:

打开另一个终端,输入:

bash 复制代码
nvidia-smi

你会看到两个 GPU 进程,显存都在被使用。

多卡部署注意事项

问题 说明
显卡型号要一致 两张卡最好是同型号(如两张 5090),显存大小要一致
NVLink 更快 如果有 NVLink,多卡通信更快;没有也能跑,PCIe 带宽够用
模型要支持 大部分主流模型都支持,遇到报错看 FAQ 部分

第二步:用 bench serve 做压测

vLLM 自带了一个压测工具 bench serve,可以用来测试吞吐量。

安装依赖

bash 复制代码
pip install aiohttp

启动服务(如果还没启动)

bash 复制代码
vllm serve Qwen/Qwen2.5-14B-Instruct \
    --tensor-parallel-size 1 \
    --quantization fp8 \
    --port 8000

运行压测

另开一个终端:

bash 复制代码
vllm bench serve \
    --model Qwen/Qwen2.5-14B-Instruct \
    --backend vllm \
    --num-prompts 100 \
    --max-concurrency 10 \
    --endpoint /v1/chat/completions

参数解释:

参数 含义
--num-prompts 总共发多少个请求
--max-concurrency 同时最多多少个并发
--endpoint API 端点路径

压测结果怎么看?

压测完成后会输出几个关键指标:

指标 含义 好的范围
TTFT 首 token 延迟(用户等第一个字的时间) < 1s
TPOT 每个 token 的平均生成时间 < 50ms
Throughput 吞吐量(token/s) 越高越好
Success Rate 成功率 100%

💡 RTX 5090 + Qwen2.5-14B + fp8:单卡 Throughput 通常可达 80~120 tok/s(取决于并发数)


第三步:显存精细管理

问题:显存不释放怎么办?

这是 vLLM 最常见的困扰:模型加载后一直占着显存,我想换别的程序跑怎么办?

方法一:重启服务(最简单)

bash 复制代码
# Ctrl+C 停掉当前服务
# 然后重启,或者启动另一个模型的服务

方法二:用 torch.cuda.empty_cache()

如果你用 Python 代码管理 vLLM,可以在换模型前手动清理显存:

python 复制代码
import torch
torch.cuda.empty_cache()   # 清理未使用的显存缓存
torch.cuda.synchronize()   # 等待所有 GPU 操作完成

方法三:限制 vLLM 的显存使用

启动时加上 --gpu-memory-utilization 参数,限制 vLLM 最多用多少显存:

bash 复制代码
vllm serve Qwen/Qwen2.5-14B-Instruct \
    --gpu-memory-utilization 0.8 \
    --port 8000

这样 vLLM 最多用 80% 的显存,留 20% 给其他程序。


第四步:RTX 5090 + vLLM 显存配置参考

模型 量化 上下文长度 显存占用 RTX 5090 能否跑
Qwen2.5-7B fp8 4K ~8GB ✅ 轻松
Qwen2.5-7B fp8 8K ~10GB ✅ 轻松
Qwen2.5-14B fp8 4K ~14GB ✅ 可以
Qwen2.5-14B fp8 8K ~20GB ✅ 妥妥够
Qwen2.5-32B fp8 4K ~26GB ⚠️ 双卡推荐
Qwen2.5-32B fp8 8K ~30GB ⚠️ 双卡推荐

第五步:常见报错 FAQ

❌ 报错:CUDA out of memory

原因 :显存不够,模型太大了。
解决

  1. 降低 max-model-len(上下文短一点,显存少用很多)
  2. 换成更小的量化(fp8int8
  3. 换成更小的模型(14B → 7B)
  4. 清理其他占用显存的程序:nvidia-smi 查看进程

❌ 报错:RuntimeError: NCCL error in: ...

原因 :多卡并行时 NCCL(NVIDIA 通信库)初始化失败,通常是 CUDA 版本或驱动问题。
解决

bash 复制代码
# 检查 CUDA 版本
nvcc --version

# 确保 NCCL 安装正确
pip install nccl

# 单卡部署先跑通,再尝试多卡

❌ 报错:ValueError: Model is not supported with tensor parallel

原因 :有些模型不支持张量并行,或者 --tensor-parallel-size 设的值和实际显卡数量不匹配。
解决

  1. 检查显卡数量:nvidia-smi -L
  2. 确保 --tensor-parallel-size 不超过实际显卡数
  3. 换回单卡:--tensor-parallel-size 1

❌ 报错:ImportError: cannot import name 'LlamaForCausalLM'

原因 :vLLM 版本和模型不兼容,或者模型格式不支持。
解决

bash 复制代码
# 升级到最新版 vLLM
pip install --upgrade vllm

# 或者换用 HuggingFace 原生格式的模型

❌ 报错:服务启动后第一个请求特别慢

原因 :正常现象。vLLM 模型常驻显存,但第一个请求还是要做 Prefill(预填充),会比较慢。后续请求因为 KV Cache 命中率高,会快很多。
解决:这是设计如此,不是报错。可以先发一个「预热」请求,然后再开始正式使用。


本篇小结

你做到了 说明
✅ 多卡并行配置 tensor-parallel-size 2
✅ 压测工具使用 bench serve
✅ 显存精细管理 empty_cache() / --gpu-memory-utilization
✅ RTX 5090 显存配置参考 7B~32B 模型对照表
✅ 常见报错处理 OOM / NCCL / 模型不支持

下一步

  • 想完全不用命令行?
  • 想搞懂三工具到底怎么选?
  • 想看公开 benchmark 数据?

vLLM 是三个工具里配置门槛最高的,但也是生产性能最强的。如果你的场景需要对外服务,vLLM 值得投入精力配置好。

相关推荐
颖火虫盟主1 小时前
Claude Code Hook 系统详解与 Hello World 实操
前端·网络·数据库
Languorous.2 小时前
Windows 安装 Linux 虚拟机 / WSL 完整教程(新手零失败)
linux·运维·windows
汤愈韬2 小时前
TK_HCIP-Security_FW的可靠性_双机热备场景_上接路由器下接交换机
网络·网络协议·网络安全
优化Henry2 小时前
5G基站设备替换过程中因参数配置与硬件不匹配产生的告警排查案例
运维·网络·5g·信息与通信
皮卡蛋炒饭.2 小时前
网络层相关学习
网络
颂love2 小时前
Linux命令的简单学习
linux·运维·学习
WindLOR3 小时前
车联网TBOX开发实战三,APN路由转发
网络·tbox
satadriver3 小时前
ip-guard网络通信加解密
linux·网络·tcp/ip
meilindehuzi_a3 小时前
【Linux 进程基础】一文读懂命令行参数与环境变量
linux·服务器