Prhub

#43571 [BugFix][Platform] Fix import vllm.platforms.rocm error on non-CUDA test_gpt_oss.py

原始 PR 作者 Liangliang-Ma 合并时间 2026-05-30 14:16 文件变更 1 提交数 5 评论 7 代码增减 +8 / -1

执行摘要

修复非 ROCm 平台导入 rocm 模块异常

在非CUDA torch构建(如XPU/CPU)下,pytest在收集tests/models/quantization/test_gpt_oss.py测试时会因导入vllm.platforms.rocm而触发内部AssertionError: Torch not compiled with CUDA enabled,导致整个测试无法运行。需要修复使得测试文件能够被收集并正常跳过。

值得阅读。该 PR 展示了处理平台特定导入的最佳实践:避免在模块导入时执行可能失败的硬件检测,使用条件导入和本地 fallback 函数。对于测试文件的平台兼容性处理有参考价值。设计决策清晰,讨论聚焦。

讨论亮点
  • jikunshang 最初建议不在 rocm.py 中添加 fallback,而是避免在测试文件中直接导入:'I think we should avoid call from vllm.platforms.rocm import on_gfx950 in test_gpt_oss.py instead of adding falling back.'
  • AndreasKaratzas 提出了使用 current_platform.is_rocm() 的条件导入方式,并道歉之前他引入了这个疏忽:'I would probably write it like this: if current_platform.is_rocm(): ... else: ... Also I apologize for the oversight there.'
  • 最终采用条件导入方案,未修改 rocm.py

实现拆解

  1. 问题定位:vllm/platforms/rocm.py 在模块导入级别调用了 torch.cuda.get_device_properties,该函数仅在 CUDA-enabled 的 PyTorch 中可用。
  2. 方案讨论:最初尝试在 rocm.py 中增加 try/except 包裹调用返回空字符串,但 reviewer 建议在测试文件中避免直接导入该模块,以免引入外部依赖。
  3. 最终实现:在 tests/models/quantization/test_gpt_oss.py 中,将无条件导入替换为条件导入——通过 from vllm.platforms import current_platform 检查平台类型,若为 ROCm 则从 rocm 模块导入 on_gfx950,否则定义一个始终返回 False 的本地函数。
  4. 结果:非 ROCm 构建下,测试文件收集不再崩溃,会被 pytest skipif 守卫跳过,输出 '8 skipped'。
文件 模块 状态 重要度
tests/models/quantization/test_gpt_oss.py GPT-OSS 测试 modified 4.85

关键符号

on_gfx950

关键源码片段

tests/models/quantization/test_gpt_oss.py test-coverage

唯一变更文件,通过条件导入修复了非 ROCm 平台下导入崩溃的问题。

from vllm.platforms import current_platform# 仅在当前平台为 ROCm 时从 rocm 模块导入 on_gfx950,
# 否则定义一个返回 False 的本地函数,避免非 CUDA 构建下的导入崩溃。
if current_platform.is_rocm():
    from vllm.platforms.rocm import on_gfx950
else:
    def on_gfx950() -> bool:
        return False

评论区精华

使用条件导入而非在 rocm.py 增加 fallback 设计

jikunshang 提出应避免在测试文件中直接导入 rocm 模块,AndreasKaratzas 建议使用 current_platform.is_rocm() 进行条件导入。

结论:采纳了条件导入方案,在测试文件中根据平台条件导入 on_gfx950 或定义本地 fallback。 · 已解决

风险与影响

风险极低。变更仅限于测试文件,且使用已封装的 current_platform API 进行判断,不涉及生产逻辑。主要风险在于如果未来 current_platform.is_rocm() 的行为发生变化(如平台检测逻辑修改),可能导致测试执行条件改变,但仅影响该测试文件的跳过行为,不影响其他。

影响范围小,仅影响 tests/models/quantization/test_gpt_oss.py 文件的收集和执行。对非 CUDA 构建(XPU/CPU)的用户,该测试不再崩溃,增加测试可靠性。对 ROCm 用户无影响。对其他组件无影响。

测试兼容性修复 条件导入

关联 Issue

未识别关联 Issue

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

完整报告

参与讨论