
2026/07/31 23:12
Kim i K3 を 29 GB のメモリで 0.50 トーク/秒の速度で使用する
RSS: https://news.ycombinator.com/rss
要約▶
Japanese Translation:
元の要約は強力かつ明確ですが、欠けている重要な制約(ストレージ速度、RAM ページングのリスク)および具体的な文脈(変換時間、ライセンス)を統合することで、「どのように実行するか」と主要なポイントから示唆される制限についてより包括的な概要を提供することが可能です。
改善された要約:
WASTE(Weight-Aware Streaming Tensor Engine)は、標準的なコンシューマーハードウェアに特化されたインフラなしで、Kimi K3 のような大規模モデルを実行するように設計された高パフォーマンス推論エンジンです。C で書かれており、サードパーティ製ランタイム依存関係はありません。通常はエンタープライズサーバーが必要とされる WASTE は、ディスクからエキスパートモジュールをストリーミングさせながら、モデルの幹(~27 GB)と最適化されたエキスパートキャッシュだけを RAM に保持することでこれを達成します。高度な圧縮を採用し、残差ベクトル量子化によって重みを 3 ビットに削減するとともに、長文脈(最大 100 万トークン)に対するメモリ使用量を大幅に削減するために線形注意法(KDA/MLA)を使用します。パフォーマンスはリソース構成に強く依存しています:~46 GB の RAM と内部 NVMe ストレージを備えた場合、~0.5 トークル/秒の最適な速度を実現しますが、システムが RAM を使い果たしてページングを引き起こした場合や、低速な外部 USB エンクロージャを使用している場合は、速度は著しく低下します(0.04 トークル/秒まで)。現在、ユーザーは M5 Pro での約 4.7 時間の変換プロセスを通じて、ツール使用、多ターン会話、画像分析など複雑なタスクをサポートする自己完結型コンテナに高度な AI ソリューションをデプロイできます。Apache 2.0 ライセンスの下で標準 C ライブラリのみを使用してマクロスプラットフォーム互換性を確保しており、以前は大規模データセンターに限定されていたモデルへのアクセスを民主化しています。
本文
WASTE(Weight-Aware Streaming Tensor Engine):重み感知ストリーミングテンソルエンジン
Kimi K3 モデル(パラメータ数 2.78 兆)を、コンシューマー向けノートパソコンで実行します。
$ waste run ~/models/k3.waste 'What is the capital of Italy?' waste: --budget を指定せず、使用可能メモリ 64.00 GB のうち 46.24 GB を使用(エキスパートキャッシュ:17.56 GB) イタリアの首都は**ローマ**です。 [トークン 16 個 / 所要時間 31.09 秒 / 速度 0.51 tok/s | エクスパートヒット: 3,357 / ミス: 20,195 = ヒットレート 14%]
概要
WASTE(Weight-Aware Streaming Tensor Engine) は、C 言語で記述され、サードパーティ製ランタイム依存関係なしの埋め込み可能な推論エンジンです。
基本原理
- モデルの幹線部分(trunk)をメモリ上に保持します。
- 選択されたエキスパート分のみを直接ディスクからストリーミング読み込みます。
- 残りの RAM を有界なエキスパートキャッシュとして活用します。
実証成果:Kimi K3 モデル(2.78 兆パラメータ)
完全オープンウェイトのモデルを、982 GiB のコンテナに変換し、64 GB RAM の MacBook Pro で動作させています。
- 速度: 0.49〜0.54 tokens/秒
- 特性: 蒸留・剪定・縮小されたバリエーションではありません。
| モデル | コンテナサイズ | 最小 RAM | 実測速度 |
|---|---|---|---|
| Kimi K3 2.78T | 982 GiB | 29.05 GiB | 0.49–0.54 tok/s |
| Kimi-Linear 48B | 19 GiB | 1.87 GiB | 10.7 tok/s |
モチベーションと立ち位置
設計思想
WASTE は、現在の主流なコンシューマシステムに RAM に収まらない大型モデル(K3)に対応するために記述されました。
- MoE 特性の活用: エキスパートミクセル(MoE)は各トークンあたり約 4% のみ活性化するため、アイドル状態の重みをすべてメモリに保持する必要はありません。「到達可能」なデータをディスク上配置し、読み込みコストを最小化します。
精度と速度
- 検証結果: PyTorch リファレンスに対し誤差 $3.6\times10^{-6}$、ビジョンタワーで $2.3\times10^{-6}$ の誤差です。
- 現状認識: 「速さが遅い(約 30 秒)」点は免罪符ではなく、公開されたデモとしての限界です。兆単位規模の NVMe ストリーミング実装例は他に存在せず、本リポジトリは「反証例を送ってほしい」という招待状です。
技術的な制約と解決策
- 計算 vs IO: IO が処理時間の 55% を占め、計算が 27% です。高速なディスクか RAM の多いマシンが必要で、カーネルパスの最適化だけでは不十分です。
- キャッシュ戦略: 「制御できないキャッシュ」は真のキャッシュではありません。エンジンが OS からメモリを回収される前に要求をやめるよう設計されています。
名前について(WASTE)
クラウドサービスにおける各トークンは「請求書代」と「データセンター電力代」で 2 回支払われます。「WASTE」は、この無駄を解消することを意味します(頭字語は後付け)。
必要な環境
- ディスク: モデル用(変換後コンテナ 982 GiB 想定。1 TB 以上の空き容量推奨)。
- ディスク: 変換用(一時ストレージとして追加の 1.42 TB が必要。使用後は解放可能)。
- RAM: K3 起動に最小 29.05 GB 必要。本実証では64 GB が推奨。
- ストレージ速度: コンテナは内部 NVMe に配置する必要があります(外部 USB は極端に遅く、生成に 13 秒もかかってしまいます)。
注意: 利用可能な RAM の窓が狭いです。約 46 GB を超えるとマシンがページング状態になりパフォーマンスが急落します。 テラバイトのモデルがない場合でも、
(19 GiB コンテナ)を起動可能です。Kimi-Linear-48B-A3B-Instruct
API と動作原理
自己完結型アーキテクチャ
- 依存関係:
とlibc
のみ。BLAS、ONNX、Python は不要。pthreads - 埋め込み可能: C ヘッダー (
) で定義された 26 個の公開関数(RAM セリング上限でのモデルオープン、生成、セッション保存等)を使用できます。src/waste.h
waste_cfg cfg; waste_cfg_init(&cfg); // RAM の予算を設定(46GB = 46ULL << 30) cfg.ram_budget_bytes = 46ULL << 30; waste_ctx *ctx; if (waste_open("/path/to/k3.waste", &cfg, &ctx) != WASTE_OK) return 1; waste_generate(ctx, ids, n, ¶ms, on_token, user); waste_close(ctx);
ポジショニングが速度を決定する
モデルは JSON マニフェスト、リジデントな幹線部分(27.28 GB)、エキスパートバンク(各レイヤーごと)に分割されます。
- 読み込み最適化: 各エキスパートへのアクセスコストは正確に 1 つの
です。pread - ページキャッシュバイパス: macOS (
)、Linux (F_NOCACHE
) などでカーネルキャッシュをバイパスし、メモリの汚染を防ぎます。O_DIRECT
エクスパート重みにおける「1 トークンのワーキングセット」
最も重要な指標はエキスパートキャッシュの容量です。K3 は各トークンあたり 92 レイヤーのうち 16 のエキスパート(計 17.0 GB)を使用します。
| バジェット (RAM) | エクスパートキャッシュ | ヒットレート | デコード速度 |
|---|---|---|---|
| 32 GB | 3.32 GB | 0% | 0.31 tok/s |
| 46 GB | 17.32 GB | 13% | 0.32 tok/s |
| 52 GB | 23.32 GB | 27% | 0.11–0.14 tok/s |
| 58 GB | 29.32 GB | 37% | 0.04 tok/s |
重要な発見: キャッシュを過剰に増やしても(52GB〜58GB)、マシンがページング状態になり速度が低下します。約 46 GBが実測上の最適解です。
リニアアテンションと吸収された KV キャッシュ
K3 は固定サイズの「Kimi Delta Attention(KDA)」と潜在空間(Latent)をキャッシュする MLA を組み合わせたハイブリッド構造を採用しています。
- 計算量削減: 潜在的なキャッシュ容量は 53 倍削減されます(4K コンテキストで 11.25 GB → 0.21 GB)。
- 長期コンテキスト: 拡大されたレイアウトが 360 GB を必要とする場合でも、潜在型では7.2 GBで動作します。
パフォーマンスと画像処理
Kimi K3 — 2.78 兆パラメータ(内部 NVMe)
| 項目 | 値 |
|---|---|
| 最小 RAM | 4K コンテキスト: 29.05 GB |
| リジデント・トランク | 27.28 GB |
| トークンあたりの読み込み | 17.0 GB(計算処理とオーバーラップ) |
| モデルロード | 20 秒 |
| プリフィル | チャンク方式 0.47 tok/s / 順次 0.29 tok/s |
| デコード | 0.49–0.54 tok/s(このマシンの最高速度) |
Kimi-Linear — 480 B パラメータ
- 最小 RAM: 1.87 GB
- デコード速度: 8 GB バジェットで 10.7 tok/s、キャッシュヒット率 78%。
画像処理(マルチモーダル対応)
K3 は 401M ViT (27 レイヤー) を内蔵し、画像をトークンとして扱います。
$ waste run ~/models/k3.waste 'What is in this picture?' --image landscape.png [landscape.png: 192 image tokens]
- コスト構造: 画像自体は「テキストと同じ長さ」として価格付けされますが、画像のエンコード(プリフィル)で大部分の時間が消費されます。生成トークン数には含まれず、別途時間がかかります。
- 機能:
コマンドでチャット中に画像を添付可能。27 層の ViT は画像存在時にのみ読み込まれます。/image FILE
実装とインストール
ビルド環境
- C11 コンプコンパイラ、make
- 実行時:BLAS、CUDA、Python は不要。
git clone https://github.com/sqliteai/waste && cd waste make # libwaste.a, waste, libwastevq make check # 新規クローンではテスト 23 通パス、11 通スキップ(モデル不要)
Kimi K3 の変換プロセス
Python を使用して 96 シャード(1.42 TB)からコンテナにフォーマットし直します。
# 1. ダウンロード(再開可能) tools/fetch_weights.sh --dest /Volumes/staging/k3 # 2. コンテナへの変換 uv run --with torch --with safetensors python tools/convert.py \ --src /Volumes/staging/k3 \ --out ~/models/k3.waste --jobs 3
- 所要時間: M5 Pro (64 GB RAM) で約 4.7 時間。
- 注意: ダウンロードは断絶に弱いので、信頼できる環境で行ってください。
実行方法
コマンドライン(CLI)
# 生成(終了トークンまたは 128 トークンまで) waste run ~/models/k3.waste "The capital of France is" -n 32 # チャット(マルチターン、状態保持あり) waste chat ~/models/k3.waste # 次のトークン分布予測 waste eval ~/models/k3.waste "2 + 2 =" --top-k 5 # バジェット設定(推奨:46GB) waste plan ~/models/k3.waste --budget 46G
オプション説明:
: メモリ予算。指定しない場合、デフォルト値(物理 RAM の 8/7 以下かつワーキングセットを満たす最大値)が適用されます。--budget
: ディスク上の CRC チェックを有効にする(スループットが約 1〜5% 低下するが安全性は向上)。--verify
サーバー提供
OpenAI API 互換 HTTP サーバーを提供します。
make libwaste.dylib # Linux では libwaste.so python3 -m serve ~/models/k3.waste --port 8000 curl localhost:8000/v1/chat/completions \ -H 'Content-Type: application/json' \ -d '{"model":"k3","messages":[{"role":"user","content":"Why is the sky blue?"}]}'
リポジトリ構造とドキュメント
| フォルダ | 内容 |
|---|---|
| src/ | エンジン本体(C コード、依存関係なし) |
| cli/ | CLI クライアント |
| serve/ | OpenAI 互換サーバー(ctypes で C ライブラリを呼ぶ) |
| tools/ | モデル変換と検証用の Python スクリプト |
| docs/ | フォーマット仕様、測定結果、学習記録 () |
| tests/ | 34 チェック、PyTorch オラクルとの差分テスト |
今後の予定と制限事項
- 機能凍結: API は現在の設計で固められています。
- AVX-512: コンパイル時サポートしていますが、現時点では AVX2 にフォールバックしています(x86 emulate 環境での挙動)。
- チェックサム:
フラグなしではオフ(スループット優先)ですが、信頼性の高いディスクにコピー後には有効にすることを推奨します。--verify
ライセンス
Apache License 2.0 — Copyright 2026 SQLite Cloud, Inc.