Windows 下用 ROCm 编译 llama.cpp 指南(Radeon 780M / gfx1103)
环境
- GPU: AMD Radeon 780M Graphics (gfx1103,RDNA3)
- 系统: Windows(PowerShell 7)
- 工具链: uv + CMake + Ninja + clang (ROCm 自带)
第一步:安装 ROCm SDK(pip)
用 uv 从 AMD 官方源安装 ROCm (不需装 AMD 官方的巨大 SDK 包,只装 pip 版本即可):
uv add torch==2.10.0 torchaudio torchvision `
--index https://repo.amd.com/rocm/whl/gfx110X-all/ `
--index-strategy unsafe-first-match
uv add "rocm[libraries,devel]" `
--index https://repo.amd.com/rocm/whl/gfx110X-all/ `
--index-strategy unsafe-first-match
装完后确认 _rocm_sdk_devel 和 _rocm_sdk_core 在 .venv\Lib\site-packages\ 下。
初始化 ROCm SDK 环境:
rocm-sdk init
第二步:编译 llama.cpp
设置环境变量
$env:ROCM_DEVEL = "E:\uv\therock\.venv\Lib\site-packages\_rocm_sdk_devel"
$env:ROCM_CORE = "E:\uv\therock\.venv\Lib\site-packages\_rocm_sdk_core"
$env:ROCM_PATH = $env:ROCM_CORE
$env:HIP_PATH = $env:ROCM_DEVEL
$env:HIP_PLATFORM = "amd"
$env:HIP_COMPILER = "clang"
$env:HIP_RUNTIME = "rocclr"
$env:PATH = "$env:ROCM_CORE\bin;$env:ROCM_CORE\lib\llvm\bin;"
$env:PATH += "$env:ROCM_DEVEL\bin;$env:ROCM_DEVEL\lib\llvm\bin;$env:PATH"
CMake 配置
$rocm = $env:ROCM_CORE
$bitcode = "E:/uv/therock/.venv/Lib/site-packages/_rocm_sdk_devel/lib/llvm/amdgcn/bitcode"
cd sources\llama.cpp
cmake -S . -B build -G Ninja `
-DCMAKE_BUILD_TYPE=Release `
-DGGML_HIP=ON `
-DGGML_HIPBLAS=ON `
-DGPU_TARGETS=gfx1103 `
-DGGML_CPU_ARCH=ZNVER4 `
-DCMAKE_PREFIX_PATH="$rocm" `
-DCMAKE_C_COMPILER=clang `
-DCMAKE_CXX_COMPILER=clang++ `
-DCMAKE_RC_COMPILER="C:/Program Files (x86)/Windows Kits/10/bin/10.0.22621.0/x64/rc.exe" `
-DCMAKE_CXX_FLAGS="--rocm-path=$rocm --rocm-device-lib-path=$bitcode"
编译
cmake --build build --parallel 12
第三步:复制 ROCm DLL
编译完成后,需要把 ROCm 的 DLL 复制到 build 目录,否则运行时找不到:
$src = "E:/uv/therock/.venv/Lib/site-packages/_rocm_sdk_devel/bin"
$dst = "."
$dlls = @(
"amd_comgr0702.dll",
"amdhip64_7.dll",
"hipblas.dll",
"hiprtc-builtins0702.dll",
"hiprtc0702.dll",
"libhipblaslt.dll",
"rocblas.dll",
"rocsolver.dll"
)
foreach ($dll in $dlls) {
Copy-Item "$src/$dll" $dst -ErrorAction SilentlyContinue
}
# kernel 目录也需要
$dirs = @("hipblaslt", "rocblas")
foreach ($dir in $dirs) {
if (Test-Path "$src/$dir") {
Copy-Item -Recurse "$src/$dir" $dst
}
}
第四步:运行测试
同样需要先设好环境变量(在编译用的终端里,或者每次新开终端都要重设):
$env:ROCM_DEVEL = "E:\uv\therock\.venv\Lib\site-packages\_rocm_sdk_devel"
$env:ROCM_CORE = "E:\uv\therock\.venv\Lib\site-packages\_rocm_sdk_core"
$env:ROCM_PATH = $env:ROCM_CORE
$env:HIP_PATH = $env:ROCM_DEVEL
$env:HIP_PLATFORM = "amd"
$env:PATH = "$env:ROCM_CORE\bin;$env:ROCM_CORE\lib\llvm\bin;$env:ROCM_DEVEL\bin;$env:ROCM_DEVEL\lib\llvm\bin;$env:PATH"
.\build\bin\llama-bench.exe -ngl 99
成功时能看到:
ggml_cuda_init: found 1 ROCm devices:
Device 0: AMD Radeon 780M Graphics, gfx1103 (0x1103), VMM: no, Wave Size: 32
注意点
- 每次新开终端都需要重新
$env:设一遍环境变量,否则 HIP 库找不到 GPU gfx1103是 780M 的 target,如果是其他 RDNA3 卡(如 RX 7900 XTX 用gfx1100)需修改GPU_TARGETS- 编译前确认
cmake -G Ninja可用(Ninja 比 msbuild 快得多) - Copy DLL 只做一次,后续在同一个 build 目录改代码重新编译不需要再 copy,除非更新了 ROCm SDK 版本