0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

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

0
Last updated at Posted at 2026-10-08

はじめに

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 / GPU Ryzen AI 9 HX 370 / Radeon 890M(gfx1150)
メモリ DDR5-5600 96GB(OS 認識 93.6 GB。iGPU 専用は 2 GiB)
OS Windows 11 Pro 26200 / AMD Software 26.8.1
llama.cpp b11026(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 GiB 3.6 t/s 29.6 t/s
Qwen3.6-35B-A3B(MoE) 20.74 GiB 20.7 t/s 281 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 2 MTP 投機デコード 散文 +12.6%、コード +33.4%
--no-mmproj 画像用の部品を読まない メモリ −1.1 GiB(テキストだけなら困らない)
--sleep-idle-seconds 43200 12 時間使わなければモデルをメモリから降ろす 常駐させてもメモリを抱えっぱなしにしない
--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 割を上乗せするものだと考えてください。

この記事は tk3.biz のブログ からの転載です。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?