EVO-X2でローカルLLM環境を構築した
キャラクターRP用にNSFW対応のローカルLLMが欲しくなった。クラウドAPIだと不意のNSFWワードで止まるし、キャラの口調も自由にいじりたい。ちょうどGMKtec EVO-X2(Strix Halo搭載ミニPC)が手元にあったので、そいつでLLMサーバーを立てることにした。
関連記事:
ハードウェア: GMKtec EVO-X2
| 項目 | スペック |
|---|---|
| CPU | AMD Ryzen AI Max+ 395(16コア32スレッド) |
| RAM | 64GB LPDDR5X(ユニファイドメモリ) |
| 内蔵GPU | Radeon 8060S |
Strix Haloの特徴はCPUとGPUでメモリを共有するユニファイドメモリ構成。Apple Siliconと同じ発想で、LLM推論には好都合。
初期トラブル
メモリが32GBしか認識されない
64GBのはずが32GBしか使えない。原因は出荷時設定で半分がGPU用に予約されていたこと。
解決手順:
- 再起動時にESCキー連打でBIOS起動
- Advanced → GFX Configuration
- iGPU Configuration → UMA_SPECIFIED
- UMA Frame buffer size → 2Gに変更
- 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 Studio | ○ | ○ | Vulkanで共有メモリ経由の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セットアップ
インストールとサーバー起動
- lmstudio.ai からWindows版をダウンロード・インストール
- 左メニューから「Local Server」を選択
- モデルをロード
- 「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/completions | OpenAI互換 | 推奨 - 会話履歴が正しく認識される |
/api/v1/chat | Native 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互換) |
| temperature | 0.4 |
| max_tokens | 100 |
確認済み機能
- NSFWワードで止まらない
- 会話の文脈を理解する
- キャラ設定を理解して会話
速度
- 約11 tokens/s(GPU推論)
- 短い返答なら数秒で返る
未解決の課題
- 口調問題: Magnumは「〜わよ」「〜かしら」等のお嬢様口調になりがち。システムプロンプトで禁止しても完全には制御できない
- 長文問題: max_tokens=100に設定しても3〜4文になることがある
- 日本語+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 のキャラクターテスト:
| 項目 | 32B | 72B |
|---|---|---|
| JSON形式 | 無視 | ✓ |
| 返答の長さ | 長すぎ | ✓ 適切 |
| 会話の自然さ | テンプレ感 | ✓ 自然 |
| 指示追従 | 微妙 | ✓ 良い |
| NSFW対応 | ✓ | ✓ |
72Bは質が高いがOllamaのCPU推論では1.5 t/s程度で実用的ではなかった。M1 Max 64GBでも5.3 t/sが限界。
最終的にLM StudioのGPU推論に移行したことで、24Bモデルで11 t/sが出るようになり、72Bを使う必要がなくなった。