在 Windows 上为 AMD 运行 CUDA – 通过 ZLUDA 和 ROCm/HIP 在 AMD GPU 上运行 CUDA Windows 应用

TL;DR

CUDA‑for‑AMD‑Windows 通过 ZLUDA 和 ROCm/HIP 栈将 CUDA 调用转换为 AMD GPU 可执行的指令,从而使面向 CUDA 的 Windows 程序能够在 AMD GPU 上运行;参考实现已在 Radeon RX 9060 XT (gfx1200) 上验证,并支持 cuBLAS、cuBLASLt、cuSPARSE 和 cuFFT 等核心库。


项目提供的内容

  • 一个可复现的 Windows 环境,通过 ZLUDA → ROCm/HIP 链来满足 CUDA 驱动和库调用。
  • 自动化安装脚本 (install.ps1),可检测 AMD GPU、验证驱动/HIP SDK 版本、拉取官方 ZLUDA Windows 构建,并可选下载 LibTorch 2.3.0+cu118。
  • 运行时检查脚本 (cuda_check.exedoctor.ps1gpu-scan.ps1),用于确认库覆盖范围并报告 GPU 详细信息。
  • 文档化的验证工作流,展示了完整的 PPO 训练运行(2,216,347 参数网络)在 AMD GPU 上完成 65,536 个时间步。

已验证的硬件和软件栈

组件 版本/详情
AMD GPU Radeon RX 9060 XT (gfx1200, RDNA4) – 仅官方验证
AMD HIP SDK 6.4 (Windows)
ZLUDA v6‑preview.69 (官方发布)
LibTorch 2.3.0 + cu118 (约 2.66 GB)
CUDA 库 nvcuda、cuBLAS、cuBLASLt、cuSPARSE、cuFFT – 全部通过 cuda_check
cuDNN 不可用 在稳定的 Windows HIP SDK 中

仓库明确将其他 AMD GPU 标记为 未验证候选;鼓励用户无论成功与否都提交 GPU 兼容性问题。

转换层的工作原理

面向 CUDA 的 Windows 应用
        │
      ZLUDA (PTX/JIT → HIP)
        │
  cuBLAS / cuSPARSE / cuFFT
        │
  rocBLAS / hipBLASLt / rocSPARSE
        │
      AMD GPU

ZLUDA 拦截 CUDA 驱动调用,将 PTX 即时编译为 HIP,并将工作转发给相应的 ROCm 库。

安装步骤 (Windows)

  1. 安装 AMD 先决条件 – 最新的 AMD GPU 驱动和 AMD HIP SDK for Windows(包含 HIP 库)。参考使用 HIP SDK 6.4;较新的版本可能可用,但未经验证。
  2. 克隆仓库并运行安装程序
    git clone https://github.com/Speedstu/CUDA-for-AMD-Windows.git
    cd CUDA-for-AMD-Windows
    powershell -ExecutionPolicy Bypass -File .\scripts\install.ps1
    
    安装程序 检测 GPU、验证驱动/HIP 版本、下载 ZLUDA 和 LibTorch、检查 SHA‑256 哈希、生成运行时配置文件,并运行 cuda_check.exe
  3. 可选 – 如果只需要转换层,可使用 -SkipLibTorch 跳过大型 LibTorch 下载。

运行面向 CUDA 的程序

# 启动并自动暂存所需的 DLL
.
scripts\run-zluda.ps1 -Program C:\path\to\app.exe

# 或者在不启动的情况下暂存运行时
.
scripts\stage-runtime.ps1 -TargetDir C:\path\to\your-app

这些脚本将 ZLUDA 兼容 DLL 放置在可执行文件旁边,并仅为该会话设置 HIP/ROCm 运行时路径。

诊断环境

.
scripts\doctor.ps1
.
scripts\gpu-scan.ps1
.
scripts\test-runtime.ps1

gpu-scan.ps1 输出包含 GPU 型号、gfx 架构、驱动版本和 HIP SDK 详情的 JSON 报告,例如:

AMD Radeon RX 9060 XT -> gfx1200 -> RDNA4 -> validated-reference

已验证设置上的运行时覆盖范围

