ローカルでの Kimi K2: 1 トリリオンパラメータの MoE を soi
ローカルでllama.cppを使用してKimi K2を動作させることは、パーソナルワークステーション上で1兆パラメータのMoEモデルを実行することを意味します。この驚異的な点は2つの要素にあります。1つは、トークンごとにアクティブなパラメータが32Bのみであること(残りは待機状態)であり、もう1つは、llama.cppがmmapを通じて非アクティブな重みをSSD上に保持できることです。このガイドでは、ハードウェア構成、Q2_K_S量子化、ディスクオフロード、および期待できる実際の数値について詳しく説明します。
#ローカルでKimi K2を実行する理由
Kimi K2 は Moonshot AI のフラッグシップモデルで、重み公開(Modified MIT)されています。MoE(Mixture of Experts)アーキテクチャを採用し、総パラメータ数は 1 トリリオン、トークンごとのアクティブパラメータ数は約 32B です。推論やコードのベンチマークでは、クローズドなフロンティアモデルと同等の性能を示し、128k トークンという長いコンテキスト長により、大規模な文書分析の有力な候補となっています。
18か月前には、この規模のモデルをローカルで動かすことは夢物語でした。状況を変えたのは三つの進展です。大容量DDR5の普及(192〜384 GBを数百ユーロで用意可能)、シーケンシャル読み取りで7 GB/sを出せるNVMe Gen 4 SSD、そしてQ2_K_SやIQ1_Mのような非常に強い量子化に関するllama.cppチームの取り組みです。
#MoEを理解する:総パラメータ数1T/有効パラメータ数32B
お使いのマシンで、プライベートかつ無料のChatGPTを1時間で構築 — LM Studio、Ollama、Open WebUI、ご自身のドキュメント、クラウド不要。
- 永久に利用できるオンラインスペース
- PDF + ファイル
- 生涯アップデート
MoEアーキテクチャは、デンスFFNブロックをエキスパート層(多くの場合256個以上)に置き換え、その中からルーターがトークンごとに8〜12個を選びます。計算では、選ばれたエキスパートのパラメータだけを処理するため、「アクティブ」なパラメータ数は約32Bになります。一方、メモリの面では、すべてのエキスパートにアクセスできる必要があります。そうでなければ、ルーターはモデルの95%にアクセスできなくなります。
- 総パラメータ数
- 約1兆(1T)。これはRAMまたはディスク上で待機している部分です。
- トークンごとのアクティブパラメータ
- 約320億。これが計算量と速度を決めます。
- 層ごとのエキスパート
- 数百のエキスパートがあり、トークンごとに一定数が選ばれて処理を割り当てられます(top-k routing)。
- 共有層(アテンション)
- 常にアクティブです。コンテキストが短い場合、メモリ使用量の大部分を占めます。
- KVキャッシュ
- コンテキストに比例して線形に増加します。128kの場合、キーバリュー(KV)は量子化を施しても30GBを超過することがあります。
#確保しておくべきメモリ容量
1T MoEのメモリ計算は、3つの異なる項目に分解できます。RAMやSSDへの投資前に、この分解を理解することが重要です。
- モデルのサイズ(量子化済み)
- Q2_K_S ≈ 245 GB、Q3_K_S ≈ 320 GB、Q4_K_M ≈ 480 GB、Q8_0 ≈ 1 TB。モデルの重みが容量の大部分を占め、最も圧縮しやすい部分でもあります。
- KVキャッシュ(コンテキスト)
- FP16 ではトークンあたり約 0,25 MB、Q8 では約 0,12 MB と計算してください。つまり、Q8 で 128k トークンには 32 GB が必要です。--cache-type-k/-v を通じて設定可能です。
- 活性化バッファ
- 中間計算用にGPUあたり数GBのメモリが必要です。全体に占める割合は小さいものの、24 GBのGPUでは忘れずに考慮してください。
#ハードウェア要件
Kimi K2をローカルで動かせるマシン構成は3種類あり、それぞれ速度面でのトレードオフが大きく異なります。
- 構成A — 高性能DDR5メモリ(RAM 192〜384 GB)
- Threadripper/Xeon W搭載ワークステーション、またはEPYCプラットフォーム。256GBのDDR5 ECCメモリ。GPUは必須ではありません。Q2_K_Sではモデル全体がRAMに収まります。想定速度:CPUのみで4~8 tok/s。
- 構成B — DDR5 + 24GBのGPU 1基
- 96〜128GBのRAM + RTX 4090/3090。共有層はGPUにオフロードし、エキスパートはRAMに残します。想定速度は6〜12トークン/秒で、VRAMに収まるエキスパートの数によって変わります。
- 構成C — 少なめのRAM+NVMe SSD
- 64〜96 GB RAM + NVMe Gen 4(読み取り速度7 GB/s、空き容量≥1 TB)。SSDから重みをmmapします。期待される速度:1〜3トークン/秒で、実際のSSDの読み取り速度に強く依存します。
#1. llama.cpp を適切なバックエンドでコンパイルする
Kimi K2には、そのMoEアーキテクチャとIQ量子化に対応した、最近のバージョンのllama.cpp(2025年12月より後の最近のビルド)が必要です。公式リポジトリからコンパイルします。
Apple Silicon搭載Macでは、GGML_CUDAをGGML_METALに置き換える。ROCmを使うAMD環境では、GGML_HIPに置き換える。GGML_CUDA_FA_ALL_QUANTSフラグは、すべての量子化形式でFlash Attentionを有効にします。128kのコンテキストをVRAM使用量が膨れ上がることなく保持するために不可欠です。
#2. GGUFの量子化方式を選ぶ
この規模のモデルでは、512 GBのRAMがない限り、Q4_K_M以上は選択肢から外してください。Q2_K_S、IQ2_XXS、さらにはIQ1_Mという極端な量子化によって、ローカルでの実行が現実的になります。その代償として測定可能な品質低下がありますが、MoEでは多くの場合、許容できる範囲です。
- Q2_K_S(~245 GB)
- 最適なバランス。コードのベンチマークでは約5%、推論では約3%の性能低下。256 GBのRAMまたは高速なSSDがある場合に推奨されます。
- IQ2_XXS (~210 GB)
- 重要度行列によりさらにアグレッシブ。オフロードを少し使用すれば 192 GB RAM に収まります。品質は一段階下がります。
- IQ1_M(~155GB)
- ハイブリッド1ビット量子化。リソースの制約が非常に厳しい構成向けです。明らかな品質低下はありますが、モデルは一貫性を保ちます。
- Q3_K_S(約320GB)
- Q4に近い品質ですが、384GBのRAMが必要です。十分なハードウェアを備えたEPYCワークステーション向けです。
このサイズの GGUF は、複数のファイルに分割されています(split-00001-of-00007.gguf など)。最初のファイルを指定すれば、llama.cpp が分割ファイルを自動的に検出します。
#3. mmapとoffloadでKimi K2を起動
基本的なコマンドはllama-serverを使用し、llama.cppが提供するHTTPサーバーを活用します。デフォルトで8080ポートにOpenAIと互換性のあるエンドポイントを公開します。
24 GBのGPUでは、共有層(アテンション)をGPUにオフロードし、MoEのエキスパートはRAMまたはSSDに残します。-otフラグを使うと、どの部分をGPUに、どの部分をCPUに配置するかを正確に指定できます。
-otに渡す正規表現は、「エキスパートのすべてのFFN層(MoEモデルの大部分)はCPU/RAM側に残し、それ以外はGPUに配置する」という意味です。この工夫によってハイブリッド構成が実用的になります。モデル全体をGPUに読み込まずに、アテンション処理にGPUを活用できます。
#4. 実測した生成速度(トークン/秒)
実際に観測された処理速度の目安をいくつか以下に示します。数値はプロンプト(プリフィルは遅く、生成速度は比較的安定しています)と、OSのページキャッシュの状態によって変動します。
- EPYC 9354P、384 GB DDR5、Q2_K_S、モデル全体を RAM に配置
- プリフィルは約80トークン/秒、生成は約6~8トークン/秒。推論をバッチ処理する際の基準となる構成です。
- Threadripper 7960X、256 GB DDR5、Q2_K_S
- プリフィルは約50トークン/秒、生成は約4〜6トークン/秒。DDR5メモリのレイテンシが支配的です。
- Ryzen 9 7950X、128GB DDR5 + NVMe Gen 4 SSD
- プリフィルは約15 tok/s、生成は約1.5〜3 tok/sです。データがRAMに常駐できる容量を超えると、すぐにSSDがボトルネックになります。
- Mac Studio M2 Ultra 192GB
- IQ2_XXSでの生成速度は約4〜7トークン/秒。ユニファイドメモリの帯域幅(800 GB/s)は、MoEで大きな助けになります。
- ワークステーション 256 GB + RTX 4090 (ハイブリッド)
- Prefill:約60トーク/秒、生成:約7〜10トーク/秒。注意のGPUはPrefill時間を2倍にします。
#5. 128k コンテキストの使用例
Kimi K2がローカルの7B〜70Bモデルに対して持つ大きな強みは、128kトークンのウィンドウです。具体的には、年次報告書全体、中規模なコードベース、または100ページ程度のPDFを読み込ませ、全体を把握した総合的な要約を依頼できます。チャンク単位のRAGではありません。
- 長文ドキュメントの要約
- 300ページのレポートは120kトークン以内に収まります。Kimi K2は一回のパスで構造化された要約を生成しますが、RAGではモザイク状になるでしょう。
- コードベースのリファクタリング
- 50件のPythonファイル(約80kトークン)を読み込み、一貫したアーキテクチャレビューを依頼します。横断的な技術的債務対応に非常に役立ちます。
- ログの相関分析
- フィルタリング後のログ50 MBを貼り付け、インシデントの時系列を求める。モデルは、スライディングウィンドウ内だけでなく、すべての相関関係を捉えます。
- 大容量のドキュメントの翻訳
- 一冊の本全体における用語の整合性を維持し、chunkによる翻訳では文脈のつながりが失われます。
#トラブルシューティング
- 「failed to load model」またはマジックナンバーのエラー
- 使用しているllama.cppは、このGGUFを扱うには古すぎます。2025年12月より後のビルドに更新し、GGUFの再パッケージを行った提供者が示しているアーキテクチャのバージョンを確認してください。
- RAM容量は足りるはずなのに、生成速度が0.2トークン/秒
- カーネルは、すべてのページにアクセスするまで、GGUFからページを読み込み続けます。最初に短いプロンプトで「ウォームアップ実行」を行うと、頻繁にアクセスするページを事前に読み込めます。それ以外の場合は、--threadsを増やして、帯域幅をより早く使い切るようにしてください。
- 長いプロンプトで突然発生するOOM(メモリ不足)
- KVキャッシュの使用メモリが急増しました。--ctx-sizeを32768まで下げるか、キャッシュのQ8量子化を有効にしてください。KVキャッシュはモデルのサイズではなく、コンテキストの長さに比例して大きくなります。
- 出力に一貫性がない、または文章が崩れる
- 多くの場合、原因はチャットテンプレートの誤りです。--chat-templateを確認するか、GGUFにMoonshotの公式テンプレート(jinja)が正しく含まれているかを確認してください。終了トークンが間違っていると、生成が逸脱してループします。
- SSDが80°Cに達する高温状態、ディスクアクセス速度の急激な低下
- ハイエンドのNVMe SSDは、ヒートシンクがないと熱によって速度が低下します。長時間使う場合は、ヒートシンクを取り付けるか、RAMに収まる容量の小さい量子化版に切り替えて負荷を減らしてください。
#さらに詳しく
Kimi K2のローカル実行は、超大規模モデルを試すための実験場です。さらに踏み込むための3つのアプローチを紹介します:
- llama.cppのビルドを習得する
- 「CUDA で llama.cpp をコンパイルする」ガイドでは、この種のモデルの性能を左右する、分かりにくいフラグ(テンソルのオフロード、MMQ、Flash Attention)を詳しく説明しています。
- 量子化を理解する
- 「量子化の選択」ガイドでは、IQ2_XXSやQ3_K_Sを詳しく学ぶ前に役立つ概念の基礎を説明し、実際に何が劣化するのかを明らかにします。
- さらに圧縮を進める
- TurboQuantガイドでは、最先端モデルを一般消費者向けのハードウェアに収めるための、K-quantsより新しい手法を詳しく解説しています。この手法には、K-quantsとは異なるトレードオフがあります。
ご意見、誤りのご指摘、補足はありますか?ぜひお知らせください。皆さんにとってより良いガイドにするために役立ちます。