在使用 vLLM 部署大模型(如 Qwen3.5-27B)进行多卡张量并行时,经常会遇到一个需求:多张 GPU 中,希望其中某一张卡的显存占用更低,避免占满显存影响其他任务 。但 vLLM 本身并不支持为单张 GPU 独立配置显存利用率,只能全局统一设置 --gpu-memory-utilization。
本文将完整梳理可行方案,清晰说明操作顺序与原理,帮你精准实现单卡显存差异化控制。
一、核心限制说明
vLLM 的 --gpu-memory-utilization 是全局参数 ,对所有可见 GPU 统一生效,无法针对某一张卡单独设置不同比例。
模型启动时会根据当前各卡可用显存 一次性完成显存规划与分配,启动后再修改显存限制,不会动态重分配显存。
二、正确实现思路:先限制、再启动、后释放
要实现「多卡并行,仅压低指定单卡显存」,唯一可靠路径是在 vLLM 启动前,通过 NVIDIA 系统工具对目标卡做显存硬限制,让 vLLM 启动时自动适配该卡的显存上限。
1. 确定目标 GPU 编号
以 4 卡环境为例,CUDA 编号通常为:0、1、2、3
若要压低第 3 张卡,目标设备为 3。
2. 启动前对目标卡设置显存上限
使用 nvidia-smi 对指定卡限制显存容量:
bash
# 对 3 号卡设置显存上限(单位 MB,根据显卡实际显存调整)
nvidia-smi -i 3 -ac 40960
-i 3:指定 3 号 GPU40960:限制为 40GB,可根据需求降低,例如 24GB 显卡可设为20480
3. 启动 vLLM 服务
此时 vLLM 会识别到 3 号卡显存更小,自动减少其显存占用,其他卡仍可使用较高显存利用率:
bash
CUDA_VISIBLE_DEVICES=0,1,2,3 vllm serve /root/autodl-tmp/Qwen3.5-27B \
--host 0.0.0.0 \
--port 8000 \
--dtype bfloat16 \
--tensor-parallel-size 4 \
--gpu-memory-utilization 0.9 \
--max-model-len 32768 \
--enable-prefix-caching \
--reasoning-parser qwen3
4. 模型启动完成后取消显存限制
bash
# 移除 3 号卡的显存限制
nvidia-smi -i 3 -rac
三、关键结论与误区澄清
-
模型启动后再限制/取消限制无效
vLLM 在初始化阶段已完成显存分配,启动后修改硬件限制不会改变已占用的显存大小,
nvidia-smi显示无变化。 -
必须遵循「先限制 → 启 vLLM → 后取消」流程
只有在 vLLM 初始化前限制目标卡显存,才能让其在张量并行时自动降低该卡的显存分配,达到预期效果。
-
无其他原生方案
vLLM 暂不支持单卡差异化显存配置,
nvidia-smi硬限制是目前最稳定、最通用的实现方式。
四、适用场景
- 4 卡并行部署大模型,需保留一张卡部分显存运行其他服务
- 某张 GPU 体质/散热较差,需降低显存占用提升稳定性
- 多任务共享 GPU 集群,需要精细化控制显存分配
总结
vLLM 多卡部署无法直接单独配置单卡显存利用率,但通过 NVIDIA 系统级显存限制 + 正确启动顺序 ,可以完美实现「多卡并行、单卡低显存」的需求。操作核心在于在模型初始化前施加限制,启动后再释放限制不影响已生效的显存布局。