Ryzen7 8700Gを限界まで高速化しよう(TheRockでROCmをビルド)

Ubuntu
スポンサーリンク

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

以前、「The RockでROCmをビルド(Ubuntu編)」の記事でRyzen9 7900の内蔵GPU「Raphael」用のROCmのビルドをやりました。
ただ、AMDのやるきが無いのか開発リソースが足りないのかまともに動きませんでした。

Ryzen7 8700Gはまだまともに動くので、ビルドによってより高速化を狙うという記事です。

ただし、全部書いてしまうと記事が長くなりすぎてしまいますので、今回はROCmのビルドと環境作りまで。

先に結論から言ってしまいますが、メチャクチャ速くなるというほどではありません。
10%程度速くなったくらいでした。

後述しますが、ビルドにかける時間と労力に見合うとは思えません。

#!/bin/bash

uv venv --python /usr/bin/python3
source .venv/bin/activate

uv pip install --index-url https://rocm.nightlies.amd.com/whl-multi-arch/ "torch[device-gfx1103]" "torchvision[device-gfx1103]" torchaudio

上のコマンドで終わらせた方が絶対楽です。
それでも、Ryzen7 8700Gを使い倒したいというマニアックな方向けの内容になっています。

同じ「Radeon 780M」GPUを使っている、ノートPCとかミニPCの環境でも使えるかも。
ターゲットが「gfx1103」になっているので、760Mや740Mでも動くかもしれませんね。
自分持っていないので試せてません、ごめんなさい。

ちなみにTheRockは記事を書いている現在、「Ubuntu24.04LTS」までしか対応していないようです。なので自分もUbuntu24.04.4LTSを使っています。

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

ビルドの手順

大まかな流れを最初に。

  • 1.uv環境の構築
  • 2.cargoのインストール
  • 3.TheRock版のROCmのビルド
  • 4.AOTritonのビルド
  • 5.pytorchのビルド
  • 6.torchaudioのビルド
  • 7.torchvisionのビルド
  • 8.torch-triton-rocmのビルド
  • 9.仮想環境にビルドしたwhlファイルをインストール
  • 10.ビルドしたROCmのパスを設定

以上です。

uv環境の構築

こちらの記事でどうぞ。

cargoのインストール

「sudo apt install cargo」で大丈夫だと思っていたんですが、途中で「バージョンが古すぎてダメ」とか言われたので、一応最新版をインストール。

#!/bin/bash

curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh

# ----------------------------------------
# 1) Proceed with standard installation (default - just press enter)
# 2) Customize installation
# 3) Cancel installation

# 1)を選択する

# -----------------------------------------

# パス(環境変数)を現在のターミナルに反映させる
source "$HOME/.cargo/env"

# ちゃんとインストールされているか確認、バージョンが表示されればOK
cargo --version

TheRock版のROCmのビルド

以前の記事と違って、今回はできるだけ機能を削減しないでビルドしています。
とはいっても、マルチGPU機能はオミットしてます。
8700GひとつでマルチGPUは組めないからです。
その他は、開発者向けの機能はチャットAIと相談して削除しています。

#!/bin/bash

cd ~
mkdir -p install
cd install

# 自分が試した中で必要と思われるライブラリ等をインストール
sudo apt update
sudo apt install -y gfortran git ninja-build cmake g++ pkg-config xxd patchelf automake libtool python3-venv python3-dev libegl1-mesa-dev texinfo bison flex
sudo apt install -y libsqlite3-dev libdrm-dev

# CMakeLists.txtで定義されているため、「clang-format」をインストール
sudo apt install -y clang-format

# OpenMP関連および、ROCmのビルドで要求されやすい必須ライブラリを追加
sudo apt install -y libomp-dev libgomp1 libnuma-dev libelf-dev

# TheRockをクローン
git clone https://github.com/ROCm/TheRock.git
cd TheRock

# 仮想環境を構築
uv venv --python /usr/bin/python3
source .venv/bin/activate

# ダウンロードが長すぎるので、「--depth 1」で直近のモノだけダウンロード
time git submodule update --init --recursive --depth 1

uv pip install -r requirements.txt