面向 CUDA 的组件 状态
CUDA 驱动 (nvcuda)
cuBLAS ✅ (通过 rocBLAS)
cuBLASLt ✅ (通过 hipBLASLt)
cuSPARSE ✅ (通过 rocSPARSE)
cuFFT
cuDNN ⚠️ 不可用 (稳定的 HIP SDK 缺少 MIOpen)

缺少 cuDNN 意味着卷积密集型工作负载可能需要更新的/每日构建的 HIP 栈或自定义覆盖层。

性能快照

在参考 PPO 工作负载上进行的受控 A/B 基准测试 (2026‑09‑13) 测得:

  • 中位整体每秒步数 (SPS): 上游 ZLUDA 路径为 13,278,而历史自定义覆盖层为 12,876。
  • 相对减速: 自定义覆盖层慢了约 3%,因此上游路径是默认推荐。

较旧的调优运行(不同的训练配置)报告了 70k–109k SPS,记录在 docs/BENCHMARKS.md 中。

可选的历史自定义覆盖层

仓库包含一个 历史 自定义 cuBLAS/cuBLASLt/HIP 覆盖层,不是 验证路径所必需的。其恢复的 DLL 哈希存储在 manifests/recovered-artifacts.sha256 中。该覆盖层仅供参考;上游 ZLUDA 构建在 PPO 基准测试中表现更好。

报告兼容性或错误

  1. 运行诊断脚本 (gpu-scan.ps1test-runtime.ps1)。
  2. 使用提供的模板打开 GPU 兼容性报告 问题,并附上 JSON 输出和任何错误日志。

项目维护者鼓励成功和失败的报告,以扩展兼容性矩阵。

仓库布局 (高级)

scripts/          # 安装、诊断、暂存、启动器
manifests/        # 固定版本、哈希、GPU 元数据
docs/             # 验证、基准测试、故障排除
examples/         # 参考集成片段
.runtime/         # 生成的依赖项和报告 (git‑ignored)
local-artifacts/  # 存档文件 (git‑ignored)

需要注意的限制

  • GPU 支持: 仅官方验证了 RX 9060 XT (gfx1200)。
  • CUDA 完整性: ZLUDA 未实现完整的 CUDA API;不支持的功能包括 CDNA 特定扩展、NCCL、TensorRT 和许多自定义 PTX 指令。
  • Windows ROCm 生态系统: 稳定的 Windows HIP SDK 缺少完整的 AI 栈(例如 MIOpen/cuDNN),限制了卷积密集型模型。
  • 兼容性值: ZLUDA_CC=8.6 反映的是 CUDA 兼容性目标,而不是 AMD GPU 架构。

许可

项目脚本和文档采用 MIT 许可。ZLUDA、AMD ROCm/HIP、NVIDIA CUDA 组件和 PyTorch/LibTorch 保留其上游许可。详情请参阅 THIRD_PARTY_NOTICES.md


社区反应 (Hacker News 亮点)

  • 开放标准倡导: 一些评论者认为,像这样的努力凸显了开放 API(如 HIP、SYCL 或 OpenCL)的必要性,并指出闭源 NVIDIA 栈在 LLM 推理中的主导地位。
  • 硬件范围问题: 用户询问该设置是否适用于其他 GPU(例如 Radeon 7900 XT)以及非 AI 工作负载(如 MATLAB)。
  • 战略影响: 一些评论表明,如果 CUDA 到 HIP 的转换变得简单,CUDA 的护城河就会被侵蚀,使其成为一种中间表示而非锁定。
  • 实际注意事项: 其他人指出缺少 cuDNN,并且与当前上游版本相比,依赖较旧的 Windows ROCm 版本 (7.1/7.2)。

这些讨论既突出了对跨供应商兼容性的热情,也突出了对当前限制的现实期望。


SUMMARY: CUDA‑for‑AMD‑Windows 项目允许面向 CUDA 的 Windows 应用程序使用 ZLUDA 和 ROCm/HIP 栈在 AMD GPU 上运行,并在 Radeon RX 9060 XT (gfx1200) 上提供了验证参考。

TITLE: 在 Windows 上为 AMD 运行 CUDA – 通过 ZLUDA 和 ROCm/HIP 在 AMD GPU 上运行 CUDA Windows 应用

Sources

相关