7440億パラメータのニューラルネットワークを普通のPCで実行する方法
GLM-5.2(7440億パラメータ)やKimi K3(2.8兆パラメータ)のようなモデルのページを開くと、最初に思うことはシンプルです:H100 GPUを何枚も搭載したサーバーラックが必要だと。しかし、そのようなリソースが手元にない場合、残された選択肢はAPI呼び出しに課金することだけです。
最近、JustVugg/colibriプロジェクトを見つけました。著者は純粋なC言語で第三方依存のない軽量な推論エンジンを書きました。このエンジンは、24GBのRAM搭載の普通のデスクトップやノートPCで、高速なSSDから直接重みを読み込みながら、大規模なMoEモデルを実行することに成功しています。
なぜ動くのか
Mixture-of-Experts(MoE)アーキテクチャは、1つのトークンを生成するためにモデル全体が必要ないように設計されています。例えば、GLM-5.2の7440億パラメータのうち、約400億パラメータだけがアクティブです。さらに、トークンごとに見ると、ルーターが選択したエキスパートに対応する約11GBの重みだけが変化します。
370GBのモデルをビデオメモリに押し込めようとする代わりに、エンジンはデータをストレージ階層に分散配置します:
- モデルの密部分(埋め込み、アテンション、共有レイヤー)はint4量子化で約9.9GBで、RAMに常駐します。
- 約20,000のエキスパートは高速なNVMe SSD上に配置され、非同期I/Oでオンデマンドロードされます。
- 頻繁に使用されるエキスパートはRAMまたはVRAMのLRUキャッシュに配置されます。
本質的には、これはニューラルネットワークの重み専用のJITコンパイラのように動作します。エンジンはアクセス統計を追跡し、ホットブランチを記憶し、現在のコンテキストに必要なエキスパートのみをキャッシュします。
エンジンの仕組み
コードベースはコンパクトです。コアはC言語で書かれており(各モデルファミリーは独自のファイルに分離されています。例えばGLM用のファイルはc/colibri.c)、gccまたはclang(OpenMPサポート付き)でコンパイルされます。巨大なフレームワークや巨大なランタイムは不要です。Pythonは一度だけの重み変換とWebインターフェースラッパーにのみ使用されます。
各トークンを生成する際、エンジンはいくつかのステップを実行します:
- 別のプリフェッチスレッドで1レイヤー先のルーティングを計算します。ルーターは約71%の精度で必要なエキスパートの予測を行い、ディスク読み込みが計算と並行して実行されます。
- 同一エキスパートへのリクエストをバッチにマージし、重複読み込みを排除します。
- 各エキスパートの3つの行列を単一のシステムコールで読み込みます。
- ヒット統計を履歴ファイルに保存し、以降実行時にホットレイヤーをメモリに事前にピン留めします。
2つのストレージデバイスのサポートは興味深い実装です。重みのコピーを2つの異なるSSDに分散配置すると、エンジンは各ディスクの読み取り速度に比例してエキスパートのリクエストを分散します。9 GB/sと3 GB/sの速度を持つ2台のドライブの組み合わせると、読み取り速度が約3分の1速くなります。
計算アクセラレーションには、CUDA、Apple Siliconチップ向けMetal、Vulkanがサポートされています。Vulkanバリアントは、AMD RX 580のような古いGPUでも動作します。RADVドライバーを通じて動作し、ベンダーはずっと前に最新のROCmのサポートを終了しています。
パッケージにはエキスパートのアクティビティを可視化するWebダッシュボードが含まれています。Atlasページでは、何千ものエキスパートの3Dマップを回転させ、異なるグループがコード、法務トピック、外国語などをどのように処理するか観察できます。
実際の速度数値
奇跡はないので、速度はディスクスループットと利用可能なメモリによって制限されます。
プロジェクトのベンチマークでは、GLM-5.2モデルで以下の結果が記録されました:
- 25GB RAMとコールドキャッシュ搭載のノートPCでは、0.05〜0.1トークン/秒という控えめな速度です。遅いですが、モデルの応答は論理的な歪みがありません。
- 128GBのRAM搭載でディスクリートGPUなしのワークステーションでは、ウォームキャッシュで約1.8トークン/秒を達成します。
- モバイルRTX 5070 Ti搭載のノートPCは、GPUパイプラインにより1.07トークン/秒まで加速します。
- RTX 5090カード6枚搭載のサーバーは、エキスパートをビデオメモリに完全に常駐させ、5.8〜6.8トークン/秒を示します。
サポートされているモデル
ベースのGLM-5.2に加えて、著者はさらに4つのアーキテクチャのサポートを追加しました:
- Inkling (975B) — int4で密部分を実行するには約25GBのRAMと469GBのディスク容量が必要です。
- Kimi K3 (2.8T) — 1.6TBの巨大なモデルで、元のシャードからMXFP4ネイティブ重みを事前変換なしで直接読み取ります。
- DeepSeek V4 Flash (284B) — fp4/fp8形式で167GBの重みを使用し、16〜22GBのRAMが必要です。
- OLMoE (7B) — 8GBのRAMでクイック実験するための4GBの重みを持つコンパクトなバリアント。
実行方法
エンジンはLinux、macOS、Windows用のビルド済みバイナリとして配布されるか、ソースから1分でビルドできます:
ビルド後、Hugging Faceから目的のモデルの量子化重みをダウンロードし(例えば、GLM-5.2 int4は約372GB)、ターミナルでチャットを開始します:
ローカルサーバーとWebパネルを兼ねたOpenAI API互換のサーバーを起動したい場合は、以下を実行します:
起動前にメモリ分散を./coli planで確認し、ハードウェアテストを./coli tuneで実行する価値があります。
誰が有用と思うか
コンシューマーハードウェアでのディスク読み取りレイテンシのため、Colibrìは高負荷の本番環境には向かないでしょう。しかし、数百万円相当のサーバGPUを購入せずに、最高性能のオープンソースモデルの推論をローカルでテストしたい研究者、愛好家、開発者にとって素晴らしい発見です。コアコードはコンパクトで透明性が高く、I/Oや量子化に関する独自の実験のプレイグラウンドとしてエンジンが便利です。
関連プロジェクト