colibri 教學:用純 C 引擎在本機跑 744B MoE 模型,16GB RAM 也跑得動(2026 完整指南)

colibri(JustVugg/colibri)是一個 2.9 萬 stars 的開源推論引擎,用純 C 寫成、零相依,把 VRAM/RAM/NVMe 當成同一套記憶體階層,把 744B 到 2.8T 參數的前沿 MoE 模型的專家權重放在硬碟上、需要時才串流載入。本文提供完整安裝步驟(預編譯或原始碼編譯)、模型準備、實際指令、效能調校參數、各硬體實測 tok/s 對照表,以及與 Ollama、llama.cpp、vLLM 的定位比較。

  • Dennis
  • 11 分鐘閱讀
colibri 教學:用純 C 引擎在本機跑 744B MoE 模型,16GB RAM 也跑得動(2026 完整指南)

**colibri 是一套用純 C 寫成的開源 MoE 推論引擎,讓你在 16GB RAM 的普通電腦上跑 744B 參數的 GLM-5.2 這類前沿模型。**它不靠 GPU 堆料,而是把「模型必須塞進記憶體」這個前提拆掉:注意力與共享專家留在 RAM,19,456 個路由專家放在 NVMe 上串流讀取,用類似 JIT 的思維——只載入路由證明會用到的那幾個。

專案位置:https://github.com/JustVugg/colibri(截至 2026-09-13:29,504 stars、3,215 forks、Apache-2.0、建立於 2026-07-01,持續日更)。官網與文件:https://justvugg.github.io/colibri

為什麼這個專案值得看?

大部分人的推論引擎選擇是 Ollama(好用)、llama.cpp(CPU 友善)、vLLM(GPU 吞吐)。但這三個工具都有同一個隱含前提:模型的權重放得下。當模型進入「744B 稀疏 MoE」這個量級,前提就不成立了——就算你有 24GB 顯卡,也裝不下 372GB 的權重。

colibri 解的是這個問題:它把儲存、RAM、VRAM 當成同一個推論階層(README 稱之為 AI memory multitiering),並把放置決策(placement)與模型語意嚴格切開。它反覆強調一句話,這也是我覺得整個專案最值得信任的地方:

記憶體不足只會降低速度,不會偷偷改動模型精度或 router 語意

以 744B 的 GLM-5.2 為例:每個 token 只啟動約 40B 參數,而其中真正「每 token 都在變」的只有約 11GB 的路由專家。所以模型不需要「裝得下」,它只需要被擺對位置

部位參數量放哪裡大小(int4)
稠密部分(attention、共享專家、embedding)~17B常駐 RAM~9.9 GB
路由專家(75 層 × 256 + MTP head,共 19,456 個)~763BNVMe,依路由串流~370 GB
熱門專家快取動態RAM / VRAM 分層依你的記憶體自動規劃

引擎處理每一個 token、每一層時都走同一條五步路徑。放置決策只決定速度,不改變 router 的決策或權重精度——這是這個專案最重要的設計約定:

flowchart TD
    A["使用者送出 token"] --> B["Router 選出本層需要的專家"]
    B --> C["Batch-union:同一層只讀一次"]
    C --> D["專家住在哪一層?"]
    D --> E["VRAM 命中:GPU 直接計算"]
    D --> F["RAM 命中:CPU 從記憶體計算"]
    D --> G["磁碟未命中:非同步 pread 載入"]
    G --> H["寫入 LRU 快取與學習式 hot-store"]
    H --> F
    E --> I["輸出並更新路由熱度"]
    F --> I
步驟發生什麼事誰在決定你可以調的旋鈕
1. RouteRouter 選出這一層要用的專家(top-k)模型本身(語意不可改)
2. Union同一批次的位置一起路由,同一個專家只讀一次(batch-union)引擎PIPE=1
3. Place判斷專家現在住在哪一層:VRAM → RAM → NVMe引擎的放置規劃器--ramCUDA_EXPERT_GBPIN_GB
4. Overlap磁碟未命中時,非同步 pread 與已常駐專家的計算重疊;PILOT=1 以前視預取下一層專家(路由具 71.6% 可預測性)引擎DIRECT=1PILOT=1
5. Learn把路由熱度寫進 .coli_usage,更新 per-layer LRU 與學習式 pinned hot-store引擎(用得越久越快)./coli tune

