経験は何よりも饒舌

10年後に真価を発揮するかもしれないブログ 

Radeon 890M (gfx1150) iGPUでROCmを動かしてLLM推論を11倍高速化

Unsloth Desktopでチャットを試したけど、レスポンスが遅かったのでClaudeに調査してもらった。

結果

  • 推論速度 44 秒 → 4 秒
  • スループット 6.0 tok/s → 67.5 tok/s

Before

After

実機環境

項目
マシン MINISFORUM AI X1 Pro-370
CPU AMD Ryzen AI 9 HX 370 (12C/24T, 最大 5157 MHz)
iGPU AMD Radeon 890M Graphics (RDNA 3.5, gfx1150, PCI ID 1002:150e)
CU 数 16 CU, 2 SIMDs/CU, Wavefront Size 32
NPU RyzenAI-npu4 (aie2p)
メモリ 91 GB DDR5(CPU/GPU 共有、帯域 128 GB/s)
OS Ubuntu 24.04.4 LTS (Noble Numbat)
初期カーネル 6.8.0-117-generic
最終カーネル 7.2.5-070205-generic

作業ログ

1. 初期状態の確認

$ lspci | grep -i display
c5:00.0 Display controller: Advanced Micro Devices, Inc. [AMD/ATI] Device 150e (rev c1)

PCIデバイスとしては見えているが、DRMデバイス(/dev/dri/card*, /dev/dri/renderD*)が存在しない状態。
さらにdmesg を確認すると、amdgpuドライバがgfx1150のprobeに失敗して -22(EINVAL)エラーを出していた。

$ dmesg | grep -i amdgpu
amdgpu: probe of 0000:c5:00.0 failed with error -22

もったいないことに、iGPUが使われていないらしい。

2. カーネルのアップグレード

初期カーネルのamdgpuドライバはgfx1150(Radeon 890M)をサポートしていない可能性があったため、まずカーネルをアップグレードした。
Ubuntu Mainline Kernel PPAからカーネル7.2.5をインストール。

$ sudo dpkg -i linux-headers-7.2.5-070205_7.2.5-070205.202609111348_all.deb \
               linux-headers-7.2.5-070205-generic_7.2.5-070205.202609111348_amd64.deb \
               linux-image-unsigned-7.2.5-070205-generic_7.2.5-070205.202609111348_amd64.deb \
               linux-modules-7.2.5-070205-generic_7.2.5-070205.202609111348_amd64.deb

再起動後も依然として -22 エラーが出ていた。
カーネルは新しくなったが、別の原因でamdgpuドライバのprobeが失敗している。

3. nomodesetの除去

原因を調べると、GRUBに nomodeset カーネルパラメータが設定されていた。
これがamdgpuドライバのロードを妨げていた。
この設定は、以前に、再起動時に黒い画面でフリーズするのを避けるために設定していた。

qiita.com

/etc/default/grub から nomodeset を削除。

$ sudo vi /etc/default/grub

変更前:

GRUB_CMDLINE_LINUX_DEFAULT="quiet splash nomodeset"

変更後:

GRUB_CMDLINE_LINUX_DEFAULT="quiet splash"
$ sudo update-grub

再起動後、amdgpuドライバがprobeに成功し、DRMデバイスが出現した!

$ ls -la /dev/dri/
crw-rw----+ 1 root video  226,   1 ... card1
crw-rw----+ 1 root render 226, 128 ... renderD128

4. ROCm 10.0.0のインストール

amdgpu-installを使い、ROCmユースケースでインストール。
カーネル7.2.5に同梱のamdgpuドライバをそのまま使用するため、DKMSはスキップ。

$ sudo amdgpu-install --usecase=rocm --no-dkms

インストールされたパッケージ:

$ dpkg -l | grep amdrocm | wc -l
235

$ apt list --installed 2>/dev/null | grep amdgpu-install
amdgpu-install/noble,noble,noble,noble,now 31.50.0.0.31500000-2390945.24.04 all [インストール済み]

ROCmのバージョン確認:

$ /opt/rocm/bin/hipconfig --full
HIP version: 7.15.26333-0000000

==hipconfig
HIP_PATH           :/opt/rocm/core-10.0
ROCM_PATH          :/opt/rocm/core-10.0
HIP_COMPILER       :clang
HIP_PLATFORM       :amd
HIP_RUNTIME        :rocclr

gfx1150向けのBLASライブラリもインストールされている:

$ dpkg -l | grep amdrocm-blas10.0-gfx1150
ii  amdrocm-blas10.0-gfx1150  10.0.0~pre4-32424980240  amd64  AMD library for BLAS in ROCm

