在 Windows 上為 AMD 啟用 CUDA – 透過 ZLUDA 與 ROCm/HIP 在 AMD GPU 上執行 CUDA Windows 應用程式
TL;DR
CUDA‑for‑AMD‑Windows 透過 ZLUDA 與 ROCm/HIP 堆疊轉譯 CUDA 呼叫,讓以 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 JIT 編譯為 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 重點)
- 開放標準倡導: 一些評論者認為,這類努力凸顯了對 HIP、SYCL 或 OpenCL 等開放 API 的需求,並指出封閉原始碼的 NVIDIA 堆疊在 LLM 推論中的主導地位。
- 硬體範圍問題: 使用者詢問此設定是否適用於其他 GPU(例如 Radeon 7900 XT)以及非 AI 工作負載(如 MATLAB)。
- 策略意涵: 少數評論表示,如果 CUDA‑to‑HIP 轉譯變得簡單,CUDA 的護城河就會被侵蝕,使其變成中間表示而非鎖定。
- 實務注意事項: 其他人指出缺少 cuDNN,以及相較於目前上游版本,依賴較舊的 Windows ROCm 版本(7.1/7.2)。
這些討論凸顯了對跨廠商相容性的熱情,以及對當前限制的務實期望。
Sources
相關
- Dispatch
- Dispatch
- Dispatch
- 專案
- 專案