Colibrì: 在消費級硬體上執行 GLM-5.2 744B MoE
Colibrì: 在消費級硬體上執行 GLM-5.2 744B MoE
Colibrì 能夠在僅約 25 GB RAM 的消費級硬體上執行具有 744B 參數的 GLM-5.2 Mixture-of-Experts (MoE) 模型。它透過僅將模型的密集部分保留在記憶體中,並根據需求從磁碟串流路由專家(routed experts)來實現這一點。
架構:串流 MoE 與記憶體管理
Colibrì 利用了 Mixture-of-Experts 模型的架構特性,即每個 token 僅會啟動總參數的一小部分。對於 GLM-5.2,雖然模型擁有 744B 參數,但每個 token 僅啟動約 40B 參數,且在 token 之間僅有 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 中。 - OS Page Cache: 引擎利用作業系統的 page cache 作為第二層快取。
技術實作細節
Colibrì 使用純 C 語言編寫(在 glm.c 中約 1,300 行),且零依賴,避免了使用 BLAS、Python(在執行時)和 GPU 加速。
關鍵特性
- MLA Attention: 實作了具有壓縮 KV-cache 的 Multi-head Latent Attention (MLA),將每個 token 的記憶體需求從 32,768 個 floats 降低至 576 個 floats(減少了 57 倍)。
- MTP Speculative Decoding: 使用 GLM-5.2 原生的 Multi-Token Prediction (MTP) head。當該 head 被量化為 int8 時,可達到 39–59% 的接受率,從而實現每次前向傳播(forward pass)產生 2.2–2.8 個 tokens。
- Integer-Dot Kernels: 利用 AVX2
maddubs進行 int8 矩陣乘法,速度比標準實作快 1.4–2.5 倍。 - Weight Absorption: 在解碼過程中採用 DeepSeek 風格的技巧進行 MLA 權重吸收,以消除每個 token 的 k/v 的重建過程。
- Quantization: 支援 int8、packed int4 和 packed int2 核心,並具備每行縮放(per-row scales)與使用時解量化(dequantization-on-use)功能。
效能與硬體限制
效能主要受限於磁碟讀取速度(「磁碟天花板」)。一個冷啟動的 token 需要讀取約 11 GB 的專家數據。
實測基準測試
| 硬體 | 磁碟速度 | 配置 | 效能 |
|---|---|---|---|
| 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: 支援 OpenMP 與 AVX2 的 gcc。
- RAM: 最少 16 GB。
- Storage: 本地 NVMe (ext4) 磁碟,需有約 370 GB 的可用空間以存放 int4 模型。
關鍵考量因素
SSD 磨損
由於冷啟動涉及大量的隨機讀取(約 11 GB/token),且作業系統的 page cache 可能會產生寫入,頻繁使用可能會加速消費級 SSD 的磨損。建議使用者監控硬碟健康狀況。
量化精度
雖然引擎已針對該架構透過 transformers oracle 驗證為 token-exact,但由於在消費級硬體上進行完整運行的時間極長,目前尚未對 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 個 token 的速度在實用性上的價值,而其他人則認為對於長時間運行的非同步任務,這樣的速度仍然是可行的。社群提供的技術建議包括使用 RAID0 NVMe 陣列來增加頻寬,或利用 Intel Optane 記憶體來彌補 SSD 與 RAM 速度之間的差距。