TheRock版ROCmをpipでインストールしよう(ROCmのビルドなんてやってられるか!)

Ubuntu
スポンサーリンク

Amazonのアソシエイトとして、当ブログは適格販売により収入を得ています。

以前、「Ryzen7 8700Gを限界まで高速化しよう(TheRockでROCmをビルド)」でROCmとpytorchのビルドにチャレンジしました。
ですが、記事のとおりビルドにはとても時間がかかります。
アップデートしたいなぁって思っても再ビルドしか手がありません。

とても忙しい現代人は、そんなに時間をかけていられる訳もなく、「もっと手軽に使えるようにしよう」というのが今回の記事の目的です。

それではやっていきましょう。

ROCmのインストールをする前に

そもそも、単純にComfyUIやIrodori-TTSで推論を行うだけなら、ROCmのインストールは必要ありません。
TheRock版のpytorchをpipでインストールすればそれで事足ります。

ではなぜROCmをインストールするのか?

自分は「llama.cpp」をよく使います。
最近は「stablediffusion.cpp」もテストしたりしますが、どちらもROCmバックエンドでバイナリを生成するためにはROCmが必要になります。
プリビルド版を使えば良いじゃんっていうのはナシでお願いします・・・。)

TheRock版ROCmをuv環境にインストール

それでは手順を説明します。

まずはuvをインストール。
やり方はこちらの記事で。

次に自分のユーザーアカウントをレンダーグループに追加後、PCを再起動しましょう。

sudo usermod -a -G render $USER
sudo usermod -a -G video $USER

再起動したら、以下を実行します。

# llama.cppをインストールするフォルダを作成
mkdir -p $HOME/install/llama.cpp_build
cd $HOME/install/llama.cpp_build

#準備とllama.cppのソースをダウンロード
sudo apt install -y git cmake g++ libcurlpp-dev ninja-build
git clone https://github.com/ggml-org/llama.cpp.git

# uv を使用して仮想環境を作成し、有効化する(Ubuntu24.04標準のpthonを使う)
uv venv --python /usr/bin/python3
source .venv/bin/activate

# TheRockのツールを使い、仮想環境内にROCmのプリビルドパッケージをインストール
uv pip install --index-url https://rocm.nightlies.amd.com/whl-multi-arch/ "rocm[libraries,devel,device-gfx1103]"

これでuv環境にTheRock版ROCmをインストールできました。

llama.cppをROCmでビルド

次はこれを使って「llama.cpp」をビルドしていきます。

# 変数を設定(llama.cpp_buildフォルダをカレントディレクトリにして実行)
DIRECTORY=$PWD
DIR_ROCm=$DIRECTORY/.venv/lib/python3.12/site-packages

# ROCmのパスをuv環境 (.venv) 内に設定
echo "export LD_LIBRARY_PATH=$DIR_ROCm/_rocm_sdk_core/lib:$DIR_ROCm/_rocm_sdk_devel/lib:\$LD_LIBRARY_PATH" >> ".venv/bin/activate"

# カレントディレクトリをllama.cppに移動。ビルドの設定をします。
cd llama.cpp
cmake -B build-rocm -GNinja \
    -DGGML_HIP=ON \
    -DAMDGPU_TARGETS="gfx1103" \
    -DCMAKE_C_COMPILER="$DIR_ROCm/_rocm_sdk_core/lib/llvm/bin/clang" \
    -DCMAKE_CXX_COMPILER="$DIR_ROCm/_rocm_sdk_core/lib/llvm/bin/clang++" \
    -DCMAKE_PREFIX_PATH="$DIR_ROCm/_rocm_sdk_devel" \
    -DCMAKE_BUILD_TYPE=Release
 
# ビルド開始
time cmake --build build-rocm -j$(nproc)

動作確認しよう

カレントディレクトリを「llama.cpp_build」に移動して、以下のコマンドでROCmとvulkanの動作速度を比較しました。
使用したモデルは「gemma-4-26B-A4B-it-qat-UD-Q4_K_XL.gguf」です。

# ROCmのテスト
./llama.cpp/build-rocm/bin/llama-bench -m /media/test/semi_4TB/linux/7_自作スクリプト/github/自分用/99_LLMモデル/quantize/gemma-4-26B-A4B-it-qat-GGUF/gemma-4-26B-A4B-it-qat-UD-Q4_K_XL.gguf

# vulkanのテスト
./llama.cpp/build-vulkan/bin/llama-bench -m /media/test/semi_4TB/linux/7_自作スクリプト/github/自分用/99_LLMモデル/quantize/gemma-4-26B-A4B-it-qat-GGUF/gemma-4-26B-A4B-it-qat-UD-Q4_K_XL.gguf

モデルを配置しているパスは私の環境のものなので、もしマネする時は自分の環境に合わせて書き直してください。

結果は、テキストジェネレーションはvulkanが、プロンプト処理はROCmがそれぞれ速かったです。

