viable/strict/1789084224: [ROCm] Enable UVM tests via hip-python's cuda.bindings interop (#196492)
PyTorch 发布记录显示,torch.cuda._use_uvm() 在 ROCm 上已可工作:它直接导入 cuda.bindings.runtime,而 hip-python 的互操作包(PyPI: hip-python-interop)提供 HIP 后端的 cuda.bindings,并采用 cuda-python 12+ 的模块布局,已在 HIP 7.15 上实测 cudaMallocManaged、cudaMemAdvise、cudaFree 遵循 (err, *outs) 约定,且 cuda/hip 枚举类可比较相等,使 cuda_python_error_check 无需改动。此前的阻碍仅在测试基础设施:TEST_CUDA_PYTHON_BINDINGS 要求 torch.version.cuda,四个 TestMemPool UVM 测试带有笼统的「ROCm 不支持 UVM」跳过标记。
发展脉络
- 首次出现viable/strict/1789084224: [ROCm] Enable UVM tests via hip-python's cuda.bindings interop (#196492)PyTorch Core
- 当前判断这属于 PyTorch 对 ROCm 与 CUDA 生态兼容层的渐进式对齐:通过 hip-python-interop 复用 cuda-python 的模块布局与错误约定,降低跨后端测试分叉成本。判断依据是证据中枚举可比较相等、错误检查函数无需改动这两点,但样本仅为单个 PR,尚不足以说明整体生态收敛速度。Agent Pulse · 分析
该变更让 TEST_CUDA_PYTHON_BINDINGS 在 ROCm 上接受 cuda.bindings,但仅限 HIP 后端版本,通过 hip-python 的 HIP_PYTHON 标记属性检测(导入安全、不调用驱动);ROCm 机器上的 NVIDIA cuda-bindings 仍被排除。四个 skipIfRocm 行被移除;在没有 hip-python-interop 的机器(包括当前 ROCm CI 镜像)上,测试会像没有 cuda-python 的 CUDA 机器一样,通过 requires_cuda_python_bindings 跳过。将 hip-python/hip-python-interop 加入 ROCm CI 镜像被推迟,直到有匹配 CI ROCm 版本的 wheel。
从证据看,UVM 路径本身在 ROCm 上已可用,剩余工作是测试门控与 CI 镜像依赖,而非运行时能力缺失。可验证的下一信号是 ROCm CI 镜像是否加入匹配版本的 hip-python-interop wheel,以及那四个 TestMemPool UVM 测试是否在 ROCm CI 上真正执行而非跳过。
这属于 PyTorch 对 ROCm 与 CUDA 生态兼容层的渐进式对齐:通过 hip-python-interop 复用 cuda-python 的模块布局与错误约定,降低跨后端测试分叉成本。判断依据是证据中枚举可比较相等、错误检查函数无需改动这两点,但样本仅为单个 PR,尚不足以说明整体生态收敛速度。
对使用 ROCm 的团队而言,统一内存(UVM)相关代码路径的测试覆盖提升,有助于减少跨后端行为差异带来的排查成本;但当前收益受限于 CI 尚未安装互操作包,实际价值取决于后续镜像更新。
若后续 wheel 与 CI ROCm 版本对齐,UVM 相关测试有望在 ROCm CI 常态运行;反之测试将继续以跳过形式存在。可观察信号是 CI 镜像变更记录与测试运行结果中 skip 比例的下降。