tk3.biz
ブログ一覧に戻る Back to Blog

Ryzen AI ミニPCでローカルLLMを実用速度で動かす完全ガイド(2026年版) Ryzen AI ミニPCでローカルLLMを実用速度で動かす完全ガイド(2026年版)

AIローカルLLMQwenllama.cppVulkanRyzenAI

はじめに

Ryzen AI 搭載のミニPCは、内蔵 GPU(Radeon 890M)と大容量メモリを積んでいて、 ローカル LLM を動かす機体として人気があります。 ただ、何も考えずに入れると CPU で推論してしまい、遅くて使い物になりません。

このシリーズでは、環境を一度まっさらにしてから組み直し、速度と品質を測ってきました。 この記事は、その結果を最短で再現するための手順書です。細かい理由は各回の記事に譲ります。

到達点: Qwen3.6-35B-A3B が 毎秒 17.5〜22.6 トークン。旧環境(CPU 推論)の約 7 倍です。 ターミナルで llm "質問" と打てば、サーバが止まっていても自動で立ち上がって答えが返ります。

全体の構成。ターミナルのllm関数がHTTPで127.0.0.1:8080のllama-serverに問い合わせ、llama-serverはVulkanでRadeon 890Mを使う。iGPUの専用メモリは2 GiBだけで、モデルとKV約24 GiBはiGPUと共有するメインメモリに置かれる。サーバが止まっていればllmが起動する

動作確認した環境

項目内容
CPU / GPURyzen AI 9 HX 370 / Radeon 890M(gfx1150)
メモリDDR5-5600 96GB(OS 認識 93.6 GB。iGPU 専用は 2 GiB)
OSWindows 11 Pro 26200 / AMD Software 26.8.1
llama.cppb11026(winget の Vulkan ビルド)
モデルunsloth/Qwen3.6-35B-A3B-MTP-GGUF:UD-Q4_K_XL(21.27 GiB)

この記事の手順と数字は、b11026 で確かめたものです。 winget にはより新しい版(b11193)が出ていますが、試していません。 更新するとオプションや速度が変わる可能性があります。

1. 古い環境を片付ける

以前に Ollama や LM Studio、Lemonade などを入れていたら、先に止めて消しておきます。 同じ GPU とメモリを奪い合うので、残っていると速度が安定しません。

  • 常駐サービス(トレイアイコン、Windows サービス)を止める
  • 古いモデルのキャッシュ(Hugging Face の ~\.cache\huggingface など)を必要に応じて消す

消したあとに空き容量で効果を確かめるなら、OneDrive などの同期を止めてからにしてください。 私の環境では、69 GB 消したのに空き容量が 150 GB 減りました。裏で OneDrive が毎分 6 GB 書き込んでいたためです。

詳しくは掃除の回にまとめています。

2. llama.cpp(Vulkan 版)を入れる

winget install --id ggml.llamacpp

インストールしたら、ターミナルを開き直します。 開いたままのターミナルは古い PATH を持っているので、 llama-server が見つからないと言われます(私はこれで「インストールされていない」と誤診しました)。

GPU が見えているかを確かめます。

llama-server --list-devices
Available devices:
  Vulkan0: AMD Radeon(TM) 890M Graphics (78739 MiB, 74802 MiB free)

Vulkan0 に 890M が出ていれば準備完了です。

なぜ Vulkan か。 同じモデルで生成速度を比べると、CPU が 2.59 t/s、ROCm が 4.76 t/s、 Vulkan が 13.41 t/s でした。この機体では Vulkan が圧倒的に速いです。

3. モデルを選ぶ

MoE(Mixture of Experts)のモデルを選びます。 これがいちばん大きな判断です。

モデルファイル生成読み込み
Qwen3.8-27B(密)16.23 GiB3.6 t/s29.6 t/s
Qwen3.6-35B-A3B(MoE)20.74 GiB20.7 t/s281 t/s

ファイルが大きい MoE のほうが 5.7 倍速い。 iGPU の生成速度はメモリから重みを読む速さ(帯域)でほぼ決まり、 MoE は 1 トークンごとに全体の一部しか読まないからです。 **「総パラメータ数」ではなく「1 トークンあたり何バイト読むか」**で選んでください。

