The RockでROCmをビルド(Ubuntu編)

Ubuntu
スポンサーリンク

Irodori-TTSをROCmで動かす(Ubuntu編)の記事で、Ryzen9 7900無印の内蔵GPUで音声生成をやってみました。
この内臓GPUはRDNA2(Raphael)なので、記事作成時の公式プリビルド版ROCm7.2には正式対応しておりません(まぁ、今まで一度も正式対応はしていないのですが)。
ROCm6.4までは環境変数で偽装して動かすことは可能でした。

今回は、最新のROCmをThe Rockでビルドして、このRaphaelを動かしてやろうという記事です。

ただし、これができたからといってなにか特別な性能を発揮できるようになるといったものではありません。
生成される画像(まっ黒画像)や音声(ノイズのみ)のバグも直りません。
ただの、お遊びです。

ひょっとしたら、以下のリンクから確認できるROCm対応ハードウェア以外の場合で、なにか改善が得られる場合があるかもしれない程度の情報ですので、興味がある方は試してみてください。

System requirements (Linux) — ROCm installation (Linux)
System requirements for AMD ROCm

上のリンクからわかるように、「RX7600」や「RX7600XT」、「Ryzen 8000Gシリーズ」は正式に対応していません(ただ、認識はするらしいし、一応動作もするみたい)。

一方、The Rockでビルドできる対象は以下のリンクで確認できます(見にくいですが)。

TheRock/cmake/therock_amdgpu_targets.cmake at main ?? ROCm/TheRock
The HIP Environment and ROCm Kit - A lightweight open source build system for HIP and ROCm - ROCm/TheRock

アリエクスプレスで一時話題になったGPU「MI50」や、Ryzen5000Gシリーズの「Renoir/Lucienne/Cezanne」もありますね。

今回はこの中にある、「gfx1036 “AMD Raphael iGPU”」を利用します。
繰り返しますが、今回のビルドに成功しても特に恩恵はありません。
自分の知っている限りでは、「export HSA_OVERRIDE_GFX_VERSION=10.3.0」で偽装しなくても動くようになり、ROCmのバージョンが最新になるくらいです。

でも、とりあえずいってみましょう。

ビルドするにあたって

もし、自力でビルドする時は、ビルドする時期によってエラーの出方も変わる可能性があるということは覚えておいて下さい。
あと、ビルドにはとてつもない時間がかかります。
途中でエラー対処の時間があったので、正確にはわかりませんが、3時間40分くらい。

これはROCmのビルドにかかる時間であって、このあと当然torch、torchvision、torchaudioのビルドも控えています。
ハードウェアによってはAOTriton(ROCm版FlashAttention)のビルドもあります。

挑戦する人は、時間がたっぷり取れる時にやってみてくださいね。
最近の高性能CPUを使えばもっと速いかもしれませんが・・・。

あとメモリは32GBでは足りなさそうです。64GBはあった方が良いでしょう。
実際自分で確認した限りでは使用量53GBまで上がりました。

実行してみよう

cd ~
mkdir -p install
cd install

sudo apt update
sudo apt install gfortran git ninja-build cmake g++ pkg-config xxd patchelf automake libtool python3-venv python3-dev libegl1-mesa-dev texinfo bison flex

git clone https://github.com/ROCm/TheRock.git
cd TheRock

python3 -m venv venv
source venv/bin/activate

#かなり時間がかかる(自分の環境で40分くらい?)
time git submodule update --init --recursive

pip install -r requirements.txt

cmake -B build -GNinja \
-DTHEROCK_AMDGPU_TARGETS="gfx1036" \
-DTHEROCK_DIST_AMDGPU_FAMILIES="gfx103X-all" \
-DTHEROCK_RESET_FEATURES=ON \
-DTHEROCK_ENABLE_COMPILER=ON \
-DTHEROCK_ENABLE_CORE_RUNTIME=ON \
-DTHEROCK_ENABLE_HIP_RUNTIME=ON \
-DTHEROCK_ENABLE_BLAS=ON \
-DTHEROCK_ENABLE_FFT=ON \
-DTHEROCK_ENABLE_RAND=ON \
-DTHEROCK_ENABLE_PRIM=ON \
-DTHEROCK_ENABLE_SPARSE=ON \
-DTHEROCK_ENABLE_SOLVER=ON \
-DTHEROCK_ENABLE_MIOPEN=ON \
-DTHEROCK_ENABLE_HIPDNN=ON \
-DTHEROCK_ENABLE_RCCL=ON \
-DTHEROCK_ENABLE_ROCPROFILER_COMPUTE=OFF \
-DTHEROCK_ENABLE_ROCPROFV3=OFF \
-DTHEROCK_ENABLE_ROCPROFSYS=OFF \
-DTHEROCK_ENABLE_AQLPROFILE=OFF \
-DTHEROCK_ENABLE_ROCGDB=OFF \
-DTHEROCK_ENABLE_ROCR_DEBUG_AGENT=OFF \
-DTHEROCK_ENABLE_AMD_DBGAPI=OFF \
-DTHEROCK_ENABLE_RDC=OFF \
-DTHEROCK_ENABLE_ROCPROFILER_SDK=OFF \
-DTHEROCK_ENABLE_ROCTRACER=OFF .

time cmake --build build -j 24 -- -k 0 2>&1 | tee build_error.log

いつもどおり、ホームディレクトリにinstallフォルダを作ってその中で実行します。
仮想環境は今回は「python-venv」を使っています。
ビルドとは別にサブモジュールの取得に40分ほどかかります。
今回、プロファイラ(推論や学習では必要ない部分)でどうしてもエラーが回避出来なかったため、Geminiのアドバイスより「–k」オプションで強行突破する方法をとりました。

[rocprofiler-compute] Unsupported gfx targets ?? Issue #2892 ?? ROCm/TheRock
rocprofiler-compute currently only supports Instinct products (MI100 and above, see and does...

上のリンクで報告が上がってるようです。

GFX1036に限定してビルド

ビルド対象を広げるとその分時間がかかるとのことで、今回はRaphael限定にしています。
もし、RDNA2全体に範囲を広げたい場合は

cmake -B build -GNinja \
-DTHEROCK_AMDGPU_TARGETS="gfx1036" \
-DTHEROCK_DIST_AMDGPU_FAMILIES="gfx103X-all" \
・・・・

この部分を

#gfx103x全てビルドする
#cmake -B build -GNinja -DTHEROCK_AMDGPU_FAMILIES="gfx103X-all" \

このように書き換えてください。
自分は試していないので、どんなエラーが出るかわかりませんが・・・。

もし、Ryzen8000Gシリーズに挑戦する場合は「gfx1103」、RX7600(XT)に挑戦する場合は「gfx1102」になると思います。

完成したROCmフォルダ

もしスクリプトどおりに実行したなら、
「$HOME/install/TheRock/build/dist/rocm」
に出来上がっていると思います。

この中ですね。

今後、pytorchをビルドする時は常にここを指定することになります。
ですが、今回は「ROCmのビルド」が目的なのでここまでです。

次回は、このビルドしたROCmを使ってpytorchをビルドしていきます。

今回は以上です。

コメント

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