Kimi K3-in-C:讓 2.78 兆參數模型在 8GB RAM CPU 上跑起來的 I/O 藝術

作者 github.com

這是一個極端追求記憶體效率的推理引擎,透過將 1.56 TB 的 Kimi K3 模型透過權重串流(Streaming)與 MXFP4 量化,實現僅需 8GB RAM 即可在單機 CPU 上運行。其核心並非計算突破,而是對 I/O 與記憶體佈局的精準控制。

Kimi K3-in-C:讓 2.78 兆參數模型在 8GB RAM CPU 上跑起來的 I/O 藝術

這是一個非常硬核的 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。


技術亮點

  1. 純 C99 實現:沒有依賴 PyTorch, ONNX 或任何重量級框架,甚至沒有使用 BLAS 庫。整個引擎編譯後僅 176 KB。

  2. O_DIRECT 讀取:為了繞過作業系統的頁快取 (Page Cache) 減少開銷,直接從 NVMe 硬碟讀取資料,這在高速硬碟上反而更快。

  3. 確定性輸出:無論你給它 8GB 還是 224GB 記憶體,輸出結果在位元等級上完全一致。記憶體增加僅能提升速度,不會改變答案。

  4. 嚴格的數值契約:為了確保 AVX2 加速路徑與純 C 路徑結果一致,作者禁用了一些編譯器優化 (如 FMA 合併),確保計算順序絕對固定。

適合誰使用?

這個專案不適合追求推理速度的人(在 8GB 模式下每秒僅能產生極少 Token),它適合:

1 想研究巨型模型權重佈局與 I/O 優化的工程師。

2 需要在極低資源環境下驗證模型輸出正確性的研究員。

3 對純 C 語言實現深度學習算子感興趣的底層開發者。


實務限制與導入風險

  1. 速度極慢:這是一個 I/O 密集型專案。80% 的時間花在等待硬碟讀取權重。如果你的硬碟不是高速 NVMe,速度會慢到無法忍受。

  2. 儲存空間要求高:雖然記憶體只要 8GB,但你必須準備約 1.7 TB 的硬碟空間來存放權重檔案。

  3. 僅支援 Linux x86-64:使用了大量 Linux 特有的系統呼叫 (如 O_DIRECT) 與 CPU 指令集 (AVX2)。

成熟度判斷

這是一個高度工程化但屬於實驗性質的專案。它擁有極其嚴格的測試套件 (Gates),包含對比 PyTorch 的數值驗證,證明了其正確性。但它缺乏對話模板 (Chat Template)、採樣演算法 (Sampling) 與 GPU 加速,目前僅能作為一個高效能的推理原型,而非可直接投入生產的服務引擎。