核心技術:把權重當成可以「即時編譯」的資料

colibri 的設計類比是「權重的 JIT」:編譯器不會編譯整支程式,只編譯實際跑到的熱路徑;同樣地,這個引擎不用把 744B 參數全部常駐,而是靠可量測的路由結構來決定誰該進哪一層快取。主要機制:

  • 三層放置:VRAM、RAM、NVMe 只是同一份權重的不同層級;放到哪一層只影響速度。
  • 學習式快取:引擎會記錄「你的工作負載」路由到哪些專家(.coli_usage,每輪更新),自動把最熱的專家 pin 在快記憶體——用得越久越快
  • Router lookahead(PILOT=1:實驗量測路由在一層之前有 71.6% 可預測性,用這一層的前置時間去預取下一層的專家。
  • I/O 當第一級公民:專家的三個矩陣相鄰存放、一次 pread 讀完;有界的非同步 I/O pool(PIPE=1)讓讀取與計算重疊;O_DIRECTDIRECT=1)繞過 page cache,在 DRAM 快取的磁碟上實測 decode +34%(某台 GB10 上 iobench 由 4.25 GB/s 提升到 9.69 GB/s)。
  • 雙 SSD 鏡像:專家讀取是唯讀的,所以你可以把模型複製一份到第二顆 SSD,引擎以確定的 hash 依兩顆磁碟實測頻寬分配讀取。9 GB/s + 3 GB/s 的組合,讀取速度比只用快的那顆快約 33%
  • 壓縮的 KV 狀態:MLA attention 的 KV 狀態從每 token 32,768 個 float 壓到 576 個(縮小 57 倍),而且會持久化到 .coli_kv,重開對話不必重新 prefill。
  • 投機解碼(MTP):GLM-5.2 原生 MTP head 每輪可賺到 2.2–2.8 tokens/forward;前提是 head 必須是 int8(int4 head 的接受率會掉到 0–4%)。

支援哪些模型?

目前有九個家族、每個家族各自是一支 C 檔(c/colibri.cc/kimi_k3.c…),共用同一組 header 與 coli chat / serve / web 前端:

模型家族總參數 / 啟用磁碟需求RAM 需求GPU
OLMoE(AI2)7B / 1B~7 GB8 GB不需要
GLM-5.2 / 5.3(Z.ai)744B / 40B~372 GB16 GB 起,24 GB 舒適不需要
GLM-5.3-Flash(含視覺)321B / 40B~195 GB25 GB不需要
Inkling(Thinking Machines)975B / 41B~469 GB25 GB(int4 稠密版)不需要
Kimi K3(Moonshot)2.8T / 104B~1.6 TB32 GB+不需要
DeepSeek V4 Flash284B / 13B~167 GB(REAP 150B 版 ~85 GB)16 GB 起,32 GB 舒適選配(GTX 10 系列以上即可)
DeepSeek V4.1 Flash(含視覺)552B / 16B~203 GB24 GB 級選配
Qwen3.8-Flash-Next125B + 51B n-gram / 6B~185.5 GB16 GB 起不支援(僅 CPU)
Qwen3.6-35B-A3B35B / 3B~20 GB24 GB選配(兩張 8GB 卡實測 7 倍加速)

重點:沒有一個模型需要 GPU。 GPU 只會讓它更快,真正的速度上限是你的磁碟——專家是從磁碟串流出來的。

實測速度對照表(官方 benchmark)

同一顆引擎、同一個 int4 容器,差別只在「專家住在哪一層」:

硬體decode 速度備註
6× RTX 5090(專家全常駐)5.8–6.8 tok/sTTFT ~13 秒;另一份實驗記錄 6.84 tok/s
128 GB RAM 純 CPU 桌機~1.8 tok/s(暖機後)沒有 GPU
單張 RTX 5070 Ti 筆電1.07 tok/s走 GPU 常駐管線
25 GB 開發機(原始開發環境)0.05–0.1 tok/s(冷啟動)誠實的底線:磁碟 1 GB/s、每 token 讀 ~11 GB
Qwen3.6-35B-A3B + 兩張 8GB 卡1.44 → 10.05 tok/s(7.0×)CUDA 專家分層,輸出與 CPU 路徑 bit-identical

