CUDA out of memory

用户在 4x RTX 3070 上运行 Qwen/Qwen2.5-Coder-32B-Instruct-GPTQ-Int4 模型,从 vLLM 0.6.x 升级到 0.7.0 并启用 VLLM_USE_V1=1 后,原本可支持 12K context length,升级后仅能支撑 3K,超出即触发

CUDA out of memory

CUDA out of memory

快速结论:在 vLLM V1 引擎(0.7.0 及以上版本)中,相比 V0 引擎,显存占用更高,导致相同配置下更易触发 CUDA out of memory 错误。优先排查 --gpu-memory-utilization--max-num-batched-tokens 参数是否设置过大,并确认是否正在使用 torch.compile。

问题场景

用户在 4x RTX 3070 上运行 Qwen/Qwen2.5-Coder-32B-Instruct-GPTQ-Int4 模型,从 vLLM 0.6.x 升级到 0.7.0 并启用 VLLM_USE_V1=1 后,原本可支持 12K context length,升级后仅能支撑 3K,超出即触发 CUDA OOM。其他用户在使用 Qwen2.5-32B-Instruct-AWQ(2x RTX 4070 Ti) 及 DeepSeek R1 32B 蒸馏模型时也遇到了相同问题。

报错原文

CUDA out of memory

原因分析

vLLM V1 引擎在内存 profiling 不够精确(运行时存在动态内存分配),并且默认启用 torch.compile 和大量 cudagraphs,这可能导致更高的峰值显存占用和更长的预热时间。这是 V1 引擎的已知性能回归问题。

环境排查

  • vLLM 版本(0.7.0 或更高)
  • 是否启用 VLLM_USE_V1 环境变量
  • 显卡型号及总显存(多卡时需确认并行规模)
  • 模型名称及量化方式(如 GPTQ-Int4、AWQ)

解决步骤

  1. 降低 --gpu-memory-utilization 不要设为 1.0,调整为 0.95 或 0.9。官方不建议设置 1.0,因为内存 profiling 并非 100% 准确且运行时会有动态内存分配。
  2. 减小 --max-num-batched-tokens 将其降低到更合理的值,例如 2K,以减少峰值激活内存和 torch.compile 编译的内存消耗。
  3. 调整 --max-model-len 如非必须,可适当降低 context length 上限。
  4. 尝试最新 nightly 构建: issue 中提到 PR #14508 已经合入以修复此问题,可测试最新 nightly 版本是否仍出现 OOM。

注意:以上步骤中的参数调整属于“可优先尝试”的解决方法,V1 引擎更大内存占用问题仍在修复中,并非 0.7.0 版本一定会完全修复。

验证方法

使用同样的模型和 context length,在 V1 引擎下调低上述参数后,观察服务启动是否不再报 CUDA out of memory,并检查是否能够正常处理预期的上下文长度。

参考来源

vllm-project/vllm #12529

GamsGo AI

AI 工具推荐

想把多个 AI 模型放在一个入口?

GamsGo AI 集成 ChatGPT、DeepSeek、Gemini、Claude、Midjourney、Veo 等常用模型,适合写作、绘图、视频和日常 AI 工作流。

了解 GamsGo AI

推广链接:通过此链接购买,我可能获得佣金,不影响你的价格。

celebrityanime
celebrityanime
文章: 14980

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注