技術 約5分で読めます

EVO-X2でローカルLLM環境を構築した

キャラクターRP用にNSFW対応のローカルLLMが欲しくなった。クラウドAPIだと不意のNSFWワードで止まるし、キャラの口調も自由にいじりたい。ちょうどGMKtec EVO-X2(Strix Halo搭載ミニPC)が手元にあったので、そいつでLLMサーバーを立てることにした。

関連記事:

ハードウェア: GMKtec EVO-X2

項目スペック
CPUAMD Ryzen AI Max+ 395(16コア32スレッド)
RAM64GB LPDDR5X(ユニファイドメモリ)
内蔵GPURadeon 8060S

Strix Haloの特徴はCPUとGPUでメモリを共有するユニファイドメモリ構成。Apple Siliconと同じ発想で、LLM推論には好都合。

初期トラブル

メモリが32GBしか認識されない

64GBのはずが32GBしか使えない。原因は出荷時設定で半分がGPU用に予約されていたこと。

解決手順:

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

これで利用可能メモリが61.6GBになった。VRAM配分の詳細はメモリ配分の記事で解説している。

パフォーマンスモードにしていなかった

72Bモデルを動かしたら2 tokens/sしか出ない。電源モードがQuiet/Balancedだった。

EVO-X2は前面に P-MODEボタン(電源ボタンとは別)がある。これを押して赤いメーターアイコン(Performanceモード)にする。

Ollama vs LM Studio: Strix HaloではLM Studio一択

最初はOllamaを試したが、Strix Haloとの相性が悪い。

ランタイムロードGPU推論備考
LM StudioVulkanで共有メモリ経由のGPU推論が動く
Ollama×-ロードで落ちる(GPU未使用なのに)

理由はバックエンドの違い:

  • LM Studio: Vulkanバックエンド → Strix HaloのGPUを正しく認識
  • Ollama: ROCmバックエンド → Strix Halo(gfx1151)未対応

Ollamaは対応GPUが見つからないとCPU推論にフォールバックするが、そもそもロードの時点で落ちることもある。環境変数 HSA_OVERRIDE_GFX_VERSION でバージョンをオーバーライドする方法もあるが、安定しない。

結論: EVO-X2(Strix Halo)でOllamaを使う理由がない。

LM Studioセットアップ

インストールとサーバー起動

  1. lmstudio.ai からWindows版をダウンロード・インストール
  2. 左メニューから「Local Server」を選択
  3. モデルをロード
  4. 「Start Server」でAPIサーバー起動(デフォルト: localhost:1234

外部アクセス設定

LM Studioの設定で「Serve on Local Network」を有効にする。これで 0.0.0.0:1234 でリッスンするようになり、Tailscale経由での接続が可能になる。

LM Studio APIの2種類のエンドポイント

LM Studioには2種類のAPIエンドポイントがある。

エンドポイント形式用途
/v1/chat/completionsOpenAI互換推奨 - 会話履歴が正しく認識される
/api/v1/chatNative API会話がテキスト連結になり文脈が弱い

OpenAI互換API(推奨)

{
  "model": "ms3.2-24b-magnum-diamond",
  "messages": [
    {"role": "system", "content": "システムプロンプト"},
    {"role": "user", "content": "こんにちは"},
    {"role": "assistant", "content": "やっほー!"},
    {"role": "user", "content": "元気?"}
  ],
  "temperature": 0.4,
  "max_tokens": 100
}

レスポンス:

{
  "choices": [
    {
      "message": {
        "role": "assistant",
        "content": "元気だよ〜!"
      }
    }
  ]
}

Native API(非推奨)

{
  "model": "...",
  "system_prompt": "...",
  "input": "ユーザー: こんにちは\nキャラ: やっほー\nユーザー: 元気?\nキャラ:"
}

会話がテキスト連結されるだけなので、モデルが文脈を理解しにくい。キャラクターRPでは会話の流れが重要なので、OpenAI互換APIを使うべき。

モデル比較・選定

NSFW対応 × 日本語 × キャラRP という条件で複数のモデルを試した。

モデルNSFW日本語備考
huihui-mistral-abliterated中国語混入、口調不安定
MS3.2-24B-Magnum-Diamond現在使用中。口調がお嬢様風、長文傾向
PaintedFantasy-v4-24B?×日本語崩壊(ローマ字化)
Gemma 27B uncensored×-完全拒否「話したくない」
Cydonia-24B-v4.1×-NSFW拒否
Umievo-Gleipnir-7B×日本語は自然だがNSFW拒否

Gemma系はabliterated/uncensored版でも限界がある。学習データ自体からNSFWデータが除外されているため、検閲を外しても「知識がない」状態になる。詳しくはメモリ配分の記事のGemmaセクションで触れている。

MS3.2-24B-Magnum-Diamond がNSFW対応 × 会話の繋がり × 日本語がそこそこ通じるという条件でベストだった。Magnum系は英語創作・ロールプレイ向けに学習されているモデルで、NSFW耐性が高い。

最終構成

項目設定
モデルMS3.2-24B-Magnum-Diamond(GGUF Q4_K_M)
ランタイムLM Studio
エンドポイント/v1/chat/completions(OpenAI互換)
temperature0.4
max_tokens100

確認済み機能

  • NSFWワードで止まらない
  • 会話の文脈を理解する
  • キャラ設定を理解して会話

速度

  • 約11 tokens/s(GPU推論)
  • 短い返答なら数秒で返る

未解決の課題

  1. 口調問題: Magnumは「〜わよ」「〜かしら」等のお嬢様口調になりがち。システムプロンプトで禁止しても完全には制御できない
  2. 長文問題: max_tokens=100に設定しても3〜4文になることがある
  3. 日本語+NSFW両立: 完璧に両立するモデルがまだ見つかっていない。日本語の砕けた会話は学習データに少ないため、口調が不自然になりやすい

今後の候補として Lumimaid-Magnum-v4-12B、Vecteus-v1、big-tiger-gemma-27b-v3-heretic-v2 あたりを検証予定。

Ollama時代の検証メモ(2026/02/04)

LM Studio移行前にOllamaで検証していた頃のメモ。

Qwen 32B vs 72B のキャラクターテスト:

項目32B72B
JSON形式無視
返答の長さ長すぎ✓ 適切
会話の自然さテンプレ感✓ 自然
指示追従微妙✓ 良い
NSFW対応

72Bは質が高いがOllamaのCPU推論では1.5 t/s程度で実用的ではなかった。M1 Max 64GBでも5.3 t/sが限界。

最終的にLM StudioのGPU推論に移行したことで、24Bモデルで11 t/sが出るようになり、72Bを使う必要がなくなった。