Qwen3.6-35B-A3B には、MTP(投機デコード用の層)を含むビルドがあります。 下の設定で使うので、-MTP-GGUF の版を選びます。

4. サーバを起動する

llama-server -hf unsloth/Qwen3.6-35B-A3B-MTP-GGUF:UD-Q4_K_XL `
  --port 8080 -c 65536 -ngl 99 -b 8192 -fa on --kv-unified --jinja `
  --no-mmproj --spec-type draft-mtp --spec-draft-n-max 2 `
  --sleep-idle-seconds 43200

初回は約 22 GB のダウンロードが走ります。2 回目以降はキャッシュから読むだけです。

オプション意味効果(実測)
-ngl 99全層を GPU に載せる必須
-c 65536コンテキスト長2 万トークン級のコードレビューも入る
-b 8192バッチサイズ読み込み +26%
--spec-type draft-mtp --spec-draft-n-max 2MTP 投機デコード散文 +12.6%、コード +33.4%
--no-mmproj画像用の部品を読まないメモリ −1.1 GiB(テキストだけなら困らない)
--sleep-idle-seconds 4320012 時間使わなければモデルをメモリから降ろす常駐させてもメモリを抱えっぱなしにしない
--jinjaモデル同梱のチャットテンプレートを使う必須

入れても意味がないものもあります。-ub は横ばい、--cache-reuse はこのモデルでは無効、 -ctv q8_0(V の量子化)は遅くなります。 一覧は効くもの・効かないものの回にまとめました。

動いたか確かめる

ブラウザで http://127.0.0.1:8080 を開くと、llama.cpp 付属のチャット画面が使えます。 OpenAI 互換の API も出ているので、http://127.0.0.1:8080/v1 を指定すれば、たいていのツールから繋がります。

5. llm と打つだけで使えるようにする

毎回サーバを起動するのは面倒なので、止まっていれば自動で起動する関数を PowerShell のプロファイルに置きます。

notepad $PROFILE

次の関数を貼り付けます。

function llm {
  param([Parameter(Mandatory)][string]$Prompt, [int]$Port = 8080)
  $url = "http://127.0.0.1:$Port"
  $ready = { try { (Invoke-WebRequest "$url/health" -TimeoutSec 2 -SkipHttpErrorCheck).StatusCode -eq 200 } catch { $false } }
  if (-not (& $ready)) {
    Write-Host 'サーバを起動しています(初回は 40 秒ほど)...'
    $a = @('-hf','unsloth/Qwen3.6-35B-A3B-MTP-GGUF:UD-Q4_K_XL','--port',"$Port",'-c','65536','-ngl','99',
           '-b','8192','-fa','on','--kv-unified','--jinja','--no-mmproj',
           '--spec-type','draft-mtp','--spec-draft-n-max','2','--sleep-idle-seconds','43200')
    Start-Process llama-server -ArgumentList $a -WindowStyle Hidden
    while (-not (& $ready)) { Start-Sleep 2 }
  }
  $body = @{ model = 'local'; messages = @(@{ role = 'user'; content = $Prompt })
             chat_template_kwargs = @{ enable_thinking = $false } } | ConvertTo-Json -Depth 5
  $r = Invoke-RestMethod "$url/v1/chat/completions" -Method Post -ContentType 'application/json; charset=utf-8' `
         -Body ([Text.Encoding]::UTF8.GetBytes($body))
  $r.choices[0].message.content
}

新しいターミナルで試します。

llm "1+1は?数字だけ答えて"

私の環境では、サーバが止まっている状態からの 1 回目が 26 秒(起動を含む)、2 回目が 1.0 秒でした。 PowerShell 7 で確かめています(-SkipHttpErrorCheck は 7 以降のオプションです)。

この関数は最小限です。応答を少しずつ表示する、対話モードにする、サーバを止める、といった機能は CLI の回で作っています。

thinking は切ってあります(enable_thinking = $false)。 定型の質問では、thinking を有効にしても正答率は変わらず、時間が 3 倍になったためです(thinking の回)。

6. つまずきやすい点

実際に踏んだものだけを並べます。