參考值:模型在磁碟上 ~370 GB、常駐 RAM 9.9 GB、載入約 30 秒、聊天時峰值 RSS ~20 GB(自動上限)、冷啟動每 token 讀約 11 GB。

先講清楚:這不是「快」。 這是一台成本不到一顆 H100 風扇的機器,正確回答一個 744B 前沿模型的問題。接受了這件事,這個專案才看得懂。

安裝:兩條路

路線 A:下載預編譯檔(不用編譯器)

Releases 頁面 抓符合平台的壓縮檔(Linux / macOS / Windows 都有):

mkdir colibri && tar xzf colibri-v1.8.0-linux-x86_64.tar.gz -C colibri && cd colibri
python3 coli info                         # 顯示 engine ready ✓ 就完成

只需要另外安裝 Python 3(coli 啟動器與 API gateway 是 Python 腳本),引擎本身是純 C、零相依。Windows 使用者解壓後雙擊 coli.cmd 即可。

路線 B:從原始碼編譯(想榨出本機 CPU 極限,或要改引擎)

# Ubuntu / Debian
sudo apt update && sudo apt install -y build-essential git python3

git clone https://github.com/JustVugg/colibri.git && cd colibri/c
./setup.sh

setup.sh 會檢查 gcc/OpenMP、編譯並跑自我測試,看到 engine self-test: 32/32(或 30–32/32)就是正常。ARM64(AWS Graviton、Ampere、Raspberry Pi 64-bit)可直接編譯,沒有 ARM 專屬旗標;macOS 需要 xcode-select --installbrew install libomp

取得模型:務必用 gs64 容器

官方預轉好的 GLM-5.2 int4 容器在 Hugging Face,約 372 GB,請放在快的磁碟:

# 建議:mastouri/GLM-5.2-colibri-int4-g64-with-int8-mtp
# 注意兩件事:
#   1) 一定要用 group-scaled (gs64) 版本,舊的 per-row int4 容器品質差約 9pp,
#      而且會造成 think-mode 迴圈與永不停止的生成(issue #455)
#   2) MTP head 必須是 int8,int4 會讓投機解碼接受率掉到 0~4%(issue #8)

想自己轉也行,而且是「可中斷續跑」的單一指令,過程不需要同時放下 756 GB:

./coli convert --model /nvme/glm52_i4     # 逐 shard 下載+轉換,只跑一次

跑起來:常用指令

COLI_MODEL=/nvme/glm52_i4 ./coli doctor            # 唯讀健檢:環境、模型檔、權限
COLI_MODEL=/nvme/glm52_i4 ./coli plan              # 先看它打算怎麼擺放 VRAM/RAM/磁碟
COLI_MODEL=/nvme/glm52_i4 ./coli chat              # 進入 TUI 對話
COLI_MODEL=/nvme/glm52_i4 ./coli chat --topp 0.85  # 磁碟瓶頸機器推薦:少讀、品質不變
./coli serve --model /nvme/glm52_i4                # OpenAI 相容 API + 網頁儀表板(無瀏覽器)
./coli web   --model /nvme/glm52_i4                # 同上,並自動開瀏覽器
COLI_MODEL=/nvme/glm52_i4 ./coli tune              # 量測並存下這台機器最快的安全參數

網頁儀表板值得一看:它會顯示即時的 tok/s、TTFT、每輪時間拆解,以及 VRAM/RAM/disk 三層的比例。它還有個「Brain」頁,把 19,456 個專家畫成即時皮質——顏色代表存放層級、亮度代表路由熱度,被路由到的專家會閃白光。要理解這個引擎在幹什麼,看那張圖比讀十頁文件快。

效能調校:五個真正有用的開關

參數 / 環境變數作用什麼時候用
--ram N專家快取預算最划算的旋鈕,只影響速度、不影響輸出;給越多越快
--topp 0.85每 token 讀更少專家位元組磁碟受限的機器,品質無損
DIRECT=1O_DIRECT 繞過 page cache有 DRAM 快取的 NVMe;QLC/無 DRAM/虛擬磁碟可能反而變慢,實測再決定
PIPE=1 / PILOT=1(預設開)非同步 I/O 重疊+路由前視預取大多數機器保持預設即可
COLI_MODEL_MIRROR=第二顆 SSD 鏡像你有第二顆 SSD,且願意放一份模型副本

