
CUDA out of memory
快速结论:该报错出现在运行 Qwen3-VL-235B 模型处理多图长多轮输入时,VRAM 耗尽导致训练或推理中断。优先排查是否使用了 --decode-context-parallel-size 2 参数,以及多模态编码器张量并行模式 --mm-encoder-tp-mode 的设置,并尝试升级到包含 #34246 修复的版本。
问题场景
用户在使用 vLLM 部署 Qwen3-VL-235B 模型,处理多图片、长序列、多轮对话输入时触发 OOM。环境为 8×H100 80GB,运行 Ubuntu 24.04,PyTorch 2.10.0+cu129,CUDA 12.9。
报错原文
CUDA out of memory. Tried to allocate ... MiB (GPU 0; ... GiB total capacity; ... GiB already allocated; ... GiB free; ... GiB reserved in total by PyTorch)
原因分析
可能原因:Qwen3-VL-235B 在进行多模态掩码(masked_scatter_)操作时,底层实现会创建大量临时副本,尤其是在处理大尺寸图像嵌入和长上下文时,导致 VRAM 超出可用范围。Issue 中开发者确认,masked_scatter_ 操作是常见的高内存占用环节。
环境排查
- GPU 型号与数量:NVIDIA H100 80GB HBM3 ×8
- CUDA 版本:12.9
- PyTorch 版本:2.10.0+cu129
- vLLM 版本:检查是否已合入 #34246
- 启动参数:检查是否设置了
--decode-context-parallel-size 2、--mm-encoder-tp-mode、--gpu-memory-utilization
解决步骤
- 尝试关闭 CUDA 图优化:添加启动参数
--enforce-eager。Issue 中此步无效,但可优先尝试。 - 移除 decode_context_parallel:删除
--decode-context-parallel-size 2参数。可尝试此选项。 - 调整多模态编码器张量并行模式:如果使用
--mm-encoder-tp-mode data,尝试改为--mm-encoder-tp-mode weights(可配合降低--gpu-memory-utilization,例如从 0.93 降至 0.91)。 - 升级 vLLM 版本至包含 #34246 修复:该 PR 将
masked_scatter_替换为直接索引(index_put),显著降低内存占用。Issue 中用户验证后 OOM 问题被解决。 - 缩小测试输入规模:使用较小的 Qwen3-VL 变体进行调试,以确认是否为多模态掩码逻辑导致的内存问题。
验证方法
使用原始测试脚本(多图长多轮输入)重新执行,观察是否在相同位置再次出现 CUDA out of memory 报错。如果不再报错且能正常运行,则问题已解决。