# ターゲットを gfx1103 のみに指定(ビルドに10時間くらいかかってしまうので、開発者向けの項目もオミットしています)
cmake -B build -GNinja . \
    -DTHEROCK_AMDGPU_TARGETS="gfx1103" \
    -DTHEROCK_DIST_AMDGPU_FAMILIES="gfx1103" \
    -DTHEROCK_ENABLE_RCCL=OFF \
    -DTHEROCK_ENABLE_ROCSHMEM=OFF \
    -DTHEROCK_ENABLE_OPENMPI=OFF \
    -DTHEROCK_ENABLE_CORE_RUNTIME_TESTS=OFF \
    -DTHEROCK_ENABLE_CORE_HIPTESTS=OFF \
    -DTHEROCK_ENABLE_HIPDNN_INTEGRATION_TESTS=OFF \
    -DTHEROCK_ENABLE_HIPDNN_SAMPLES=OFF \
    -DTHEROCK_ENABLE_ROCR_DEBUG_AGENT_TESTS=OFF \
    -DTHEROCK_ENABLE_ROCPROFILER_SYSTEMS_EXAMPLES=OFF \
    -DTHEROCK_ENABLE_ROCGDB=OFF \
    -DTHEROCK_ENABLE_ROCPROFV3=OFF \
    -DTHEROCK_ENABLE_ROCPROFILER_COMPUTE=OFF \
    -DTHEROCK_ENABLE_ROCPROFSYS=OFF \
    -DTHEROCK_ENABLE_AQLPROFILE=OFF \
    -DTHEROCK_ENABLE_RDC=OFF \
    -DTHEROCK_ENABLE_AMD_DBGAPI=OFF \
    -DTHEROCK_ENABLE_ROCR_DEBUG_AGENT=OFF \ | tee config.log

# ビルド
time cmake --build build -j$(nproc) 2>&1 | tee build_error.log

2026/7/19現在では上のとおりでビルドは成功していますが、バージョンが変われば通用しなくなります。
その時は、「build_error.log」でログを記録するようにしているので、そのままチャットAIに投げてアドバイスをもらってください。
ログが長過ぎる場合は、

# エラーログの最後の1000行
tail -n 1000 build_error.log > build_error_last1000.log

でログの最後から1000行を抜き出して、チャットAIに渡してあげてください。

一介のパソコンおじさんはこの時点で心が折れそうです・・・。

AOTritonのビルド

「AOTriton(Ahead of Time Triton Math Library)」とは、FlashAttentionなどの数学カーネルを、JIT(Just-In-Time)コンパイラでその場でコンパイルするのではなく、予めTritonによって事前にコンパイルし、静的ライブラリ(.a)または動的ライブラリ(.so)の形式でパッケージ化したもので、PyTorchのScaled Dot-Product Attention(SDPA)バックエンドから直接、事前コンパイル済みのバイナリを呼び出すことで、実行時のオーバーヘッドが完全に排除される(らしい)。

そういえば、ComfyUIとか使っていると「SDPA」という単語はちらほら見かけますよね。
SDPAが動き始めた時、通常は意識することなくRadeon版FlashAttentionなどが動作するみたいです。

いや、ごめんなさい。実はよくわかっていません。

#!/bin/bash

sudo apt update
sudo apt install -y build-essential git cmake ninja-build pkg-config liblzma-dev

# 作業用ディレクトリで実行
cd ~
mkdir -p install
cd install
git clone https://github.com/ROCm/aotriton.git
cd aotriton

git submodule update --init --recursive

# 仮想環境の作成と有効化
uv venv --python /usr/bin/python3
source .venv/bin/activate

# 依存パッケージのインストール
uv pip install cmake ninja
uv pip install -r requirements.txt -r requirements-dev.txt -r requirements-tuning.txt

# 作業部屋にダミーのPyTorchをインストール
uv pip install torch --index-url https://download.pytorch.org/whl/cpu

# ROCmのパス設定(TheRockのビルド成果物に統一)
export ROCM_PATH=$HOME/install/TheRock/build/dist/rocm
export ROCM_LLVM_ROOT=$ROCM_PATH/llvm
export HIP_PATH=$ROCM_PATH
export HIPCXX=$ROCM_PATH/bin/hipcc
export CC=$ROCM_LLVM_ROOT/bin/clang
export CXX=$ROCM_LLVM_ROOT/bin/clang++
export PATH=$ROCM_PATH/bin:$PATH
export LD_LIBRARY_PATH=$ROCM_PATH/lib:$LD_LIBRARY_PATH

# CMakeの構成(正規のAMDGPU_TARGETSとしてgfx1103を指定)
cmake -B build -G Ninja \
    -DCMAKE_INSTALL_PREFIX=$PWD/install_dir \
    -DCMAKE_BUILD_TYPE=Release \
    -DAOTRITON_GPU_BUILD_TIMEOUT=0 \
    -DCMAKE_PREFIX_PATH=$ROCM_PATH \
    -DCMAKE_CXX_COMPILER=$CXX \
    -DCMAKE_C_COMPILER=$CC \
    -DCMAKE_HIP_COMPILER=$HIPCXX \
    -DAOTRITON_TARGET_ARCH="gfx1103"

