GPUとCPUを分業させるローカルLLM構成の計画と、現実の試行錯誤
Blackwell 96GB + EPYC 9175F で、CPU を Dagster 冪等パイプライン、GPU をユーザー対話+日次 LoRA 更新に分業させる計画を立てた。現実は ik_llama.cpp でメモリ帯域を食い合わないモデル組み合わせを日々試行錯誤している。試したモデル 60 以上の時系列記録付き。
結論
Blackwell 96GB と EPYC 9175F の 12ch メモリ帯域を持つワークステーションで、GPU と CPU を分業させるローカル LLM 構成を計画した。
計画: CPU 側を Dagster パイプラインで冪等・非同期処理に使い、パラメータの大きい MoE モデルで品質の高い成果物を目指す。GPU 側をユーザーの対話窓口として、少し低めのパラメータで fine-tuning した専門性の高いモデルを置き、毎日の Dagster asset から LoRA で品質を上げていく。
現実: ik_llama.cpp を使って GPU に少し重みを載せて、メモリ帯域を食い合わないようにモデルの組み合わせを日々試行錯誤しているところだ。計画の Dagster + LoRA パイプラインはまだ動いていない。
計画: CPU/GPU 分業アーキテクチャ
CPU レーン — Dagster 冪等パイプライン
CPU 側の 12ch メモリ帯域を活かし、パラメータの大きい MoE モデル(100B〜400B 級)を非同期で回す。
- Dagster でパイプラインを冪等に構成する。asset ベースでジョブを管理し、失敗しても再実行で同じ結果が得られる
- 用途はリポジトリ全体の解析、ドキュメント生成、テストコード生成、大規模リファクタリングの思考など、時間をかけて品質を出す仕事
- 即応性は求めない。Fire & Forget で投げて、結果を待つ
MoE モデルは GPU 1 枚では active parameter が少なくても total parameter が大きいため VRAM に載りきらないことが多い。12ch の CPU メモリ帯域なら、非同期レーンとして十分実用的な速度が出る。
GPU レーン — 対話窓口 + 日次 LoRA 更新
GPU 側はユーザーの対話窓口として使う。
- パラメータ 30B 前後の、応答性の高いモデルを置く
- fine-tuning で専門性を上げる。自分のコードベース、設計パターン、使う言語に特化させる
- 毎日の Dagster asset から LoRA アダプタを生成し、ベースモデルに日次で適用する。CPU 側の重い処理結果が、GPU 側の対話品質に反映される循環
この循環が計画の核心だ。CPU 側で時間をかけて得た知見を、GPU 側の対話モデルに LoRA として還元する。ユーザーから見れば「使うほど賢くなるローカル LLM」になる。
計画時のパイプライン図
CPU (EPYC 12ch):
Dagster Pipeline → MoE 100B-400B (ik_llama.cpp / vLLM)
→ asset: コード解析結果、テスト生成、リファクタ提案
→ asset: LoRA 学習データ
→ 日次 LoRA アダプタ生成
GPU (Blackwell 96GB):
対話サーバー → Dense 30B 級 (vLLM) + LoRA アダプタ
→ Zed MCP / Aider / CLI
→ 即時レスポンス
→ 日次で LoRA 更新(CPU 側の asset から)
現実: ik_llama.cpp でのモデル組み合わせ試行
計画の Dagster + LoRA パイプラインはまだ構築できていない。現状は ik_llama.cpp を使って GPU に少し重みを載せ(部分オフロード)、CPU と GPU でメモリ帯域を食い合わないモデルの組み合わせを探っている段階だ。
試行の焦点
- GPU に載せる重みの量を調整して、対話の応答性と CPU 側の帯域確保のバランスを取る
- 同時に複数モデルを立てるとき、メモリ帯域の競合で両方遅くなるパターンを避ける
- 量子化の選択(GGUF IQ, NVFP4, FP8)がモデルごとに品質と速度にどう影響するかを実測する
ツール構成(現状)
| ツール | 役割 |
|---|---|
| ik_llama.cpp | メインの推論サーバー。GPU 部分オフロード対応 |
| Zed + MCP | 対話フロント。OpenAI 互換 API 経由 |
| Aider | CLI コード編集。DIFF ベースで既存リポジトリ修正 |
| ctree + pathfinder | MCP ツールとしてコンテキスト効率を改善 |
vLLM は計画にはあるが、現状は ik_llama.cpp の部分オフロードのほうが柔軟に組み合わせを試せるため、こちらを主力にしている。
モデル試行履歴
2026 年 1 月〜3 月にかけて試したモデルの時系列記録。cold storage のアーカイブから取得。
2026年1月
| 日付 | モデル | 備考 |
|---|---|---|
| 01/04 | Qwen3-VL-32B-Instruct | GUI Agent、Tool Use 検証 |
| 01/04 | IQuest-Coder-V1-40B-Instruct (GGUF) | SWE-Bench 高スコア、Dense コーディングモデル |
| 01/04 | Hermes-4.3-36B | 指示忠実度、Function Call 安定性検証 |
| 01/05 | gpt-oss-120b (GGUF) | CPU レーン候補、120B Dense |
| 01/05 | Hermes-4-70B-FP8 | 70B FP8、GPU 単体で載るか検証 |
| 01/05 | Llama-4-Scout-17B-16E-Instruct (GGUF) | MoE、17B active |
| 01/09 | Llama-3.3-70B-Instruct-NVFP4 | NVFP4 量子化の品質検証 |
| 01/09 | Llama-4-Scout-17B-16E-Instruct-NVFP4 | NVFP4 版比較 |
| 01/09 | Command-A-Reasoning-NVFP4 | 推論特化モデル |
| 01/09 | IQuest-Coder-V1-40B-Loop-Instruct-NVFP4 | Loop 版 NVFP4 |
| 01/09 | MiroThinker-v1.5-30B | 30B 思考モデル |
| 01/09 | IQuest-Coder-V1-40B-Loop-Instruct | Loop 版オリジナル |
| 01/09 | IQuest-Coder-V1-40B-Instruct | Dense オリジナル |
| 01/11 | Llama-4-Maverick-17B-128E-Instruct (GGUF) | 128 expert MoE |
| 01/11 | plamo-2-translate | 翻訳特化モデル |
| 01/11 | functiongemma-270m-it | 軽量 Function Call テスト |
| 01/11 | gemma-3-270m-it-NVFP4 | 超軽量 NVFP4 |
| 01/11 | gemma-3-27b-it-NVFP4A16 | 27B NVFP4 |
| 01/11 | gpt-oss-20b | 20B Dense |
| 01/11 | gemma-3-27b-it | 27B オリジナル |
| 01/11 | Qwen3-Coder-30B-A3B-Instruct-NVFP4 | MoE コーダー、3B active |
| 01/11 | gpt-oss-120b | 120B オリジナル重み |
| 01/11 | Monstral-123B-v2-NVFP4 | 123B MoE NVFP4 |
| 01/11 | LTX-2 | 動画生成モデル |
| 01/12 | Mixtral-8x22B (imatrix GGUF) | 8x22B MoE |
| 01/20 | Nemotron-3-Nano-30B-A3B-NVFP4 | NVIDIA MoE 30B |
| 01/20 | Qwen3-Coder-30B-A3B-Instruct-FP8 | FP8 版比較 |
| 01/22 | GLM-4.7-Flash | 7B Flash モデル |
2026年2月
| 日付 | モデル | 備考 |
|---|---|---|
| 02/05 | Nemotron-3-Nano-30B-A3B-NVFP4 (nvidia公式) | 公式 NVFP4 再検証 |
| 02/13 | Qwen3-Next-80B-A3B-Thinking (GGUF) | 80B MoE Thinking |
| 02/14 | Step-3.5-Flash (GGUF) | Flash 系 |
| 02/15 | Kimi-K2.5 (GGUF) | 1T MoE 量子化 |
| 02/15 | GLM-5 (GGUF) | GLM 次世代 |
| 02/15 | GLM-4.7-Flash (GGUF) | GGUF 版 Flash |
| 02/15 | GLM-4.7-Flash-Uncensored (imatrix GGUF) | 検閲なし版 |
| 02/15 | Qwen3-Coder-Next (GGUF) | Next 世代コーダー |
| 02/16 | DeepSeek-V3.2-Speciale (GGUF) | V3.2 特化版 |
| 02/16 | gpt-oss-120b-NEO (imatrix GGUF) | NEO imatrix 版 |
| 02/17 | MiniMax-M2.5 (GGUF) | 230B MoE |
| 02/17 | Qwen3-Coder-Next-NVFP4 | NVFP4 版 |
| 02/18 | Step-3.5-Flash (GGUF, ubergarm) | 別量子化 |
| 02/18 | Ace-Step1.5 | 音楽生成モデル |
| 02/18 | Voxtral-Mini-4B-Realtime | 音声リアルタイム |
| 02/18 | FLUX.2-klein-9B | 画像生成 |
| 02/18 | GLM-5 (GGUF, ubergarm) | 別量子化 |
| 02/18 | LFM2-8B-A1B | Liquid Foundation Model |
| 02/19 | LFM2-8B-A1B (GGUF) | GGUF 版 |
| 02/19 | LFM2.5-1.2B-Thinking | 超軽量 Thinking |
| 02/19 | LFM2.5-VL-1.6B | 超軽量 Vision-Language |
| 02/19 | LFM2.5-1.2B-Instruct | 超軽量 Instruct |
| 02/19 | Devstral-2-123B-Instruct (GGUF) | 123B コーディング |
| 02/19 | Qwen3.5-397B-A17B (GGUF) | 397B MoE |
| 02/20 | MiroThinker-v1.5-235B (GGUF) | 235B 思考モデル |
| 02/21 | Qwen3.5-397B-A17B (GGUF, ubergarm) | 別量子化 |
| 02/23 | MiniMax-M2.5 (GGUF, AesSedai) | 別量子化 |
| 02/24 | Kimi-K2.5 (GGUF, ubergarm) | 別量子化 |
| 02/24 | Qwen3-Next-80B-A3B-Instruct-NVFP4 | NVFP4 版 |
| 02/24 | Qwen3-Next-80B-A3B-Thinking-NVFP4 | Thinking NVFP4 |
| 02/25 | Qwen3.5-35B-A3B (GGUF) | 35B MoE |
| 02/25 | Qwen3.5-122B-A10B (GGUF) | 122B MoE |
| 02/25 | Qwen3.5-122B-A10B-NVFP4 | NVFP4 版 |
| 02/25 | Qwen3.5-27B | 27B Dense |
| 02/25 | Qwen3.5-122B-A10B (GGUF, ubergarm) | 別量子化 |
2026年3月
| 日付 | モデル | 備考 |
|---|---|---|
| 03/02 | Nemotron-Nano-9B-v2-Japanese (GGUF) | 日本語特化 |
| 03/02 | Nemotron-Nano-9B-v2-Japanese | オリジナル |
| 03/03 | Qwen3.5-27B (GGUF, bartowski) | GGUF 版 |
| 03/03 | Qwen3.5-27B (GGUF, ubergarm) | 別量子化 |
| 03/06 | pplx-embed-context-v1-0.6b | Perplexity 埋め込み |
| 03/06 | pplx-embed-v1-0.6b | Perplexity 埋め込み |
| 03/06 | pplx-embed-context-v1-4b | 4B 埋め込み |
| 03/06 | pplx-embed-v1-4b | 4B 埋め込み |
傾向
3 ヶ月の試行を振り返ると、いくつかの傾向が見える。
- 1月: 基本的なモデル選定。Dense コーディングモデル(IQuest-Coder 40B)と MoE(Scout, Maverick)の比較、NVFP4 量子化の品質検証が中心
- 2月前半: GLM, Kimi, DeepSeek など中国系モデルの評価が増える。Flash 系の軽量モデルも試行
- 2月後半: Qwen3.5 世代の MoE(397B, 122B, 35B)が中心に。量子化手法ごとの比較(同一モデルの GGUF/NVFP4/FP8 を複数試す)が増える
- 3月: 日本語特化モデル(Nemotron-Nano-9B-v2-Japanese)と埋め込みモデル(Perplexity)の検証に移行
全体を通して、同一モデルの異なる量子化を複数ダウンロードしているケースが多い。これは ik_llama.cpp での部分オフロード時に、量子化レベルが GPU/CPU 分業の効率に直結するためだ。
今後
計画の Dagster パイプライン + 日次 LoRA 更新はまだ実装していない。現状の試行錯誤から得られた知見をもとに、次のステップとして進めたい。
- ik_llama.cpp の部分オフロードで安定したモデル組み合わせを確定させる
- Dagster で冪等パイプラインを構築し、CPU レーンを非同期処理専用にする
- GPU レーンのベースモデルに対して、Dagster asset からの日次 LoRA 適用を開始する
- ctree + pathfinder の MCP ツールを Dagster asset の入力として組み込む
