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 版本