這是一個非常硬核的 C 語言專案,目標是挑戰極限:讓一個擁有 2.78 兆參數、權重檔案高達 1.56 TB 的巨型模型 Kimi K3,在僅有 8GB 記憶體的普通 CPU 電腦上跑起來。
對於很多工程師來說,最直覺的反應是:這不可能。即便權重全部量化,1.56 TB 的資料也不可能塞進 8 GB 的 RAM。但這個專案證明了,只要你對資料在硬碟與記憶體之間如何移動有絕對的控制權,就能打破這個限制。
這個專案解決了什麼問題?
它解決了巨型模型對硬體容量的絕對依賴。通常跑這種模型需要昂貴的 GPU 集群,而這個 repo 透過一套串流機制,將記憶體需求從數 TB 降低到 GB 等級,讓開發者可以在沒有 GPU 的環境下驗證模型邏輯。
核心做法:四次記憶體削減
作者將記憶體需求從 5.56 TB (bf16 原始大小) 逐步削減到 8.24 GB,過程分為四個階段:
第一階段:利用 MXFP4 量化。模型權重在出廠時就已經是 4-bit 的 MXFP4 格式,這直接將 5.56 TB 降至 1.56 TB。
第二階段:利用 MoE 的稀疏性。Kimi K3 是混合專家模型 (MoE),每個 Token 只需要觸發 896 個專家中的 16 個。這意味著 93% 的權重在大部分時間都處於睡眠狀態,不需要常駐記憶體。
第三階段:區分常駐集與串流集。將模型分為 Dense Trunk (核心幹道) 與 Routed Experts (路由專家)。專家部分從不常駐,而是根據需求從硬碟即時讀取。
第四階段:幹道串流化。即使是 113 GB 的核心幹道,也不全部載入,而是採用固定前綴加上環形緩衝區 (Ring Buffer) 的方式,一層一層地從硬碟讀入計算,將記憶體需求壓低至 8 GB。
技術亮點
純 C99 實現:沒有依賴 PyTorch, ONNX 或任何重量級框架,甚至沒有使用 BLAS 庫。整個引擎編譯後僅 176 KB。
O_DIRECT 讀取:為了繞過作業系統的頁快取 (Page Cache) 減少開銷,直接從 NVMe 硬碟讀取資料,這在高速硬碟上反而更快。
確定性輸出:無論你給它 8GB 還是 224GB 記憶體,輸出結果在位元等級上完全一致。記憶體增加僅能提升速度,不會改變答案。
嚴格的數值契約:為了確保 AVX2 加速路徑與純 C 路徑結果一致,作者禁用了一些編譯器優化 (如 FMA 合併),確保計算順序絕對固定。
適合誰使用?
這個專案不適合追求推理速度的人(在 8GB 模式下每秒僅能產生極少 Token),它適合:
1 想研究巨型模型權重佈局與 I/O 優化的工程師。
2 需要在極低資源環境下驗證模型輸出正確性的研究員。
3 對純 C 語言實現深度學習算子感興趣的底層開發者。
實務限制與導入風險
速度極慢:這是一個 I/O 密集型專案。80% 的時間花在等待硬碟讀取權重。如果你的硬碟不是高速 NVMe,速度會慢到無法忍受。
儲存空間要求高:雖然記憶體只要 8GB,但你必須準備約 1.7 TB 的硬碟空間來存放權重檔案。
僅支援 Linux x86-64:使用了大量 Linux 特有的系統呼叫 (如 O_DIRECT) 與 CPU 指令集 (AVX2)。
成熟度判斷
這是一個高度工程化但屬於實驗性質的專案。它擁有極其嚴格的測試套件 (Gates),包含對比 PyTorch 的數值驗證,證明了其正確性。但它缺乏對話模板 (Chat Template)、採樣演算法 (Sampling) 與 GPU 加速,目前僅能作為一個高效能的推理原型,而非可直接投入生產的服務引擎。