症状原因対処
短い質問でも毎回 2 秒待たされるlocalhost が IPv6 に解決され、IPv4 への切り替えに約 2 秒かかる接続先を 127.0.0.1 にする(2.10 秒 → 0.05 秒)
llama-server が見つからないwinget のあと、ターミナルが古い PATH のままターミナルを開き直す
request (19303 tokens) exceeds the available context size-c が小さい-c 65536 などに上げる
メモリを 48 GB 食っているサーバを止めきる前に次を起動して、2 つ動いていた止まったのを確かめてから起動する
.cmd から呼ぶと '。' is not recognizedバッチファイルのコメントに日本語を書いた.cmd は ASCII だけで書く
Python から設定ファイルが見えないStore 版 Python は %APPDATA% を別の場所に振り替える読む側と同じ Python で書き込む
速度が測るたびに 1 割ぶれる裏で別の処理(同期、別のアプリ)が動いている測るときは裏を止める(ベンチマークの取り方)

いちばん効くのは 1 行目です。localhost と書いているところは、全部 127.0.0.1 に替えてください。

長い文書を扱うなら

この設定のまま、コンテキストは 256K まで伸ばせます(メモリは 28 GiB で収まります)。ただし注意点があります。

  • 読み込みが重い: 128K トークンの文書を読ませるのに 18〜24 分かかる
  • 2 回目からは速い: 同じ文書に別の質問をすると、読み直すのは末尾だけで 11 秒
  • 文書を先、質問を後に置く。途中を書き換えると全部読み直しになる

詳しくは 128K の回とキャッシュの回を見てください。

まとめ

  1. 古い環境を止めて片付ける
  2. winget install --id ggml.llamacpp で Vulkan 版を入れ、ターミナルを開き直す
  3. MoE モデル(Qwen3.6-35B-A3B の MTP 版)を選ぶ
  4. -b 8192、MTP(n-max 2)、--no-mmproj を付けて起動する
  5. llm 関数をプロファイルに置き、127.0.0.1 で繋ぐ

速度を決めるのは、Vulkan を使うこととMoE を選ぶことの 2 つです。 細かい設定は、そこから 1〜3 割を上乗せするものだと考えてください。

関連記事 Related Posts

ローカルLLMにメモリは何GB必要か: 96GB積んだミニPCで実測した ローカルLLMにメモリは何GB必要か: 96GB積んだミニPCで実測した

Ryzen AI ミニPCに96GBのメモリを積んでローカルLLMを動かし、実際に何GB使っているかを測りました。35BのMoEモデルで24GiB、コンテキストを上限の256Kまで伸ばしても28GiB程度です。32GB・64GB・96GBでそれぞれ何ができそうかを、実測と推定を分けて整理します。 Ryzen AI ミニPCに96GBのメモリを積んでローカルLLMを動かし、実際に何GB使っているかを測りました。35BのMoEモデルで24GiB、コンテキストを上限の256Kまで伸ばしても28GiB程度です。32GB・64GB・96GBでそれぞれ何ができそうかを、実測と推定を分けて整理します。

Ryzen AI PCのローカルLLMを7倍速くした話(llama.cpp + Vulkan + Qwen) Ryzen AI PCのローカルLLMを7倍速くした話(llama.cpp + Vulkan + Qwen)

まっさらにしたRyzen AI 9 HX 370機に、llama.cppとVulkanでローカルLLM環境を作り直しました。CPU推論から約7倍。最新モデルを選んで失敗した話と、ファイルが大きいほうが速いという実測結果をまとめます。 まっさらにしたRyzen AI 9 HX 370機に、llama.cppとVulkanでローカルLLM環境を作り直しました。CPU推論から約7倍。最新モデルを選んで失敗した話と、ファイルが大きいほうが速いという実測結果をまとめます。

ローカルLLMの設定、効くもの・効かないもの一覧(実測つき) ローカルLLMの設定、効くもの・効かないもの一覧(実測つき)

Ryzen AI ミニPCでローカルLLMを動かすときに試した設定を、効果の大きさ順に1枚にまとめました。Vulkanは5.2倍、MoEは5.7倍。一方で、効かなかったもの、逆効果だったもの、そもそも無効だったものもあります。すべてこの機体での実測値です。 Ryzen AI ミニPCでローカルLLMを動かすときに試した設定を、効果の大きさ順に1枚にまとめました。Vulkanは5.2倍、MoEは5.7倍。一方で、効かなかったもの、逆効果だったもの、そもそも無効だったものもあります。すべてこの機体での実測値です。