Prhub

#39421 [ROCm][CI] Resolved nvidia package deps issue

原始 PR 作者 AndreasKaratzas 合并时间 2026-04-10 00:06 文件变更 3 提交数 1 评论 2 代码增减 +44 / -11

执行摘要

修复 ROCm CI/Docker 构建因 NVIDIA 包命名变更导致的依赖问题。

根据PR body描述,动机是修复因NVIDIA包命名变更(cu12/cu13后缀及无后缀变体)导致的ROCm CI/Docker构建失败。作者AndreasKaratzas在body中说明:“Fixes ROCm CI/Docker builds broken by nvidia package naming changes (cu12/cu13 suffixed and unsuffixed variants)。”

该PR主要涉及CI/基础设施调整,对于关注ROCm构建或依赖管理的工程师值得浏览,特别是.pre-commit-config.yaml和Dockerfile.rocm的变更。建议关注:1. 排除列表的扩展模式如何应对NVIDIA包命名变化。2. Dockerfile.rocm中验证步骤的移除是否在后续PR中补回(从review看未解决)。对于一般开发者,无需精读。

讨论亮点

review中主要讨论点集中在Dockerfile.rocm的修改:gemini-code-assist[bot]指出移除了PyTorch ROCm验证步骤,认为这是重要的安全防护,建议在COPY命令后重新引入该验证。tjtanaa回复“Let's keep the original check”,但最终PR被tjtanaa批准并合并,未在讨论中明确解决此疑虑。从提交历史看,PR只有一次提交,未在合并前添加回验证步骤。

实现拆解

实现分为三个关键部分:1. 在.pre-commit-config.yaml中扩展--no-emit-package排除列表,新增无后缀、-cu12和-cu13后缀的NVIDIA包变体,确保uv在依赖编译时不发出这些包。2. 在requirements/rocm-test.txt中同步更新排除列表,匹配.pre-commit-config.yaml的变更。3. 修改docker/Dockerfile.rocm,将PyTorch ROCm验证步骤替换为持久化构建的wheel到/opt/vllm-wheels/,以便python_only_compile_rocm.sh在移除编译器后能重新安装。

文件 模块 状态 重要度
.pre-commit-config.yaml CI/ 构建配置 modified 7.0
docker/Dockerfile.rocm Docker 构建 modified 6.0
requirements/rocm-test.txt 依赖管理 modified 5.0

分析完成后,这里会展示 LLM 生成的相对完整源码片段和详细注释。

评论区精华

Dockerfile.rocm 中 PyTorch ROCm 验证步骤的移除 正确性

gemini-code-assist[bot] 指出移除了验证 PyTorch 是否为 ROCm 构建的步骤,认为这是防止错误使用 CUDA 版本的重要防护;tjtanaa 回复“Let's keep the original check”。

结论:PR 被批准合并,但未在讨论中明确是否重新添加验证步骤,提交历史显示未添加。 · 未解决

风险与影响

主要风险包括:1. 兼容性风险:Dockerfile.rocm中移除了PyTorch ROCm验证步骤,可能导致构建的Docker镜像错误使用CUDA版本PyTorch而非ROCm版本,影响ROCm环境正确性(gemini-code-assist[bot]指出)。2. 维护风险:.pre-commit-config.yaml和rocm-test.txt中大量手动添加的排除项可能随NVIDIA包命名进一步变更而需要持续更新,增加维护负担。3. 构建稳定性风险:如果python_only_compile_rocm.sh未能正确从/opt/vllm-wheels/重新安装wheel,可能导致后续步骤失败。

影响范围:1. 对用户:无直接影响,主要影响CI和Docker构建流程。2. 对系统:修复ROCm CI/Docker构建失败,确保ROCm相关测试和部署能正常运行。3. 对团队:提升开发效率,减少因构建失败导致的CI阻塞;但需关注移除验证步骤可能引入的潜在环境问题。影响程度中等,局限于构建基础设施。

移除关键验证步骤 依赖排除列表维护负担

关联 Issue

未识别关联 Issue

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

完整报告

执行摘要

该PR修复了ROCm CI和Docker构建因NVIDIA包命名变更(引入cu12/cu13后缀及无后缀变体)而失败的问题,通过扩展依赖排除列表和调整Dockerfile实现,但移除了PyTorch ROCm验证步骤,可能引入环境正确性风险。

功能与动机

PR body明确指出:“Fixes ROCm CI/Docker builds broken by nvidia package naming changes (cu12/cu13 suffixed and unsuffixed variants)。” 动机是解决NVIDIA包命名策略更新导致的构建依赖冲突,确保ROCm相关构建流程稳定运行。

实现拆解

实现涉及三个文件:

  1. .pre-commit-config.yaml:在uv pip compile步骤中扩展--no-emit-package排除列表,新增三类NVIDIA包变体:

    • 无后缀(如nvidia-cublas
    • -cu12后缀(如nvidia-cublas-cu12
    • -cu13后缀(如nvidia-cublas-cu13
      覆盖了cublascudnnnccl等关键包,防止uv发出这些包导致依赖冲突。
  2. requirements/rocm-test.txt:同步更新排除列表,确保与.pre-commit-config.yaml一致,例如将--no-emit-package, nvidia-cudnn-cu13改为--no-emit-package, nvidia-cudnn并添加所有变体。

  3. docker/Dockerfile.rocm:将原有的PyTorch ROCm验证步骤(检查torch.version.hip)替换为持久化构建的wheel:
    dockerfile COPY --from=export_vllm /*.whl /opt/vllm-wheels/
    目的是让后续脚本python_only_compile_rocm.sh能在移除编译器后重新安装wheel。

评论区精华

review中仅有的讨论聚焦于Dockerfile修改:

  • gemini-code-assist[bot] 指出:

    “While persisting the built wheel is a good addition, the verification step that ensures the PyTorch build is for ROCm has been removed. This check is a valuable safeguard to prevent building a Docker image with an incorrect PyTorch version.”

  • tjtanaa 回复:

    “Let's keep the original check”
    但PR最终被tjtanaa批准合并,未在提交中重新添加验证步骤,此疑虑处于未解决状态。

风险与影响

  • 主要风险:移除PyTorch ROCm验证步骤可能导致构建的Docker镜像错误使用CUDA版本PyTorch,影响ROCm环境正确性,可能引发运行时问题。
  • 次要风险:大量手动排除项增加了维护负担,未来NVIDIA包命名再变更时需同步更新。
  • 影响范围:仅限于CI和Docker构建流程,对最终用户无直接影响,但确保ROCm测试和部署的稳定性。

关联脉络

从近期历史PR看,该PR与以下PR同属基础设施修复范畴:

  • #39390:修复CI夜间索引生成权限问题,同属CI脚本调整。
  • #38950:在Dockerfile中添加fastsafetensors包,优化构建过程。
  • #39164:为XPU跳过测试设置,解决CI死锁,同属平台特定CI调整。
    整体趋势显示团队持续优化多平台(ROCm、XPU)的构建和测试基础设施,以应对硬件和依赖生态变化。

参与讨论