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