# ビルドの実行
cmake --build build -j 8 2>&1 | tee aotriton_build.log

# インストール
cmake --install build

余談ですが、以前の「The RockでROCmをビルド(Ubuntu編)」では、このAOTritonは出てきませんでした。
どうもGPUコアの中にある行列演算専用器(Nvidiaで言うtensorコアや、Intelで言うXMX)が必要で、RDNA2(RX6000シリーズ)にはそれらが存在しないため、AMDがサポートしていないらしいです。
その理屈で言うと、Radeon Pro W6800もサポートしていないはず。

AMDではRDNA3(RX7000シリーズ)から専用の行列演算器ではありませんが、Compute Unit(CU)の中に、AI処理(行列演算など)を効率化するための命令セットWMMA (Wave Matrix Multiply-Accumulate)でAI処理向けに拡張・効率化したものを搭載しています。
これを使ってAOTritonでの処理を実現しているようです。

ただし、AOTritonは本当はAPUをサポートしていません。
基本的にデータセンター向けやRadeonでも上位クラスのカードを一部サポートしているだけです。

ただ、ソースからビルドすることでAPUでも動作するようになる(とチャットAIは言っています)らしいので、今回チャレンジすることにしました。
以下、GeminiのDeepResearchで調べてもらった内容です。
ハルシネーションが起こっていないとは言い切れませんが、参考程度にどうぞ。

ちなみにWindowsはサポートされていないようです。

pytorchのビルド

#!/bin/bash

cd $HOME/install/TheRock
source .venv/bin/activate

# 1. PyTorchのソースコードを取得し、TheRock互換バージョンに切り替え
python external-builds/pytorch/pytorch_torch_repo.py checkout
cd external-builds/pytorch/pytorch

# ダミーで登録 (システム全体に影響を与えないように --local を使用)
git config --local user.name "test"
git config --local user.email "test@example.com"

# 2. サブモジュールの完全同期(※タイムアウト対策で --depth 1 を追加)
git submodule update --init --recursive --depth 1

# 3. 必要なPythonパッケージのインストール
uv pip install -r requirements.txt
uv pip install cmake ninja typing_extensions mkl mkl-include setuptools wheel

# 4. パス設定
export ROCM_PATH=$HOME/install/TheRock/build/dist/rocm
export PATH=$ROCM_PATH/bin:$ROCM_PATH/llvm/bin:$PATH
export PKG_CONFIG_PATH=$ROCM_PATH/lib/pkgconfig:$ROCM_PATH/share/pkgconfig:$ROCM_PATH/lib/rocm_sysdeps/lib/pkgconfig:$ROCM_PATH/lib/rocm_sysdeps/share/pkgconfig:$PKG_CONFIG_PATH

# 5. コンパイラ設定(TheRock環境のclangへ変更)
export CC=$ROCM_PATH/llvm/bin/clang
export CXX=$ROCM_PATH/llvm/bin/clang++

# 6. CMakeの引数設定
export CMAKE_ARGS="-DROCM_PATH=$ROCM_PATH -DCMAKE_HIP_COMPILER=$ROCM_PATH/bin/hipcc"

# 7. PyTorchビルド設定
export PYTORCH_ROCM_ARCH="gfx1103"
export USE_ROCM=1
export USE_CUDA=0
export USE_XPU=0
export USE_KINETO=0
export BUILD_TEST=0
export USE_RCCL=0
export USE_NCCL=0
export USE_MPI=0
export USE_MIOPEN=1
export USE_OPENMP=1

# 8700Gに合わせてスレッド数を指定。メモリが足りない場合は「8」とか減らしてください
export CMAKE_BUILD_PARALLEL_LEVEL=16 
export MAX_JOBS=16 

# AOTritonの場所を指定
export AOTRITON_INSTALLED_PREFIX=$HOME/install/aotriton/install_dir

# 8. ビルド
python setup.py bdist_wheel 2>&1 | tee build_pytorch.log

# 9. pytorchのハッシュを取得
# pytorch-triton-rocmとバージョンを合わせる場合、以下のコマンドでハッシュを取得しておく
cat .ci/docker/ci_commit_pins/triton.txt

できあがったファイルは「dist」というフォルダの中に入っています。
これは以降の「torchaudio」「torchvision」
torchtoritonrocmも同様です。

ここでできあがったwhlファイルの中に、先程のAOTritonがパッケージングされています。

