Colibrì: コンシューマー向けハードウェアで GLM-5.2 744B MoE を実行する
Colibrì: コンシューマー向けハードウェアで GLM-5.2 744B MoE を実行する
Colibrì は、約 25 GB の RAM を備えたコンシューマー向けハードウェア上で、744B パラメータの GLM-5.2 Mixture-of-Experts (MoE) モデルの実行を可能にします。これは、モデルの密な部分のみをメモリに常駐させ、ルーティングされたエキスパートをディスクからオンデマンドでストリーミングすることで実現されます。
アーキテクチャ: ストリーミング MoE とメモリ管理
Colibrì は、トークンごとに全パラメータのわずかな割合のみがアクティブになる Mixture-of-Experts モデルのアーキテクチャ特性を活用しています。GLM-5.2 の場合、モデルは 744B パラメータを持ちますが、トークンごとにアクティブになるのは約 40B のみであり、そのうち 11 GB 分(ルーティングされたエキスパート)のみがトークン間で変化します。
メモリ分割
- Resident RAM: attention、shared experts、および embeddings(約 17B パラメータ)を含む密なコンポーネントは、int4 量子化で保存され、RAM に常駐し、約 9.9 GB を占有します。
- Disk Storage: 21,504 個のルーティングされたエキスパート(int4 でそれぞれ約 19 MB)はディスクに保存され、合計で約 370 GB になります。
ロードメカニズム
ディスク I/O のレイテンシを軽減するため、Colibrì はいくつかの最適化戦略を実装しています。
- LRU Cache: レイヤーごとの Least Recently Used (LRU) キャッシュが、RAM 内のエキスパートの常駐を管理します。
- Async Readahead: エンジンは
WILLNEEDを使用して、現在のブロックが CPU によって処理されている間に、次のエキスパートのブロックを読み込みます。 - Learning Cache: エンジンはエキスパートのルーティングパターンを
.coli_usageファイルに記録し、起動時に最も頻繁に使用される「ホット」なエキスパートを予備の RAM に自動的に固定(pin)することができます。 - OS Page Cache: エンジンは OS のページキャッシュを二次的なキャッシュ層として利用します。
技術的な実装の詳細
Colibrì は、依存関係ゼロの純粋な C 言語(glm.c 内の約 1,300 行)で記述されており、BLAS、Python(実行時)、および GPU 加速を回避しています。
主な機能
- MLA Attention: 圧縮された KV-cache を持つ Multi-head Latent Attention (MLA) を実装しており、メモリ要件をトークンあたり 32,768 個の float から 576 個の float に削減(57倍の削減)しています。
- MTP Speculative Decoding: GLM-5.2 のネイティブな Multi-Token Prediction (MTP) ヘッドを使用します。このヘッドを int8 に量子化すると、39–59% の受理率を達成し、1 パスあたりの 2.2–2.8 トークンを生成します。
- Integer-Dot Kernels: int8 行列演算(matmuls)に AVX2
maddubsを使用しており、これは標準的な実装よりも 1.4–2.5倍高速です。 - Weight Absorption: デコード中に MLA の重みを吸収する DeepSeek スタイルのトリックを使用し、トークンごとの k/v 再構築を排除します。
- Quantization: per-row scales と dequantization-on-use を備えた int8、packed int4、および packed int2 カーネルをサポートしています。
パフォーマンスとハードウェアの制約
パフォーマンスは主にディスクの読み取り速度(「ディスクの天井」)によって制限されます。コールドトークンには、約 11 GB のエキスパートの読み取りが必要です。
測定されたベンチマーク
| Hardware | Disk Speed | Configuration | Performance |
|---|---|---|---|
| WSL2, 12-core, 25GB RAM | ~1 GB/s | Default | 0.05–0.1 tok/s |
| WSL2, 24-thread, 24GB RAM | 1.96–2.74 GB/s | --topp 0.7 |
0.11 tok/s |
| Apple M5 Max, 18-core, 128GB RAM | 14.2 GB/s | MTP Off | 1.06 tok/s |
| ThreadRipper PRO 5975WX, 128GB RAM | 7 GB/s | --topp 0.7 |
0.44 tok/s |
ハードウェア要件
- OS: Linux または WSL2。
- CPU: gcc と OpenMP および AVX2 サポート。
- ストレージ: ローカル NVMe (ext4) で、int4 モデル用に約 370 GB の空き容量。
重要な考慮事項
SSD の摩耗
コールドスタート時には大量のランダム読み取り(トークンあたり約 11 GB)が発生し、OS のページキャッシュが書き込みを生成する場合があるため、重い使用はコンシューマー向け SSD の摩耗を加速させる可能性があります。ユーザーはドライブの健康状態を監視することをお勧めします。
量子化の精度
エンジンは、アーキテクチャに関して transformers オラクルに対してトークン単位で正確であることが検証されていますが、744B モデルの int4 量子化に関連する特定の精度低下については、コンシューマー向けハードウェアでのフルランの実行に極端な時間がかかるため、まだ完全にはベンチマークされていません。
コミュニティの洞察と反論
ユーザー間の議論は、ストリーミング・アプローチの概念的な素晴らしさと、実用的な制限の両方を浮レかし彫りにしています。
"On small-RAM machines the RAM cap, not the disk, is the binding constraint...
--topp 0.7alone bought a clean 1.6× end-to-end speedup."
一部のユーザーは、1 トークン/秒未満の速度は実用的な有用性に疑問を疑問を呈していますが、他のユーザーは、長時間実行される非同期タスクには、そのような速度でも十分実用可能であると示唆しています。コミュニティからの技術的な提案には、RAID0 NVMe アレイを使用して帯域幅を増やしたり、Intel Optane メモリを使用して SSD と RAM の速度差を埋めたりすることが含まれます。