実はこの動作検証結果はよく知られた結果で、いつまでもROCmが使われていない理由だったりします。
なぜってテキストの生成の見た目が遅いから。

gemma-4のMTPを使ってみる

もうちょっと速くならないかなと思って、MTPを利用してみたらちょっと変化がありました。

以下は、いちいちパスを入力するのはめんどいし、見た目でわかりにくいので、変数として宣言します。

# 私の環境のパスなので、マネする人は自分の環境に合わせて書き直してください。
LOCATE="/media/test/semi_4TB/linux/7_自作スクリプト/github/自分用/99_LLMモデル/quantize/gemma-4-26B-A4B-it-qat-GGUF"

MODEL="gemma-4-26B-A4B-it-qat-UD-Q4_K_XL.gguf"

MTP="mtp-gemma-4-26B-A4B-it.gguf"
MMPROJ="mmproj-F16.gguf"

ROCmで動かします。MTPの予測トークン数は「1」でテスト。

./llama.cpp/build-rocm/bin/llama-server -m $LOCATE/$MODEL --port 8080 --host 127.0.0.1 --jinja --reasoning off --spec-draft-model $LOCATE/$MTP --spec-type draft-mtp --spec-draft-n-max 1

次はvulkanで同じ事をします。

./llama.cpp/build-vulkan/bin/llama-server -m $LOCATE/$MODEL --port 8080 --host 127.0.0.1 --jinja --reasoning off --spec-draft-model $LOCATE/$MTP --spec-type draft-mtp --spec-draft-n-max 1

ちょっとおもしろいことになったので、MTPの予測トークン数を増やしてみます。
まずは予測トークン数「2」。


次は予測トークン数「3」。

それぞれ、ほとんど差がありません。

「いや、プロンプト処理性能も差がねーじゃねーか!」

という声が聞こえてきそうです。

ちょっとだけプロンプトを長くしてみた

"偏りのないコインを表が出るまで投げ続け、表が出たときに、賞金をもらえるゲームがあるとする。もらえる賞金は、1回目に表が出たら1円、1回目は裏が出て2回目に表が出たら倍の2円、2回目まで裏が出ていて3回目に初めて表が出たらそのまた倍の4円、3回目まで 裏が出ていて4回目に初めて表が出たらそのまた倍の8円、というふうに倍々で増える賞金がもらえるというゲームである。ここで、このゲームには参加費(=賭け金)が必要であるとしたら、参加費の金額が何円までなら払っても損ではないと言えるだろうか。"この問題を解いてください。

例の「サンクト・ペテルスブルクのパラドックス」でテスト。

というわけで、確かな差があります。

AIエージェントに使うと良さそう

テキスト生成の速度差が無いということは、プロンプト処理速度の差が使うかどうかの分かれ道。
どんな時に役に立つかというと、自分はAIエージェントで役に立つのではと考えています。

今回使ったRyzen7 8700Gは生成AI用のGPUとしては非力極まる存在ですが、ディスクリートGPUを持っている方にとっては、もっと処理は速くなります。
以下の動画がわかりやすいかと思います。

22分36秒あたり。gemma4だいたい同じモデルだとプロンプト処理は3700[tokens/sec]になっています。

動画は「Radeon AI PRO R9700」なので参考程度ですが、Radeon RXシリーズでも結構速いのではないでしょうか?(持ってないのでわかりませんが)

と、いうわけで今回はここまでです。


時期によってはクーポンがあるみたいですね。
これからもグラフィックスカードは値上がりが確実のようですので、安いときが狙い目ですね。

Amazon | AMD CPU Ryzen 7 8700G BOX With Wraith Stealth Cooler 100-100001236SBX CP1676 | AMD | CPU 通販
AMD CPU Ryzen 7 8700G BOX With Wraith Stealth Cooler 100-100001236SBX CP1676がCPUストアでいつでもお買い得。当日お急ぎ便対象商品は、当日お届け可能です。アマゾン配...
Amazon | XFX AMD Radeon AI Pro R9700, 32GB GDDR6, RDNA 4アーキテクチャ, 4K ディスプレイポート搭載, プロフェッショナルグラフィックスカード, RX-97XPROAIY-GP/E | XFX | グラフィックボード 通販
XFX AMD Radeon AI Pro R9700, 32GB GDDR6, RDNA 4アーキテクチャ, 4K ディスプレイポート搭載, プロフェッショナルグラフィックスカード, RX-97XPROAIY-GP/Eがグラフィックボード...
Amazon | SPARKL Intel Arc Pro B70グラフィクスカード ブロワーファン搭載モデル [SBP70W-32G] | スパークル(Sparkle) | グラフィックボード 通販
SPARKL Intel Arc Pro B70グラフィクスカード ブロワーファン搭載モデル がグラフィックボードストアでいつでもお買い得。当日お急ぎ便対象商品は、当日お届け可能です。アマゾン配送商品は、通常配送無料(一部除く)。

コメント

タイトルとURLをコピーしました