Prhub

#48440 Re-disable CUDA graph memory profiling on ROCm

原始 PR 作者 Rohan138 合并时间 2026-07-13 11:59 文件变更 1 提交数 1 评论 0 代码增减 +5 / -7

执行摘要

在 ROCm 上禁用 CUDA graph 内存分析

在 ROCm 平台上,PR #47366 引入的 CUDA graph 内存分析导致稳定态 decode 吞吐量下降,需要回退以恢复性能。PR 说明中明确提及 'On ROCm the profiling capture regresses steady-state decode throughput'。

该 PR 内容简洁,值得快速 review 和合入。对于理解 vllm 多平台适配中的条件检查和性能权衡(特别是 CUDA graph 内存分析在不同硬件平台上的行为差异)有参考价值。无需特别精读,但可作为平台差异化处理的案例。

讨论亮点

该 PR 没有 review 评论线程。审核人 AndreasKaratzas 直接批准(LGTM),且 claude[bot] 的自动评论仅说明来自 fork 的 PR 审核受限。

实现拆解

  1. 修改平台检查条件:在 vllm/v1/worker/gpu_worker.pydetermine_available_memory 方法中,将 CUDA graph 内存分析的触发条件从 current_platform.is_cuda_alike() 改为 current_platform.is_cuda()is_cuda_alike() 会覆盖 CUDA 和 ROCm(HIP),而 is_cuda() 仅针对 NVIDIA CUDA 平台。
  2. 更新注释:将原本说明包含 ROCm 的注释替换为 'Skip on ROCm/HIP/XPU as graph pool handles and get_memory_info behave differently and can produce incorrect/negative estimates.',明确了跳过 ROCm 的原因。
  3. 更新后续注释:在 cudagraph_memory_estimate_applied 计算处添加注释说明 'On ROCm, cudagraph_memory_estimate is always 0 so this is a no-op.' 以澄清行为。
  4. 保留测试侧修复:PR #47366 中为 ROCm CI 添加的 wait_for_rocm_memory_to_settle 测试辅助函数被保留,不涉及删除。
文件 模块 状态 重要度
vllm/v1/worker/gpu_worker.py 工作节点 modified 5.39

关键源码片段

vllm/v1/worker/gpu_worker.py core-logic

核心变更文件,修改了 CUDA graph 内存分析的条件判断和注释,直接影响 ROCm 平台内存初始化流程。

# vllm/v1/worker/gpu_worker.py - determine_available_memory 方法中的关键片段# Profile CUDA graph memory if graphs will be captured.
# Skip on ROCm/HIP/XPU as graph pool handles and get_memory_info
# behave differently and can produce incorrect/negative estimates.
cudagraph_memory_estimate = 0
if (
    current_platform.is_cuda() # 改为 is_cuda(),仅对 NVIDIA CUDA 生效
    and self.vllm_config.compilation_config.cudagraph_mode
    != CUDAGraphMode.NONE
):
    cudagraph_memory_estimate = self.model_runner.profile_cudagraph_memory()# ... 后续代码 ...# On ROCm, cudagraph_memory_estimate is always 0 so this is a no-op.
# On CUDA, respect the opt-in flag as originally designed.
cudagraph_memory_estimate_applied = (
    cudagraph_memory_estimate
    if envs.VLLM_MEMORY_PROFILER_ESTIMATE_CUDAGRAPHS
    else 0
)

注:is_cuda() 严格检查 NVIDIA CUDA 平台,而 is_cuda_alike() 还会匹配 AMD ROCm(HIP)。此修改确保 ROCm 上不执行 profile_cudagraph_memory(),避免性能退化。注释也相应更新。

评论区精华

没有提炼出高价值讨论线程

当前评论区没有形成足够清晰的争议点或结论,后续有更多讨论时会体现在这里。

风险与影响

  1. 回归风险(低):此 PR 实质上是回退 PR #47366 中的一部分改动,恢复到了更早的状态。如果 PR #47366 本意是为了统一平台行为,那么回退后 CUDA 和 ROCm 在 CUDA graph 内存分析上行为再次不一致。但鉴于 PR #47366 的改动在 ROCm 上被证实引起性能退化,此回退是合理的。
  2. 性能影响(低):仅在 ROCm 平台上生效,CUDA 平台行为不变。ROCm 上跳过分析后,decode 吞吐量应恢复至 #47366 之前水平。
  3. 兼容性(低):无 API 或配置变更。

影响范围:仅影响 ROCm(AMD GPU)用户,在初始化时跳过 CUDA graph 内存分析步骤。CUDA 用户无影响。
影响程度:中等。对 ROCm 用户而言,这一回退修复了显著的性能退化(decode 吞吐量下降),但代价是可能不再准确估计 CUDA graph 所需内存,可能导致在 GPU 内存紧张时出现 OOM 或 KV cache 分配不足。但根据注释,ROCm 上 profile_cudagraph_memory() 可能产生不准确/负值,因此估计不可靠,跳过是安全的选择。
团队影响:无。

平台行为不一致

关联 Issue

未识别关联 Issue

当前没有检测到明确关联的 Issue 链接,后续同步到相关引用后会出现在这里。

完整报告

参与讨论