5. ユーザーをrender/videoグループに追加

ROCmがGPUデバイスにアクセスするには、ユーザーが render および video グループに所属している必要がある。

$ sudo usermod -aG render,video hirotaka

確認(再起動後に有効):

$ id hirotaka
uid=1000(hirotaka) gid=1000(hirotaka) groups=...,44(video),...,110(render),...

6. GTTサイズの拡大

APUではGPUが使用するGTT(Graphics Translation Table)メモリがデフォルトでは小さい。
LLMのモデルを載せるために64 GBに拡大。

$ sudo vi /etc/default/grub
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash amdgpu.gttsize=65536"
$ sudo update-grub

反映確認(再起動後):

$ cat /proc/cmdline
BOOT_IMAGE=/boot/vmlinuz-7.2.5-070205-generic root=UUID=... ro quiet splash amdgpu.gttsize=65536 vt.handoff=7

最終的なカーネル:

$ uname -r
7.2.5-070205-generic

$ uname -v
#202609111348 SMP PREEMPT_DYNAMIC Fri Sep 11 14:13:33 UTC 2026

7. 環境変数の設定

~/.bashrc に以下を追加:

export PATH=$PATH:/opt/rocm/bin
export LD_LIBRARY_PATH=/opt/rocm/lib:${LD_LIBRARY_PATH:-}
export HSA_ENABLE_SDMA=0
export GPU_MAX_HW_QUEUES=4
export ROCBLAS_USE_HIPBLASLT=1
export HIP_FORCE_DEV_KERNARG=1

各環境変数の役割:

変数 目的
HSA_ENABLE_SDMA 0 APU の UMAアーキテクチャで発生する SDMA DMAタイムアウトを回避。iGPU 環境では必須
GPU_MAX_HW_QUEUES 4 高負荷時のハングを防止
ROCBLAS_USE_HIPBLASLT 1 hipBLASLt を使用しスループットを約 15% 改善
HIP_FORCE_DEV_KERNARG 1 カーネル引数をデバイスメモリ側に配置しレイテンシを削減

8. 再起動と動作確認

再起動後、以下を順に確認。

rocminfo

$ rocminfo
ROCk module is loaded
=====================
HSA System Attributes
=====================
Runtime Version:         1.21
Runtime Ext Version:     1.30
...

==========
HSA Agents
==========
*******
Agent 1
*******
  Name:                    AMD Ryzen AI 9 HX 370 w/ Radeon 890M
  Device Type:             CPU
  Compute Unit:            24

*******
Agent 2
*******
  Name:                    gfx1150
  Marketing Name:          AMD Radeon 890M Graphics
  Vendor Name:             AMD
  Feature:                 KERNEL_DISPATCH
  Device Type:             GPU
  Compute Unit:            16
  SIMDs per CU:            2
  Shader Engines:          1
  Wavefront Size:          32
  Max Clock Freq. (MHz):   2900
  Chip ID:                 5390(0x150e)
  ASIC Revision:           4(0x4)
  Memory Properties:       APU
  Fast F16 Operation:      TRUE
  ISA Info:
    ISA 1
      Name:                amdgcn-amd-amdhsa--gfx1150
    ISA 2
      Name:                amdgcn-amd-amdhsa--gfx11-generic

*******
Agent 3
*******
  Name:                    aie2p
  Marketing Name:          RyzenAI-npu4
  Device Type:             DSP

GPU Agentとして gfx1150 が認識されている。
NPU(RyzenAI-npu4)も Agent 3 として見えている。

rocm-smi

$ rocm-smi
======================================== ROCm System Management Interface ========================================
================================================== Concise Info ==================================================
Device  Node  IDs              Temp    Power     Partitions          SCLK  MCLK  Fan  Perf  PwrCap  VRAM%  GPU%
==================================================================================================================
0       1     0x150e,   58458  38.0°C  6.847W    N/A, N/A, 0         N/A   N/A   0%   auto  N/A     42%    2%
==================================================================================================================

amd-smi

$ amd-smi monitor -putm
GPU  XCP  POWER  PWR_CAP   GPU_T   MEM_T   GFX_CLK   GFX%   MEM%  MEM_CLOCK
  0    0    6 W      N/A   37 °C     N/A   725 MHz    1 %    N/A   1475 MHz

watch -n 1 amd-smi monitor -putm

アイドル状態

推論状態

各種コマンドでGPUが動いていることが確認できた。
NVIDIA GPUがなくてもやっていけそう。