Prhub

#46741 [ROCm][Bugfix] Fix HIP fork re-init in multimodal offline examples

原始 PR 作者 peizhang56 合并时间 2026-06-26 13:37 文件变更 1 提交数 1 评论 3 代码增减 +14 / -5

执行摘要

修复 ROCm 上 fork 安全问题的环境变量设置

AMD ROCm 的 CI 步骤(examplestransformers nightly models)在执行多模态离线示例时,由于 transformersvllm 之前被导入,导致 torch.cuda.is_available() 触发了 cuInit,从而在父进程中创建了 HIP 上下文,使得后面 fork 出来的子进程无法重新初始化 CUDA,报错 RuntimeError: Cannot re-initialize CUDA in forked subprocess

该 PR 是一个典型的环境兼容性修复,技术含量不高,但解决了 CI 中的实际问题。建议在类似场景中考虑在 Dockerfile 或容器层面统一设置 PYTORCH_NVML_BASED_CUDA_CHECK=1,以避免在多个命令中重复添加。

讨论亮点

mawong-amd 提出了是否有更好方案的问题,例如在 Dockerfile 中设置该环境变量或放到测试级别,以避免代码膨胀。作者 peizhang56 随后更新了 PR,将之前的方案(可能在多个地方分散设置)改为在当前修改中更集中地处理。最终 PR 被批准。

实现拆解

  1. 定位问题根源:在 .buildkite/test-amd.yaml 中,vision_language_offline.pyvision_language_multi_image_offline.py 这两个示例脚本的导入顺序导致 HIP 上下文在父进程中被初始化。
  2. 确定修复方案:利用 vllm/env_override.py 中已经定义的 PYTORCH_NVML_BASED_CUDA_CHECK=1 环境变量,它可以让 torch.cuda.is_available() 绕过 cuInit,转而通过 NVML 检测 GPU 可用性,从而避免创建 HIP 上下文。
  3. 修改 CI 配置文件:在两个受影响的地方(mi300·examplesTransformers Nightly Models)的命令前加上 PYTORCH_NVML_BASED_CUDA_CHECK=1 前缀,并添加注释说明原因。
文件 模块 状态 重要度
.buildkite/test-amd.yaml CI 配置 modified 3.96

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

评论区精华

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

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

风险与影响

该修复仅影响 CI 配置文件,不会对运行时行为产生影响。PYTORCH_NVML_BASED_CUDA_CHECK=1 是 vLLM 已支持的机制,且已经在 vllm/env_override.py 中使用,因此风险极低。需要注意的是,如果未来有其他示例也遵循同样的导入顺序,可能还需要应用相同的修复。

直接修复了 ROCm CI 中两个测试阶段的失败问题,包括 Examples 步骤和 Transformers Nightly Models 步骤中的多模态离线示例。影响范围仅限于 AMD ROCm CI 环境,不影响 NVIDIA 或其他平台。修复方式是非侵入性的,不需要修改 Python 源码。

关联 Issue

未识别关联 Issue

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

完整报告

参与讨论