技術 約4分で読めます

Strix HaloのVRAM・メモリ配分を攻略する

EVO-X2でローカルLLM環境を構築したの続き。Strix Haloのメモリ配分でハマったポイントと解決策をまとめた。専用VRAMを増やすほど良いわけではない。むしろ減らしたほうがうまくいく。

関連記事:

Strix Haloのユニファイドメモリ

EVO-X2(Strix Halo)はCPUとGPUで64GB LPDDR5Xを共有するユニファイドメモリ構成。Apple Siliconと同じ発想だが、BIOSで「専用VRAM」と「メインメモリ」に明示的に分割する必要がある。

この配分がLLM推論の安定性と速度に大きく影響する。

BIOSのVRAM配分と罠

出荷時は専用VRAMが32GBに設定されている。LLMを動かすならVRAMを増やしたほうがいいと思いがちだが、実際は逆。

配分専用VRAMメインメモリ結果
48GB/16GB48GB16GBロード時にメインメモリが足りずクラッシュ
32GB/32GB32GB32GBバランス型、安定
16GB/48GB16GB48GB推奨。ロード安定、溢れても速度変わらず
8GB/56GB8GB56GB実証済み。29.6GBモデルが動作

「共有GPUメモリから埋まる」現象

VRAM 48GB構成で起きた現象:

  • 専用VRAM(48GB)はガラガラ
  • 共有GPUメモリ(メインメモリ側)がパンパン
  • 合計ではまだ空いているのにロードエラー

LM Studio(Vulkan)がStrix Haloを統合GPU(iGPU)と判断し、専用VRAMより共有メモリを優先的に使用する。そのためメインメモリの割り当てが小さいと簡単に詰まる。

ロード時の瞬間最大メモリ消費

モデルのロード時、データは必ずメインメモリを経由してVRAMに転送される。

ディスク → メインメモリ(一時展開・変換) → VRAM転送
            ↑ ここで詰まる

20GBモデルをロードする場合の瞬間最大メモリ消費:

内訳消費量
OS基本約10GB
モデル本体20GB
変換バッファ(一時的)20GB
瞬間最大約50GB

メインメモリが16GBしかない構成では、この一時展開の段階でクラッシュする。モデルの最終的なVRAM消費量ではなく、ロード時の「通路」の広さが問題になる。

解決策

1. VRAM割り当てを減らす(逆転の発想)

BIOSで VRAM 8GB〜16GB / メインメモリ 48GB〜56GB に設定する。

  • ロード時の「通路」が広くなり、クラッシュしなくなる
  • 専用VRAMに収まらない分は共有メモリ(メインメモリ)に配置される
  • Strix Haloはユニファイドメモリなので、共有メモリでも速度は落ちない

BIOS設定手順:

  1. 再起動時にESCキー連打でBIOS起動
  2. Advanced → GFX Configuration
  3. iGPU Configuration → UMA_SPECIFIED
  4. UMA Frame buffer size → 8G(または16G)に変更
  5. F10 → Save & Reset

2. 仮想メモリ(ページファイル)を増設

ロード時のスパイク対策として、SSDに仮想メモリを確保する。

  1. Windows検索 → 「システムの詳細設定」
  2. 詳細設定タブ → パフォーマンス「設定」
  3. 詳細設定タブ → 仮想メモリ「変更」
  4. 「すべてのドライブの…」のチェックを外す
  5. Cドライブ選択 → カスタムサイズ:
    • 初期サイズ: 32768(32GB)
    • 最大サイズ: 65536(64GB)
  6. 「設定」→ OK → 再起動

3. LM Studio設定

設定項目推奨値効果
mmap(メモリマッピング)OFFロード後にメインメモリ上のコピーを即解放
モデルをメモリに保持OFFメインメモリにバックアップを持たない
KVキャッシュをGPUメモにオフロード状況次第下表参照

VRAM配分によってKVキャッシュの置き場所を変える:

VRAM配分KVキャッシュ理由
48GB/16GBON(VRAMへ)VRAMに余裕あり、メインメモリ節約
8〜16GB/48〜56GBOFF(メインへ)メインメモリに余裕あり

実証: VRAM 8GB / メインメモリ 56GB構成

big-tiger-gemma-27b-v3-heretic-v2(29.6GB Q8_0)での実測:

項目
コンテキスト長35,870
GPUオフロード25レイヤー
K CacheQ8_0量子化
メモリ使用共有12.8GB + 専用7.7GB = 約20.5GB

専用VRAMがたった8GBでも、LM Studioが共有メモリをGPU推論に活用して問題なく動作した。

Gemma 3のメモリ消費問題

Gemma 3は他のモデルと比べて異常にメモリを消費する。

原因は語彙サイズ(Vocab Size)の大きさ。Gemma 3は256kで、Llama 3の128kの2倍ある。コンテキスト長を伸ばすとKV Cacheが爆発的に増加する。

KV Cache量子化で対策

設定K CacheV Cache備考
推奨q4_0f16Vを圧縮すると回答が崩壊しやすい
メモリ不足時q4_0q8_0Vはq4_0まで落とさない

V Cacheの量子化はモデルの出力品質に直結する。q4_0まで落とすと文脈を忘れたり、回答がおかしくなったりする。K Cacheはq4_0まで落としても品質への影響は小さい。

Gemmaの検閲問題

Gemma系は安全性ガードレールが最も厳しいモデルファミリーの一つ。NSFW以前に、軽い話題でも「話したくない」と拒否されることがある。

abliterated/uncensored版にも限界がある。検閲レイヤーを除去しても、学習データ自体からNSFWデータが除外されているため「知識がない」状態になる。

代替モデル候補

Gemma以外でNSFW対応が期待できるモデル:

  • Command R(35B): 従順、日本語流暢、128kコンテキスト
  • Mistral Nemo(12B): 軽量、検閲緩め、日本語良好
  • Llama-3.1-70B Abliterated: 最高性能、検閲なし(ただしメモリ大量消費)

現時点ではMS3.2-24B-Magnum-Diamondがバランス的にベスト。