雙 SSD 的完整流程(先跑幾輪代表性 prompt 讓 .coli_usage 反映你的工作負載,再規劃鏡像):

./c/coli mirror plan   --model /fast/glm52_i4 --mirror /second/glm52_i4 --budget-gib 200
./c/coli mirror stage  --model /fast/glm52_i4 --mirror /second/glm52_i4 --budget-gib 200
./c/coli mirror verify --model /fast/glm52_i4 --mirror /second/glm52_i4

規劃器會直接讀 safetensors header,優先複製「最熱路由專家」所在的 shard,每個 shard 都用 SHA-256 驗證,而且永不刪除既有的鏡像 shard——所以第二顆 SSD 只放得下一部分也有效。

跟 Ollama、llama.cpp、vLLM 怎麼選?

工具主要場景記憶體策略適合誰
colibri744B–2.8T 稀疏 MoE 在消費級硬體VRAM/RAM/NVMe 三層串流,學習式專家快取想在本機跑前沿量級模型、能接受每秒不到幾個 token 的人
Ollama一鍵跑 7B–70B 級量化模型全部權重進 RAM/VRAM想快速開始、要穩定互動速度的人(Ollama 介紹
llama.cppGGUF 生態、CPU/Metal 友善全量載入為主,部分 offload需要最大模型支援度與社群量化資源
vLLM伺服器端高吞吐、多併發PagedAttention,重度依賴 GPU VRAM服務多用戶、追求吞吐與併發(vLLM 介紹
Twinny在 VS Code 裡接本機模型取決於你接的後端想要 IDE 內補全與對話(Twinny 介紹

一句話區分:colibri 不是要取代 Ollama,而是處理 Ollama 根本跑不動的那些模型。

常見問題

colibri 需要 GPU 嗎?

不需要。九個模型家族都能純 CPU 執行,GPU 只是加速選項;DeepSeek V4 系列甚至支援 Pascal/Turing 老卡(CUDA_ARCH=portable-pre-ampere NO_TC=1)。

只有 16GB RAM 的筆電真的跑得動 744B 模型嗎?

可以,但會很慢。官方的最低配置是 16GB RAM 加約 380GB 磁碟空間;25GB 的開發機跑 GLM-5.2 冷啟動約 0.05–0.1 tok/s。想先感受這個引擎,建議從 OLMoE(7B,8GB RAM、~7GB 磁碟) 或 Qwen3.6-35B-A3B 入門。

為什麼大家都說「磁碟決定速度」?

因為路由專家是從磁碟串流進來的。744B 模型冷啟動時每個 token 要讀約 11GB,你的磁碟有多少 GB/s,就大致決定了每秒幾個 token。

跑這種東西會不會把 SSD 操壞?

專家讀取是唯讀的,官方說法是不會有意義的耗損。真正要注意的是兩件事:一是 RAM 不足時的 swap 寫入(--ram 預算就是為了避開它),二是長時間滿載讀取的溫度。

這可以拿來當多人服務的 API 嗎?

可以,./coli serve 提供 OpenAI 相容 API,引擎還支援叢集模式(coordinator 產生 token,其他機器上的 worker 執行被路由到的 FFN)。但它的定位是「能力展示與研究平台」,官方明確說不對速度提供 SLA,只保證語意一致。

我的觀察:這個專案最不尋常的地方

多數開源專案的 README 是行銷文件;colibri 的 README 更像一份實驗紀錄。它自己列出六個「尚未被證實的假設」,每一條都寫明「目前證據」與「還需要什麼實驗」,甚至寫下負面結果(例如 MTP 在專家命中率約 85% 時曾量測到 32% 的損失、投機解碼在 V4 上因為重播成本太高而預設關閉)。

它也歡迎你貢獻失敗的實驗:「一個控制良好的失敗,比一個無法解釋的快數字更有價值。」在充斥著 tok/s 幻覺的本地模型圈,這種態度比任何 benchmark 數字都值得參考。

延伸閱讀

資料來源

📬 訂閱 most.tw 電子報

每週精選 AI 工具教學與技術乾貨,直接送到你的信箱。免費、隨時可退訂。

💬 有問題想討論?加 LINE 聯絡我

歡迎透過 LINE 官方帳號直接留言,我會盡快回覆你的問題。

加入 LINE 好友