
2026/07/29 6:35
M1 Mac で Kimi K3 を動かす方法
RSS: https://news.ycombinator.com/rss
要約▶
Japanese Translation:
Deltafin は、正常なハードウェア制限を超えて単一の Apple Silicon Mac 上で、82,432 のエキスパートを有する大規模なパラメータ数 2.8 兆の Mixture-of-Experts(MoE)モデル Kimi K3 を成功裏に実行しています。この達成は、各トークンに対してデータの小さなサブセットのみを処理するアーキテクチャに基づいています。具体的には、92/93 のレイヤーにおけるトップ-16 ルーティング選択を通じて~25.8 GB のエキスパートデータを読み込みます。完全なローカルインストールでは約 1.7 TB のディスク容量が必要で、M1 Max チップ上での処理速度は約 16 セカンド/トークンですが、最適化されたストリーミングモードではフットプリントを 215 GB に削減でき、しかしキャッシュされていないエキスパートに対してはレイテンシが 3 分以上に大幅に増加します。この設定では、RAM にピン留めされた int8 のクアンタライズ済み 60 GB のリジデントスパインと、ディスク帯域幅の制限を緩和するための最適化されたフューズド MXFP4 カーネルが使用されます。ユーザーは Python 3.12+ の仮想環境を設定し、専用カーネルを構築して
setup_k3.py を実行する必要があります。デフォルトでは、サービスはポート 8000 で OpenAI API を公開しており、openai SDK などの標準クライアントとの互換性を確保します。設定変数により GPU の選択、スパインの精度、推論的デコードのカスタマイズが可能であり、特に出力は exact(ログイット-ファイトフルモード)に設定されており、これは temperature および top_p を無視します。このアプローチは、激しい最適化により大規模言語モデルが消費者向けハードウェア上で動作することを示しますが、非インタラクティブな研究プロトタイプにとどまります。速度制限(長いプロンプトでは数時間必要)、複数リクエストの同時実行の欠如、およびさらなるタイムアウト調整が必要であるため、生産自動化には適していません。本文
Deltafin:Apple Silicon 上での Kimi K3 モデル実行ガイド
概要
Deltafinは、2.8 トリリオンプARAMエータを持つ Kimi K3 (Mix-of-Experts: MoE) モデルを、単一の Apple Silicon Mac で動作させるための小規模研究プロジェクトです。
- 性能: M1 Max でも約 16 トokens/秒 と高速ではありませんが、正確で再現可能です。
- 互換性: 64 GB のラップトップでも動作し、新しいチップやメモリ増加により自動的に高速化されます。
インストール手順
モデルを実行するには以下の 3 つのコマンドが必要です。ステップ 3 が重要な決断点となります。
前提条件
- Python 3.12 以降
- Xcode コマンドラインツール(
のため)clang
ステップ 1:環境の作成
仮想環境を生成し、必要なライブラリをインストールします。
python3 -m venv venv ./venv/bin/pip install torch numpy safetensors tiktoken ml_dtypes blobfile \ "transformers==4.56.2" einops tokenizers
ステップ 2:Fused MXFP4 カーネルのビルド
高速化のための固有ライブラリをコンパイルします。
clang -O3 -mcpu=native -shared -DNO_MAIN -o tools/libmxfp4gemv.dylib tools/fused_gemv.c
ステップ 3:モデルのダウンロード
2 つのモードから選択できます。推奨されるのは
--full です。
モード比較表
| 機能 | (推奨) | |
|---|---|---|
| 必要なディスク容量 | ~1.7 TB | ~215 GB |
| ダウンロード時間 | 5–10 時間(中断可能) | ~30 分 |
| 推論時の速度 | ~60–76 秒/Token | ~3 分以上/token |
| ネットワーク依存性 | 不要 (起動後断続可) | 常に接続が必要 |
- 技術的備考: モデルは約 25.8 GB のデータ(エキスパート×92 レイヤー)を持ちます。ローカルディスク読み取り(約 4 秒)とネットワーク経由読み取り(数分)では速度が異なります。
- 自動判定:
にフラグなしで実行すると、ディスク容量があればsetup_k3.py
を選択し、不足すれば自動的に--full
モードにフォールバックします。--stream
ストリーミングからのフルインストールへの変更: 初期はストリーミングモードから始め、後で高速化のために完全ダウンロードを完了できます(再インストール不要)。
./venv/bin/python tools/fetch_experts_all.py # 中断可能 ./venv/bin/python tools/fetch_experts_all.py --dry-run # 推定サイズ確認 ./venv/bin/python tools/fetch_experts_all.py --layers 1-40 # 部分的ダウンロード
オプション:Int8 Spine(推奨) エキスパート以外の実装を int8 に量子化し、I/O を半減させます。
./venv/bin/python tools/convert_spine_int8.py
使い方
チャット生成
質問を入力して回答を生成します。
./venv/bin/python tools/kimi_run.py --chat --prompt "What are the three largest moons of Saturn?"
生の完遂 (Raw Completion)
制限回数まで出力されます。
Ctrl-C で停止可能です。
./venv/bin/python tools/kimi_run.py --prompt "The capital of France is" --max-new 16
OpenAI API サーバー
標準的な OpenAI API を提供します(ポート変更も可)。
./venv/bin/python tools/serve_openai.py --port 8000
cURL リクエスト例
curl http://127.0.0.1:8000/v1/chat/completions -H 'Content-Type: application/json' \ -d '{"model": "deltafin-kimi-k3", "messages": [{"role": "user", "content": "Hello!"}]}'
Python SDK 使用例
from openai import OpenAI client = OpenAI(base_url="http://127.0.0.1:8000/v1", api_key="none") r = client.chat.completions.create( model="deltafin-kimi-k3", messages=[{"role": "user", "content": "Hello!"}]) print(r.choices[0].message.content) # 回答 print(r.choices[0].message.reasoning_content) # K3 の思考プロセス(存在する場合)
⚠️ 自動化における重要な注意点
- 時間: 回答生成には時間がかかります。タイムアウト設定は秒単位ではなく時間単位にしてください。
を省略するとモデルが終了するまで待ちます(推奨)。max_tokens - ストリーミングインストール: クライアント側では非常に低速です。プリフィル(事前計算)を含む長めのプロンプトは、キャッシュ未充填状態で数時間を要することがあります。フルインストール後には通常速度になります。
- パラメータ制限:
やtemperature
は無視されます。同時リクエストは拒否されます(429 エラー)。top_p - エージェント: 長期のシステムプロンプトは高コストになるため推奨されません。
仕組みについて
Kimi K3 の総重量は約 1.56 TB で、M1 Max (64 GB RAM) のディスク容量を超過します。しかし、MoE モデルは各トークンごとに一部のエキスパートのみを使用するため、ローカル推論が可能になります。
メモリ構成
- レジデント・スパイン (~114 GB): 共有エキスパートや埋め込みなど。一度
に量子化され、ローカル NVMe から読み出されます。int8 - ルーティングされたエキスパート (~1.45 TB): K3 ルーターは 92 レイヤーのうち各トークンで 16 つのエキスパートを選択します。
アーキテクチャフロー図
flowchart LR subgraph HF["Hugging Face CDN"] W[("96 safetensors shards<br/>1.56 TB · MXFP4")] end subgraph MAC["MacBook (M1 Max, 64 GB)"] subgraph DISK["NVMe"] SP[("resident spine<br/>114 GB bf16 → 60 GB int8")] EC[("expert cache<br/>raw shard spans")] end subgraph TOK["per token processing"] R{"router<br/>top-16 of 896<br/>× 92 layers"} L["93 decoder layers<br/>2 shared GPU templates"] K["fused MXFP4 GEMV<br/>NEON"] end end W -- "one range request<br/>per missing expert" --> EC SP -- "double-buffered<br/>layer loader" --> L EC -- "mmap" --> K R -- "selected experts" --> K K --> L L -- "logits" --> R
推論シーケンス図
sequenceDiagram participant D as n-gram draft participant M as model (one T=2 pass) participant S as state snapshot D->>M: [last_token, draft] M->>M: 93 layers, shared cost alt draft verified M-->>D: 2 tokens accepted else draft wrong S-->>M: state restored (bit-exact) M-->>D: 1 token, nothing lost end
パフォーマンス比較 (期待されること)
測定環境:M1 Max (CPU 10 コア / GPU 32 コア / RAM 64 GB)、フルインストール、貪欲デコード。
| メトリック | 初版動作時 | 現在 | 改善率 |
|---|---|---|---|
| プリフィル (5 トokens) | 2,429 秒 | 25 秒 | ~97 倍 |
| デコード (エキスパートローカル) | ~20 分/token | 15 秒/token | ~80 倍 |
| デコード (ストリーミング) | ~20 分/token | ~3 分/token | 改善中 |
トークンあたり内訳 (デコード時)
このハードウェアでは約 3.75 tokens/分 の処理速度です。
- レジデント・スパイン読み取り (53 GB): ~5 秒
- エキスパート読み取り (25.8 GB): ~4.3 秒
- スパインの適用 (転送 + デ量子化): ~3 秒
- アテンションとノーマライゼーション: ~2 秒
- MoE 行列乗算: ~1 秒
新しい Mac が速くなる理由
- メモリ帯域幅: M3/M4 Max は高帯域幅を持ち、Ultra で倍増します。スパイン読み込みと計算に直結。
- GPU: より多くのコアが Metal カーネル(デ量子化・アテンション)を高速実行。
- SSD: 後期モデルはより高速な NVMe を搭載。
- RAM (最重要): 53 GB のスパインデータを RAM 上に保持できるかが鍵。128 GB マシンではページミスによるコストがほぼ消失し、性能が劇的に向上します。
設定環境変数
GPU と int8 スパインはデフォルトで自動的に選択されます。以下の変数でオーバーライド可能です。
| 変数 | デフォルト | 説明 |
|---|---|---|
| | GPU (mps) があれば使用、なければ CPU |
| | int8 (推奨) または bf16 |
| | n-gram 推測 (ロスレス) |
| | テンプレートレイヤーの再利用 |
/ | | バックグラウンド読み込みフラグ |
| | fp16 計算(再現性なし) |
/ | | RAM バジェット上書き |
| | キャッシュと重みの保存先 |
要件
- ハードウェア: Apple Silicon Mac (M1 Max, 64 GB RAM でテスト済み)。
- ツール: Xcode Command Line Tools (
)。xcode-select --install - Python: バージョン 3.12 以降。
- ディスク容量: フルインストールで ~1.7 TB、ストリーミングで ~215 GB。
- ネットワーク: Hugging Face にアクセス可能(初期フェッチ時)。
技術的特徴と最適化
- 結合されたエキスパートフェッチ: 単一の範囲リクエストで全エキスパートを取得し、通信回数を削減。
- Raw-Span ディスクキャッシュ: コンテナ形式の解析なしでシャードバイトを直接使用。
- 並列エキスパート読み込み:
とpread
を使い、ページフォールトを回避(コールドリード速度向上)。F_NOCACHE - ダブルバッファされたレイヤー読み込み: 計算中同時に次のスパインデータを読み込み。
- Fused MXFP4 デ量子化 + GEMV: NEON カーネルによるビット正確な高速処理。
- カスタム Metal デ量子化カーネル: 標準 MPS の 43 GB/s から 297 GB/s へ大幅改善。
- n-Gram 推測: サフィックスマッチングでドラフトを作成し、2 トークン単位で検証(ロスレス)。
機能しなかったこと (失敗エントリ)
| アイデア | 結果・発見 |
|---|---|
| ランク低下したエキスパート近似 | K3 は密集してトレーニングされており、ランク 128 で十分だった。 |
| エキスパートファイル圧縮 (APFS, zstd, lz4) | MXFP4 データはエンタロピーが高く、意味のある圧縮が得られなかった。 |
| HTTP/2 を使用したフェッチ | HTTP/1.1 keep-alive よりも遅かった。 |
| MTP 自己推測 | K3 モデルは MTP ヘッドを提供していない。 |
| デフォルト fp16 | ロジカル値のノイズで出力が変化する恐れがある。 |
これからの可能性
- Metal エキスパートカーネル: プロトタイプ化済み(非 CUDA/PyTorch 依存)。
- 高品質な評価ベンチマーク: 公式 API に対する平均 NLL を測定するハネスの作成。
- ネイティブエンジン:
の精神に基づく独自エンジンの実装。ds4
お礼とクレジット
Deltafin は以下のオープンソースプロジェクトに大いに依存しています:
- colibri (JustVugg, Apache-2.0): 大規模 MoE を RAM で動作させる技術、シャード変換ノウハウ。
- ds4 / DwarfStar: エキスパートストリーミング設計、品質メソッドロジ。
- Moonshot AI: Kimi K3 の重み公開、長文脈対応のキミ・デルタ・アテンション設計。
- flash-linear-attention: 移植された計算最適化セマンティクス。
- llama.cpp / ggml: カーネル内デ量子化および MXFP4 ハンドリングの技術基盤。
ライセンス情報:
- Deltafin の独自コードは MIT ライセンス。
- Kimi K3 の重みとコードは Moonshot AI のライセンス条項に従ってください(Deltafin は Moonshot と無関係です)。