# pytorch-triton-rocmとバージョンを合わせる場合、以下のコマンドでハッシュを取得しておく
cat .ci/docker/ci_commit_pins/triton.txt

ところで最後のこの部分ですが、これは後で「torch-triton-rocm」をビルドする時に必要になる値です。

今回は「43422b04287ec4e774e2b1b9316b7eff44219b3f」ですが、ビルドする時期によって当然異なります。

torchaudioのビルド

torchaudioのビルドを始める前に、ffmpegのインストールをしておいてください。

sudo apt install ffmpeg

以下は、torchaudioのビルドスクリプトです。

#!/bin/bash

cd ~/install/TheRock
source .venv/bin/activate
cd ../

git clone https://github.com/pytorch/audio.git torchaudio-source
cd torchaudio-source

uv pip install soundfile

# ビルドしたtorchをインストール
uv pip install $HOME/install/TheRock/external-builds/pytorch/pytorch/dist/torch*.whl

# パスを通す
export ROCM_PATH=$HOME/install/TheRock/build/dist/rocm
export LD_LIBRARY_PATH=$ROCM_PATH/llvm/lib:$ROCM_PATH/lib/rocm_sysdeps/lib:$ROCM_PATH/lib:$LD_LIBRARY_PATH
export PATH=$ROCM_PATH/bin:$ROCM_PATH/llvm/bin:$PATH

# コンパイラをTheRockのものに変更
export CC=$ROCM_PATH/llvm/bin/clang
export CXX=$ROCM_PATH/llvm/bin/clang++

# 環境変数設定
export USE_ROCM=1
export PYTORCH_ROCM_ARCH="gfx1103"
export MAX_JOBS=16

# ビルド開始
python setup.py bdist_wheel

torchaudioのビルドは、ROCmやtorchと違ってすぐに終わります。

torchvisionのビルド

#!/bin/bash

cd ~/install/TheRock
source .venv/bin/activate
cd ../

git clone https://github.com/pytorch/vision.git torchvision-source
cd torchvision-source

# ビルドしたtorchをインストール(torchaudioの時にインストールしているので本当は不要)
uv pip install $HOME/install/TheRock/external-builds/pytorch/pytorch/dist/torch*.whl

# パスを通す
export ROCM_PATH=$HOME/install/TheRock/build/dist/rocm
export LD_LIBRARY_PATH=$ROCM_PATH/llvm/lib:$ROCM_PATH/lib/rocm_sysdeps/lib:$ROCM_PATH/lib:$LD_LIBRARY_PATH
export PATH=$ROCM_PATH/bin:$ROCM_PATH/llvm/bin:$PATH

# コンパイラをTheRockのものに変更
export CC=$ROCM_PATH/llvm/bin/clang
export CXX=$ROCM_PATH/llvm/bin/clang++

# 環境変数を設定
export USE_ROCM=1
export PYTORCH_ROCM_ARCH="gfx1103"
export MAX_JOBS=16

# ROCm(HIP)のC++拡張機能をビルドするフラグがCUDAと共通化されているため、以下を実行
export FORCE_CUDA=1

# ビルド
python setup.py bdist_wheel

torch-triton-rocmのビルド

今回の目玉ではありませんが、この「torch-triton-rocm」があればモデルファイルをtorch.compileできるようになるとのことで、今回のビルドに組み込んでみました。

まだ、いろいろ制限があるようであまり有効に使えませんが、今後に期待です。

#!/bin/bash

# Tritonは、PyTorch 2.0以降の目玉機能である torch.compile(モデルを自動解析して実行速度を引き上げる機能)

cd ~/install/TheRock
source .venv/bin/activate
cd ../

# AMD公式のROCm向けTritonリポジトリをクローンします
git clone https://github.com/ROCm/triton.git
cd triton

# PyTorchが指定しているコミットハッシュに切り替える
git checkout 43422b04287ec4e774e2b1b9316b7eff44219b3f

# 依存関係のサブモジュールもそのバージョンに合わせて同期する
git submodule update --init --recursive

# ビルドに必要なパッケージをインストール
uv pip install pybind11

# ROCmのパスを指定
export ROCM_PATH=$HOME/install/TheRock/build/dist/rocm 
export PATH=$ROCM_PATH/bin:$ROCM_PATH/llvm/bin:$PATH
export LD_LIBRARY_PATH=$ROCM_PATH/lib:$ROCM_PATH/lib/rocm_sysdeps/lib:$ROCM_PATH/lib/llvm/lib:$LD_LIBRARY_PATH

