在 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.exe、doctor.ps1、gpu-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)
- 安装 AMD 先决条件 – 最新的 AMD GPU 驱动和 AMD HIP SDK for Windows(包含 HIP 库)。参考使用 HIP SDK 6.4;较新的版本可能可用,但未经验证。
- 克隆仓库并运行安装程序:
安装程序 检测 GPU、验证驱动/HIP 版本、下载 ZLUDA 和 LibTorch、检查 SHA‑256 哈希、生成运行时配置文件,并运行git clone https://github.com/Speedstu/CUDA-for-AMD-Windows.git cd CUDA-for-AMD-Windows powershell -ExecutionPolicy Bypass -File .\scripts\install.ps1cuda_check.exe。 - 可选 – 如果只需要转换层,可使用
-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 基准测试中表现更好。
报告兼容性或错误
- 运行诊断脚本 (
gpu-scan.ps1、test-runtime.ps1)。 - 使用提供的模板打开 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
相关
- Dispatch
- Dispatch
- Dispatch
- 项目
- 项目