✨
ROCmでの llama.cppのビルドと llama-bench
前回の記事で、ROCm 7.10 (Nightly)を用意しましたので、これで動く llama.cppをビルドしました。大きなハマりどころはありませんが、それでも少し試行錯誤がありました。環境はこれまで通り、Minisforum M1-S1 MAX (AMD Ryzen AI Max+ 395) Ubuntu 24.04.3 です。
llama.cpp のビルド
- 依存先をインストールします。これまでの記事に無いのは、 libcurl4-openssl-dev だけです。
$ sudo apt install build-essential cmake git libcurl4-openssl-dev
- 次にllama.cppのリポジトリをクローンします。
$ git clone https://github.com/ggerganov/llama.cpp
$ cd llama.cpp
ビルド
- cmakeの値定義に、ROCmとHIPなどの設定を与えます。前回の記事で作成した ROCm 7.10 Nightlyのパスを指定してビルドする必要があります。
$ mkdir build && cd build$ mkdir ビルド && cd ビルド
$ cmake .. -DGGML_HIP=ON -DAMDGPU_TARGETS=gfx1151 -DCMAKE_HIP_PLATFORM=amd -DHIP_PLATFORM=amd -DCMAKE_PREFIX_PATH=/(中略)/TheRock/build/dist/rocm -DROCM_PATH=/(中略)/TheRock/build/dist/rocm
$ cmake --build . --config Release -j $(nproc)
- ビルド後、build/bin/ディレクトリにllama-benchなど多くの実行ファイルが生成されます。
llama-benchの実行
Llama-3.2-3B-Instruct-Q4_0.gguf
- 試しに軽いモデルでベンチマークを取ってみます。
$ wget https://huggingface.co/bartowski/Llama-3.2-3B-Instruct-GGUF/resolve/main/Llama-3.2-3B-Instruct-Q4_0.gguf$ wget https://huggingface.co/bartowski/Llama-3.2-3B-Instruct-GGUF/resolve/main/Llama-3.2-3B-Instruct-Q4_0.gguf
$ ./bin/llama-bench -m ./Llama-3.2-3B-Instruct-Q4_0.gguf -p 16,32,64 -n 64,128 -ngl 999$ ./bin/llama-bench -m ./Llama-3.2-3B-Instruct-Q4_0.gguf -p 16,32,64 -n 64,128 -ngl 999
ggml_cuda_init: GGML_CUDA_FORCE_MMQ: no
ggml_cuda_init: GGML_CUDA_FORCE_CUBLAS: no
ggml_cuda_init: found 1 ROCm devices:
Device 0: Radeon 8060S Graphics, gfx1151 (0x1151), VMM: no, Wave Size: 32
| model | size | params | backend | ngl | test | t/s |
| ------------------------------ | ---------: | ---------: | ---------- | --: | --------------: | -------------------: |
| llama 3B Q4_0 | 1.78 GiB | 3.21 B | ROCm | 999 | pp16 | 661.87 ± 5.54 |
| llama 3B Q4_0 | 1.78 GiB | 3.21 B | ROCm | 999 | pp32 | 1045.72 ± 4.82 |
| llama 3B Q4_0 | 1.78 GiB | 3.21 B | ROCm | 999 | pp64 | 507.23 ± 6.15 |
| llama 3B Q4_0 | 1.78 GiB | 3.21 B | ROCm | 999 | tg64 | 74.31 ± 0.05 |
| llama 3B Q4_0 | 1.78 GiB | 3.21 B | ROCm | 999 | tg128 | 74.13 ± 0.09 |
build: 229bf6862 (6884)
追記
- Qwen3-Coder-30B-A3B-Instruct-UD-Q4_K_XL でのベンチマークも取ってみました。ROCm 7.10 Nightlyを160W(パフォーマンスモード)回したものです。
- これは、こちらの金のニワトリさんの、同じRyzen AI MAX+ メモリ128GBを使ったベンチマーク記事
https://zenn.dev/robustonian/scraps/445f2143217f75
と同じ設定で比較させていただいたものですが、 ROCm6.4.0より ppは4割速く、tgは同水準という感じですね。 - あ、rocWMMAについては何も考えていなかったので、使っているかどうかは分かりません。ひょっとすると使えばまだ速くなるのかな。(追記)この記事を書いた直後に rocWMMAがメインのrocm-libarariesに統合されたようです。なので、下記では使っていませんが、使うとまだ速くなるようです。
Qwen3-Coder-30B-A3B-Instruct-UD-Q4_K_XL
$ llama-bench -m ./Qwen3-Coder-30B-A3B-Instruct-UD-Q4_K_XL.gguf -ngl 100 -fa 0,1
ggml_cuda_init: GGML_CUDA_FORCE_MMQ: no
ggml_cuda_init: GGML_CUDA_FORCE_CUBLAS: no
ggml_cuda_init: found 1 ROCm devices:
Device 0: Radeon 8060S Graphics, gfx1151 (0x1151), VMM: no, Wave Size: 32
| model | size | params | backend | ngl | fa | test | t/s |
| ------------------------------ | ---------: | ---------: | ---------- | --: | -: | --------------: | -------------------: |
| qwen3moe 30B.A3B Q4_K - Medium | 16.45 GiB | 30.53 B | ROCm | 100 | 0 | pp512 | 577.46 ± 3.31 |
| qwen3moe 30B.A3B Q4_K - Medium | 16.45 GiB | 30.53 B | ROCm | 100 | 0 | tg128 | 62.55 ± 0.33 |
| qwen3moe 30B.A3B Q4_K - Medium | 16.45 GiB | 30.53 B | ROCm | 100 | 1 | pp512 | 618.52 ± 4.43 |
| qwen3moe 30B.A3B Q4_K - Medium | 16.45 GiB | 30.53 B | ROCm | 100 | 1 | tg128 | 64.75 ± 0.07 |
build: 229bf6862 (6884)
$ llama-bench -m ./Qwen3-Coder-30B-A3B-Instruct-UD-Q4_K_XL.gguf -ngl 100 -fa 0,1 -p 8192 -n 8192
ggml_cuda_init: GGML_CUDA_FORCE_MMQ: no
ggml_cuda_init: GGML_CUDA_FORCE_CUBLAS: no
ggml_cuda_init: found 1 ROCm devices:
Device 0: Radeon 8060S Graphics, gfx1151 (0x1151), VMM: no, Wave Size: 32
| model | size | params | backend | ngl | fa | test | t/s |
| ------------------------------ | ---------: | ---------: | ---------- | --: | -: | --------------: | -------------------: |
| qwen3moe 30B.A3B Q4_K - Medium | 16.45 GiB | 30.53 B | ROCm | 100 | 0 | pp8192 | 376.64 ± 0.83 |
| qwen3moe 30B.A3B Q4_K - Medium | 16.45 GiB | 30.53 B | ROCm | 100 | 0 | tg8192 | 33.23 ± 0.03 |
| qwen3moe 30B.A3B Q4_K - Medium | 16.45 GiB | 30.53 B | ROCm | 100 | 1 | pp8192 | 519.95 ± 0.94 |
| qwen3moe 30B.A3B Q4_K - Medium | 16.45 GiB | 30.53 B | ROCm | 100 | 1 | tg8192 | 55.13 ± 0.00 |
build: 229bf6862 (6884)
gpt-oss-20b-F16.gguf
- 常用しそうな、このモデルですが、これまでのROCmの数字よりも結構良い線行ってる感じです。
$ llama-bench -m ./gpt-oss-20b-F16.gguf -ngl 99 -fa 0,1 $ llama-bench -m ./gpt-oss-20b-F16.gguf -ngl 99 -fa 0,1
ggml_cuda_init: GGML_CUDA_FORCE_MMQ: no
ggml_cuda_init: GGML_CUDA_FORCE_CUBLAS: no
ggml_cuda_init: found 1 ROCm devices:ggml_cuda_init: 1 個の ROCm デバイスが見つかりました:
Device 0: Radeon 8060S Graphics, gfx1151 (0x1151), VMM: no, Wave Size: 32
| model | size | params | backend | ngl | fa | test | t/s |
| ------------------------------ | ---------: | ---------: | ---------- | --: | -: | --------------: | -------------------: |
| gpt-oss 20B F16 | 12.83 GiB | 20.91 B | ROCm | 99 | 0 | pp512 | 1403.71 ± 10.76 |
| gpt-oss 20B F16 | 12.83 GiB | 20.91 B | ROCm | 99 | 0 | tg128 | 51.56 ± 0.11 |
| gpt-oss 20B F16 | 12.83 GiB | 20.91 B | ROCm | 99 | 1 | pp512 | 1562.75 ± 5.79 |
| gpt-oss 20B F16 | 12.83 GiB | 20.91 B | ROCm | 99 | 1 | tg128 | 52.05 ± 0.04 |
build: 229bf6862 (6884)
$ llama-bench -m ./gpt-oss-20b-F16.gguf -ngl 99 -fa 0,1 -p 8192 -n 8192
ggml_cuda_init: GGML_CUDA_FORCE_MMQ: no
ggml_cuda_init: GGML_CUDA_FORCE_CUBLAS: no
ggml_cuda_init: found 1 ROCm devices:
Device 0: Radeon 8060S Graphics, gfx1151 (0x1151), VMM: no, Wave Size: 32
| model | size | params | backend | ngl | fa | test | t/s |
| ------------------------------ | ---------: | ---------: | ---------- | --: | -: | --------------: | -------------------: |
| gpt-oss 20B F16 | 12.83 GiB | 20.91 B | ROCm | 99 | 0 | pp8192 | 921.52 ± 0.70 |
| gpt-oss 20B F16 | 12.83 GiB | 20.91 B | ROCm | 99 | 0 | tg8192 | 43.52 ± 0.01 |
| gpt-oss 20B F16 | 12.83 GiB | 20.91 B | ROCm | 99 | 1 | pp8192 | 1320.33 ± 1.51 |
| gpt-oss 20B F16 | 12.83 GiB | 20.91 B | ROCm | 99 | 1 | tg8192 | 49.69 ± 0.01 |
gpt-oss-120b-F16.gguf
$ llama.cpp/build/bin/llama-bench -m ./gpt-oss-120b-F16.gguf -fa 1 $ llama.cpp/build/bin/llama-bench -m ./gpt-oss-120b-F16.gguf -fa 1
ggml_cuda_init: GGML_CUDA_FORCE_MMQ: no
ggml_cuda_init: GGML_CUDA_FORCE_CUBLAS: no
ggml_cuda_init: found 1 ROCm devices:
Device 0: Radeon 8060S Graphics, gfx1151 (0x1151), VMM: no, Wave Size: 32
| model | size | params | backend | ngl | fa | test | t/s |
| ------------------------------ | ---------: | ---------: | ---------- | --: | -: | --------------: | -------------------: |
| gpt-oss 120B F16 | 60.87 GiB | 116.83 B | ROCm | 99 | 1 | pp512 | 651.51 ± 20.62 |
| gpt-oss 120B F16 | 60.87 GiB | 116.83 B | ROCm | 99 | 1 | tg128 | 35.71 ± 0.24 |
build: 229bf6862 (6884)
$ llama.cpp/build/bin/llama-bench -m ./gpt-oss-120b-F16.gguf -fa 0 -n 8192 -p 8192
ggml_cuda_init: GGML_CUDA_FORCE_MMQ: no
ggml_cuda_init: GGML_CUDA_FORCE_CUBLAS: no
ggml_cuda_init: found 1 ROCm devices:
Device 0: Radeon 8060S Graphics, gfx1151 (0x1151), VMM: no, Wave Size: 32
| model | size | params | backend | ngl | test | t/s |
| ------------------------------ | ---------: | ---------: | ---------- | --: | --------------: | -------------------: |
| gpt-oss 120B F16 | 60.87 GiB | 116.83 B | ROCm | 99 | pp8192 | 494.76 ± 1.20 |
| gpt-oss 120B F16 | 60.87 GiB | 116.83 B | ROCm | 99 | tg8192 | 30.08 ± 0.02 |
build: 229bf6862 (6884)
Discussion