Strix HaloでLLMを動かすまでの地獄 — MESファームウェア 0x83バグとの3日間

Progress 16 / 18
目次

前回の記事でComfyUIが動くところまで確認できたので、次のステップはLLM推論を動かしてみることにしました。96GBのUMAメモリがある環境なので、それなりのサイズのモデルも余裕で乗るはずです。

lemonadeのPodを立ち上げて推論リクエストを投げてみると、こんなエラーで落ちました。

Memory access fault by GPU node-1 (Agent 1, Process 5, Thread 5) on address 0x7f0000000000. Reason: Page not present
Aborted (core dumped)

「なんかメモリアクセスでこけてる」とは分かりますが、原因の見当がつきません。ここから紆余曲折あり、解決までこぎつけた話を書こうと思います。

まずROCmのバージョンを疑う

エラーメッセージで検索していると、ROCm 7.2.1にgfx1151(Strix Halo)固有の既知バグがあるという情報を見つけました。

[gfx1151] Page Fault on hipMemcpy() in ROCm 7.2.1 - Even official samples fail · Issue #6146 · ROCm/ROCm

[gfx1151] Page Fault on hipMemcpy() in ROCm 7.2.1 Hardware Configuration GPU: AMD Radeon 8060S (0x1586, gfx1151) Architecture: RDNA 3 (Strix Halo, iGPU) CPU: AMD Ryzen AI MAX+ 395 w/ Radeon 8060S S...

github.com

確認するとまさに7.2.1だったので、7.2.3にアップグレードします。

Terminal window
apt-mark showhold # amdgpu-dkms がホールドされていることを確認
sudo apt update && sudo apt install --only-upgrade rocm -y
dpkg -l rocm-core # 7.2.3 になっていることを確認

再起動して再試行。

同じエラーが出ます。

ROCmの問題ではありませんでした。

MESファームウェアのバージョン確認

AMDのGPUにはMES(Micro Engine Scheduler)というコンポーネントがあり、専用のファームウェアが乗っています。

redditを巡回していたところ、MESにおいて以下でrevertされているcommitが悪さをしているとの情報を入手。

Revert "amdgpu: update GC 11.5.0 firmware" (3d5c8135) · Commits · kernel-firmware / Linux Firmware · GitLab

The 0x83 MES SCH firmware causes problems with ROCm on GC 11.5.0. This reverts commit 1c5716794ac6bb25c20852f7cbb2d56aae43f301. Closes: https://gitlab.freedesktop.org/drm/amd/-/issues/4751 Signed-off-by: Mario Limonciello (AMD)

gitlab.com

revert前のバージョンかを確認してみました。

Terminal window
sudo cat /sys/kernel/debug/dri/0/amdgpu_firmware_info | grep MES

手元の出力はこうでした。

MES ... version: 0x83

0x83。これが犯人でした。

amdgpu-dkms-firmwareパッケージが/lib/firmware/updates/amdgpu/gc_11_5_1_mes_2.binというファイルを展開するのですが、この版にバグが含まれています。gc_11_5_1はgfx1151、つまりStrix Haloのことです。一瞬、ハードウェアを壊してしまったのかと焦りましたが、ソフト側のバグで良かった。

ファームウェアを差し替える

修正済みのファームウェアはlinux-firmwareのgitから取得できます。0x5dを持つコミットa54ce0ffのファイルを使います。

ひとつ注意点があります。修正コミットとしてよく参照されるのがこちらです。

Revert "amdgpu: update GC 11.5.0 firmware" (3d5c8135) · Commits · kernel-firmware / Linux Firmware · GitLab

The 0x83 MES SCH firmware causes problems with ROCm on GC 11.5.0. This reverts commit 1c5716794ac6bb25c20852f7cbb2d56aae43f301. Closes: https://gitlab.freedesktop.org/drm/amd/-/issues/4751 Signed-off-by: Mario Limonciello (AMD)

gitlab.com

このコミットはgc_11_5_0_mes_2.bin(GC 11.5.0向け)の修正であり、gc_11_5_1_mes_2.bin(GC 11.5.1 / gfx1151)は含まれていません。Strix Haloで引っかかっている場合はa54ce0ffを指定する必要があります。

Terminal window
cd ~
git clone --filter=blob:none --no-checkout \
https://git.kernel.org/pub/scm/linux/kernel/git/firmware/linux-firmware.git lf-git
cd lf-git
git checkout a54ce0ff -- amdgpu/gc_11_5_1_mes_2.bin

次に置き換え先のパスを確認します。

Terminal window
dpkg -L amdgpu-dkms-firmware | grep gc_11_5_1_mes_2
/lib/firmware/updates/amdgpu/gc_11_5_1_mes_2.bin

/lib/firmware/amdgpu/ではなく/lib/firmware/updates/amdgpu/です。Linuxのファームウェア読み込みではupdates/配下の方が優先されるため、/lib/firmware/amdgpu/を書き換えても意味がありません。最初これを知らずに何度も空振りしました。dpkg -Lを実行してようやく正しいパスに気づきました。

確認

再起動後にMESバージョンを確認します。

Terminal window
sudo cat /sys/kernel/debug/dri/0/amdgpu_firmware_info | grep MES
MES(GFX) version: 0x5d
MES(COMP) version: 0x5d

0x5dになりました。

lemonadeのPodを再デプロイして推論リクエストを投げると、今度は正常に動きました。3日間悩み続けたエラーがあっさり消えたときの達成感は最高でした。

まとめ

gfx1151(Strix Halo)でLLM推論がMemory access faultでこける場合のチェックリストをまとめておきます。

  1. ROCmバージョンを確認する(7.2.1にはgfx1151の既知バグあり → 7.2.3にアップグレード)
  2. MESファームウェアのバージョンを確認する:sudo cat /sys/kernel/debug/dri/0/amdgpu_firmware_info | grep MES
  3. 0x83ならamdgpu-dkms-firmwareが壊れたファームウェアを展開しています
  4. 置き換え先は/lib/firmware/updates/amdgpu/dpkg -L amdgpu-dkms-firmwareで確認)。/lib/firmware/amdgpu/ではありません
  5. gc_11_5_1_mes_2.binはlinux-firmwareのa54ce0ffコミットから取得します(3d5c8135はgc_11_5_0向けで無効)

公式Issueに情報が少なく、調査に時間がかかりました。同じ構成で詰まっている方の参考になれば幸いです。

もしかするとすでにapt側のpackageも更新されているかもなので、普通にupgradeも試してみると良いかもしれません。

また、再起動時にGPUがbusyのままになってしまい、incus経由ではなくベアメタルでk3sを起動することにした話もあるのですが、これはまた別の記事で…


参考

[gfx1151] Page Fault on hipMemcpy() in ROCm 7.2.1 - Even official samples fail · Issue #6146 · ROCm/ROCm

[gfx1151] Page Fault on hipMemcpy() in ROCm 7.2.1 Hardware Configuration GPU: AMD Radeon 8060S (0x1586, gfx1151) Architecture: RDNA 3 (Strix Halo, iGPU) CPU: AMD Ryzen AI MAX+ 395 w/ Radeon 8060S S...

github.com
Revert "amdgpu: update GC 11.5.0 firmware" (3d5c8135) · Commits · kernel-firmware / Linux Firmware · GitLab

The 0x83 MES SCH firmware causes problems with ROCm on GC 11.5.0. This reverts commit 1c5716794ac6bb25c20852f7cbb2d56aae43f301. Closes: https://gitlab.freedesktop.org/drm/amd/-/issues/4751 Signed-off-by: Mario Limonciello (AMD)

gitlab.com