在 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.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 JIT 編譯為 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 重點)

  • 開放標準倡導: 一些評論者認為,這類努力凸顯了對 HIP、SYCL 或 OpenCL 等開放 API 的需求,並指出封閉原始碼的 NVIDIA 堆疊在 LLM 推論中的主導地位。
  • 硬體範圍問題: 使用者詢問此設定是否適用於其他 GPU(例如 Radeon 7900 XT)以及非 AI 工作負載(如 MATLAB)。
  • 策略意涵: 少數評論表示,如果 CUDA‑to‑HIP 轉譯變得簡單,CUDA 的護城河就會被侵蝕,使其變成中間表示而非鎖定。
  • 實務注意事項: 其他人指出缺少 cuDNN,以及相較於目前上游版本,依賴較舊的 Windows ROCm 版本(7.1/7.2)。

這些討論凸顯了對跨廠商相容性的熱情,以及對當前限制的務實期望。

Sources

相關