# コンパイラをTheRockのものに変更
export CC=$ROCM_PATH/llvm/bin/clang
export CXX=$ROCM_PATH/llvm/bin/clang++

# 8700Gの16スレッドをフル活用して並列ビルド
export MAX_JOBS=16

# 5. ソースからのコンパイルとwhlファイルを作成します
python setup.py bdist_wheel

「PyTorchが指定しているコミットハッシュに切り替える
git checkout 43422b04287ec4e774e2b1b9316b7eff44219b3f」

この部分ですが、どうもtorchとtorch-triton-rocmは密接な関係にあるようで、ビルドしたtorchが指定しているものでないとうまく機能しないようです。
ハッシュを指定しているのはそのためです。

仮想環境にビルドしたwhlファイルをインストール

大抵の場合、以下のコマンドでuvなどの仮想環境の中にインストールします。
コマンドでComfyUIやIrodori-TTSなど、pytorchを使うソフトをインストールしている方なら馴染みやすいし応用も効くと思います。

uv venv --python /usr/bin/python3
source .venv/bin/activate

# pytorchフォルダの中の「whlファイル」をすべてインストール
uv pip install pytorch/*.whl

ビルドしたROCmのパスを設定

面倒なのがROCmのパスの設定。
aptでROCmをインストールしている人からすれば、こんな作業は必要ないですからね。

# ROCmのパスを「.venv/bin/activate」の最後の行に書き込む
export ROCM_PATH=$HOME/install/TheRock/build/dist/rocm
export LD_LIBRARY_PATH=$ROCM_PATH/lib:$ROCM_PATH/lib/rocm_sysdeps/lib:$ROCM_PATH/lib/llvm/lib:$LD_LIBRARY_PATH

# pytorch-triton-rocmをインストールしたら、以下の環境変数を設定
export TRITON_HIP_LLD_PATH=$HOME/install/TheRock/build/dist/rocm/lib/llvm/bin/ld.lld

例えばComfyUIの場合、「python main.py –auto-launch」を実行する前に、上のコマンドを打たなくてはなりません。
自分はこの方法が面倒だし忘れてしまうので、仮想環境の中に直接書き込んでしまいます。

# 仮想環境をアクティベート
source .venv/bin/activate

# ROCmのパスを「.venv/bin/activate」の最後の行に書き込む
echo 'export ROCM_PATH=$HOME/install/TheRock/build/dist/rocm' >> ".venv/bin/activate"
echo 'export LD_LIBRARY_PATH=$ROCM_PATH/lib:$ROCM_PATH/lib/rocm_sysdeps/lib:$ROCM_PATH/lib/llvm/lib:$LD_LIBRARY_PATH' >> ".venv/bin/activate"

# pytorch-triton-rocmをインストールしたら、以下の環境変数を設定
echo 'export TRITON_HIP_LLD_PATH=$HOME/install/TheRock/build/dist/rocm/lib/llvm/bin/ld.lld' >> ".venv/bin/activate"

こうすれば、パスの設定は最初に環境を作った時の一度だけで済みます。

最後に

今回はこのビルドの手順を整理するのにメチャクチャ時間がかかりました。
エラーが起きてはチャットAIにエラーログを投げて、返ってきた対策案を再実行する・・・。
去年まではこれでもすごいことでしたが、最近はAIエージェントなるものが出始めてきていて、こういった面倒なやりとりも必要なくなるかもしれません。

自分もAIエージェントの環境作りに試行錯誤しているところです。

さて、それはともかく今回はビルドの手順を紹介しただけ。
次回からは、これらを使ってどのくらいパフォーマンスが伸びたのか、をやっていきます。

以上です。


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ストアでいつでもお買い得。当日お急ぎ便対象商品は、当日お届け可能です。アマゾン配...
AMD Ryzen 5 8600G CPU Wraith Stealth Cooler付属 AM5ソケット
【Amazon.co.jp限定】 AMD CPU Ryzen 5 8600G, with Wraith Stealth Cooler AM5 4.3GHz 6コア / 12スレッド 22MB 65W 正規代理店品 100-100001237...
Amazon | 【Amazon.co.jp限定】 AMD CPU Ryzen 5 8500G, with Wraith Stealth Cooler AM5 3.5GHz 6コア / 12スレッド 22MB 65W 正規代理店品 100-100000931BOX/EW-1Y | AMD | CPU 通販
【Amazon.co.jp限定】 AMD CPU Ryzen 5 8500G, with Wraith Stealth Cooler AM5 3.5GHz 6コア / 12スレッド 22MB 65W 正規代理店品 100-100000931...

コメント

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