Ryzen AI 9 HX 370のGPU用メモリ(GTT)を24GBに拡張する方法【Ubuntu 24.04】
はじめに
NucBox EVO X1を買って、ローカルでAI画像生成やLLM推論をやろうとしたら、いきなりメモリ不足で詰まりました。
搭載されているRadeon 890Mは統合GPU(APU)なので、専用のVRAMがありません。BIOSの「UMA Frame Buffer Size」で確保できるVRAMは最小1GB〜最大16GBですが、これだけだと重めの画像生成やLLMを動かすには全然足りない。
調べていくと、LinuxにはGTT(Graphics Translation Table)メモリというGPU用の共有メモリ領域があって、カーネルパラメータで拡張できることがわかりました。この記事では、そのGTTメモリを16GBから24GBに拡張した手順と、ハマったポイントをまとめます。
環境
マシン: GMKtec NucBox EVO X1
CPU/GPU: AMD Ryzen AI 9 HX 370 / Radeon 890M
RAM: 32GB DDR5
OS: Ubuntu 24.04
GTTメモリってなに?
ざっくり言うと、GPUがDMA(Direct Memory Access)で直接読み書きできるシステムメモリの領域です。
統合GPUの場合、BIOSで設定するVRAM(UMA Frame Buffer)は「GPUに固定で予約される領域」。一方GTTメモリは「必要なときにGPUが使える柔軟な共有領域」です。VRAMは固定で確保されてしまうのでCPU側から使えなくなりますが、GTTは使わないときはCPU側に返せるので、限られたRAMを効率よく使えます。
デフォルトではシステムRAMの50%がGTTの上限になっていて、32GBなら16GBまで。でもAI系のワークロードではこれが足りなくなることがあるので、カーネルパラメータで上限を引き上げます。
手順
1. ビデオドライバのインストール
AMD Radeonリポジトリから amdgpu-install パッケージをダウンロードしてインストールします。
$ sudo mkdir -p /etc/apt/keyrings
$ wget -P /tmp https://repo.radeon.com/amdgpu-install/7.2/ubuntu/noble/amdgpu-install_7.2.70200-1_all.deb
$ sudo apt install -y /tmp/amdgpu-install_7.2.70200-1_all.deb
$ sudo apt update2. amdgpu-topコマンドのインストール
amdgpu-topはメモリ割り当て変更後の確認やGPUの状態を知るために必要。
$ wget -P /tmp https://github.com/Umio-Yasuno/amdgpu_top/releases/download/v0.11.2/amdgpu-top_0.11.2-1_amd64.deb
$ sudo dpkg -i /tmp/amdgpu-top_0.11.2-1_amd64.deb
$ amdgpu_top --smi3. BIOSでUMA Frame Buffer Sizeを最小にする
まず再起動してBIOSに入ります(Delキー)。
Advanced → GFX Configuration を開いて、「UMA Frame Buffer Size」を最小の1GBに設定。F10で保存して再起動します。
GTTを拡張するなら、固定VRAMは小さい方がいい。VRAMとして固定予約された分はCPUから使えなくなるので、32GBしかないマシンではなおさらです。参考記事では512MBを推奨していますが、このBIOSでは1GBが最小でした。
4. 使っているTTMモジュールを確認する
ここが地味にハマるポイントです。Ubuntu 24.04では、ROCmドライバをインストールしているかどうかで、ロードされるTTMモジュールが変わります。
$ lsmod | grep ttmttmが出る場合 →ttm.pages_limitとttm.page_pool_sizeを使うamdttmが出る場合 →amdttm.pages_limitとamdttm.page_pool_sizeを使う
自分の環境ではttmモジュールが表示されました。どっちかわからなければ両方書いておけば問題ありません(該当しないモジュールのパラメータは単に無視されます)。amdgpu-dkmsがインストールされている場合は両方表示されます。
5. ページ数を計算する
GTTサイズはページ数で指定します。1ページ = 4096バイトなので、24GBだと:
24 × 1024 × 1024 × 1024 ÷ 4096 = 6,291,456 ページ電卓叩くのが面倒な人向けに、よく使いそうな値をまとめておきます。
GTTサイズ | ページ数 |
|---|---|
16GB | 4,194,304 |
24GB | 6,291,456 |
32GB | 8,388,608 |
6. GRUBのカーネルパラメータを編集する
$ sudo nano /etc/default/grubGRUB_CMDLINE_LINUX_DEFAULTの行を見つけて、以下のように書き換えます。
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash amdgpu.gttsize=24576 ttm.pages_limit=6291456 ttm.page_pool_size=6291456"各パラメータの意味はこんな感じ。
パラメータ | 何をしてるか |
|---|---|
| GTTサイズを24GB(MB単位)で指定 ※1 |
| TTMモジュールが管理できるページ数の上限。これが本命 |
| TTMのページプールサイズ。pages_limitと同じ値でOK |
※1
amdgpu.gttsizeは新しいカーネルではdeprecated扱いになるらしいが、自分の環境(Ubuntu 24.04標準カーネル)では警告は出なかった。TTM側のパラメータと併用しておくのが無難。
※
amdttmモジュールの環境なら、amdttm.pages_limit=6291456 amdttm.page_pool_size=6291456も追記してください。
7. GRUBを更新して再起動
$ sudo update-grub
$ sudo reboot8. 確認する
再起動したら、ちゃんと反映されているか確認します。
# カーネルパラメータが適用されたか
$ cat /proc/cmdline
# TTMモジュールのパラメータ確認
$ cat /sys/module/ttm/parameters/pages_limit
$ cat /sys/module/ttm/parameters/page_pool_size
# GPU側のメモリ情報
$ cat /sys/class/drm/card*/device/mem_info_gtt_total
$ cat /sys/class/drm/card*/device/mem_info_vram_total
# GPU割り当てとTTM割り当ての確認
$ amdgpu_top --smi以下のようにVRAM 1GBとGTT 24GBが表示されていれば成功。

VRAM 1GB + GTT 24GB = 合計25GBがGPUから使えるようになりました。
注意点
RAMの50%を超えるとリスクがある
AMD開発者のAlex Deucher氏いわく、LinuxのOOMハンドラの都合でTTMのデフォルト上限はRAMの50%になっているとのこと。32GB RAMで24GB(75%)は攻めた設定ですが、今のところ問題なく動いています。ただし重い処理を複数同時に走らせるとOOMキラーに殺される可能性はあるので、そこは自己責任で。
カーネルが新しければ不要になるかも
Kernel 6.16.x系にはAPUのユニファイドメモリ処理の改善が入っていて、新しいカーネルではこの手のパラメータなしでもGTTが正しく認識される場合があるらしいです。Ubuntu 24.04の標準カーネルは古いので手動設定が必要ですが、将来的には不要になるかもしれません。
まとめ
やったことは「BIOSでVRAMを最小にして、GRUBにカーネルパラメータを3行追加する」だけ。それで最大16GBだったGPUメモリが1GB + 24GBになりました。
重めの画像生成やLLM推論をRadeon 890Mでやるなら、この設定は最初にやっておいた方がいいと思います。特にComfyUIで重めのモデルを動かすときに、この数GBの差がOOMするかしないかの境界線になりました。



