文档大纲

colibri:用纯C在25GB内存电脑上跑744B大模型

JustVugg/colibri 做的事情看起来很不科学:把 GLM-5.2(一个 744B 参数的 MoE 大模型)跑在只有 25GB 内存的普通笔记本上,而且引擎是一个 C 语言单文件、零依赖、连 GPU 都不是必选项。

一、22 天 17K⭐ 的项目到底是什么

项目地址:https://github.com/JustVugg/colibri

官方一句话定位:「Tiny engine, immense model. Run GLM-5.2 (744B-parameter MoE) on a consumer machine with ~25 GB of RAM — in pure C, with zero dependencies, by streaming experts from disk.」(一个很小的引擎,一个巨大的模型。在 25GB 内存的家用电脑上跑 744B MoE,纯 C、零依赖、expert 从磁盘流式读取。)

作者 JustVugg 把它命名为"colibrì"——意大利语的蜂鸟。项目主页上那张图标也是一只小小的蜂鸟。这个名字很贴切:蜂鸟体重只有几克,却能悬停、采蜜、飞几千朵花;这个引擎只占几 MB 内存,却能让 744B 参数的大模型"活"在 25GB 内存的笔记本里。

二、744B 模型怎么"装进"25GB 内存

关键不是压缩模型,而是利用 MoE 的稀疏性。

2.1 MoE 的"按需激活"特性

GLM-5.2 是一个 MoE(Mixture of Experts)模型,总参数 744B,但每个 token 只激活 ~40B 参数——也就是说 95% 以上的参数在任何一个时刻都"没被用到"。更进一步,真正跨 token 变化的部分只有 ~11GB(被路由到的 expert 集合)。

这意味着:模型不需要整个塞进快速内存,只需要把"当下会用到的部分"放在快内存里就行。

colibri 把这个特性工程化得非常彻底:

  • 常驻部分(dense):attention、shared experts、embeddings 这类所有 token 都要用的参数,~17B,常驻 RAM 的 int4 容器,体积约 9.9 GB。
  • 按需流式部分(routed experts):19,456 个 expert(75 个 MoE 层 × 256 + MTP head),每个约 19MB(int4),存在磁盘上,~370 GB 总量。每次前向只读取真正被路由到的那几十个。

2.2 三层内存分级

作者在 README 里用一句话总结设计目标:「placement only ever decides speed — the router's decisions and the weights' precision are the same whether an expert answered from VRAM or from disk.」(存储位置只决定速度,路由决策和权重精度不会因为 expert 是从显存还是磁盘里来而改变。)

这就是三层分级(tier)的设计哲学:

层级容量速度存放内容
VRAM几十 GB最快热点 expert(pinned)
RAM25~128 GB中等常驻 dense + LRU 缓存
Disk几百 GB慢全部 19,456 个 expert

每个 expert 的三个矩阵(gate / up / down)放在磁盘上的相邻位置,一次 pread 读完;引擎维护一个 LRU 缓存和一个 learned pinned hot-store 来减少磁盘 miss。

引擎的核心聪明之处在于把磁盘 IO 和计算重叠起来:

  • PIPE=1(默认):async I/O 池在计算当前层的同时预取下一层的 expert
  • PILOT=1:router-lookahead 线程基于路由的可预测性预取下一层(实测下一层路由 71.6% 可预测)
  • batch-union:同一个 batch 里位置共享的 expert 只读一次

这意味着即便没有 GPU、没有 NVMe,从磁盘读 expert 也不会让 GPU/CPU 闲置。

2.3 学习缓存(Learning Cache):用得越多越快

这是项目最有意思的设计之一:colibri 会记录你每次对话路由到了哪些 expert(.coli_usage 文件,每轮更新),然后把最热的那些自动 pin 到 RAM。

换句话说,这个引擎会越用越快。你用 colibri 处理中文法律文档,下一次启动它就知道把法律相关的 expert 留在 RAM 里;你用 colibri 写 SQL,下一次启动它就会优先把 SQL expert 调进 RAM。

三、纯 C 单文件引擎的几个硬核设计

3.1 引擎结构

仓库的 c/ 目录几乎就是整个引擎:

c/
├── glm.c        # 单文件 GLM 引擎核心
├── st.h, tok.h, json.h  # 小型运行时头文件
├── backend_cuda.*       # 可选 CUDA tier
├── Makefile
├── coli         # 用户面 CLI
├── openai_server.py     # OpenAI 兼容的 HTTP gateway(可选)
├── setup.sh
├── tools/       # 离线转换、fixtures、benchmark
└── tests/

整个运行时是「纯 C」——gcc + OpenMP 之外没有强制依赖。不需要 BLAS、不需要 Python(Python 只在一开始的模型转换和可选的 API 网关里用到),不需要 CUDA(CUDA 是可选的加速 tier,不是必需)。

这个设计的含义比"技术炫技"更重要:没有 Python 解释器和一长串动态库依赖,意味着这个引擎可以跑到任何 Linux/Windows/macOS 机器上,包括资源受限的嵌入式或边缘设备。

3.2 MLA 把 KV 压到 576 floats/token

传统 Transformer 的 KV cache 是一笔大开销:一个 744B 模型如果用 32K 上下文,KV cache 往往要占 32,768 floats/token。

colibri 实现了 MLA(Multi-Latent Attention),把 KV 状态压缩到 576 floats/token——是传统方式的 57 倍小。

更妙的是,压缩后的 KV 状态可以持久化到磁盘(.coli_kv 文件)。这意味着:

  • 重启 colibri,对话无需重新 prefill——warm start 直接读 .coli_kv
  • 多次会话的 KV 状态可以拼接
  • 持久化前后的 token 生成结果是 byte-identical(与不间断会话逐字节一致)

对于长上下文、多会话切换的使用场景(比如你在本地搭一个客服 / 编码助手),这是省电、省时间的关键。

3.3 MTP 投机解码:2.2~2.8× 提速

GLM-5.2 自带一个 MTP(Multi-Token Prediction)head,可以让模型"草稿"几个 token,然后让主模型一次性验证。如果草稿命中率高,等价于一次前向生成了 2~3 个 token。

实测在 colibri 上,这个加速比是 2.2~2.8 倍。

但作者踩过坑、总结了两条铁律:

  1. MTP head 必须是 int8。int4 的 head 会让草稿接受率塌方到 0~4%(issue #8)。
  2. 草稿和验证必须计算同一个函数。SPEC_PIN=1(默认)会把两者 pin 到同一套 kernel;issue #163 是完整的取证分析。

这也是为什么官方 Hugging Face 模型名特意写明 with-int8-mtp——镜像文件原始版本是 int4 head,草稿接受率 0%。你下载的时候一定要检查:

ls -l <model>/out-mtp-* 
## int8(正确): 3527131672 / 5366238584 / 1065950496 字节

3.4 GPU / Apple Silicon 后端

如果你机器够强,colibri 还能用上:

  • CUDA:COLI_CUDA_PIPE=2 让 resident pipeline 跨层保持在 device 上,CPU expert loop 不被打断
  • NUMA:多路服务器上 COLI_NUMA=1 把 resident weights 交错分布在内存控制器
  • Metal(Apple Silicon 实验性):用统一内存 GPU 做批量 expert 计算

四、不同硬件的真实表现

colibri 的诚实之处在于它没有夸大硬件门槛。README 列出的实测数据是公开可复现的:

硬件配置Decode 速度TTFT备注
25 GB dev box(冷)0.05–0.1 tok/s数十秒项目起点,证明 25 GB 能跑
单卡 RTX 5070 Ti 笔记本1.07 tok/s较快GPU-resident pipeline
128 GB CPU-only 桌面~1.8 tok/s(warm)中等整段 expert 可装进 RAM
6× RTX 5090 全常驻5.8–6.8 tok/s~13sdisk 离开 decode 路径

这个分层很有意思:同一套引擎代码、同一个 int4 模型,在 25GB 笔记本上能用(虽然慢),在 6× 5090 工作站上跑到接近实时。这意味着你写好的 colibri 工作流可以从小机器一路 scale 到大机器,不需要换工具链。

五、为什么这件事很重要

5.1 大模型不再是"富人的玩具"

过去一两年,"在本地跑大模型"的标准叙事是:「你得有 4× A100 才能跑 70B 模型,4-bit 量化勉强能跑 13B」。

colibri 把这个下限拉到了 25GB 内存 + 12 个 CPU 核心——一台普通的开发笔记本就够了。

更重要的是,它跑的是 744B 参数的 MoE——这不是 toy model,是和生产环境同级别的 GLM-5.2(来自 Z.ai)。

5.2 纯 C 意味着可移植 + 可审计

对一个想用大模型做生产工具的团队来说,"Python + PyTorch + 一堆动态库" 链路的脆弱性是真实存在的——版本冲突、CUDA 版本不匹配、Linux glibc 版本差异都能让你跑不起来。

colibri 的 "一个 C 文件 + gcc" 部署方式,把这些摩擦降到了最低。你甚至可以把它交叉编译到一个路由器上跑。

可审计性也很关键:单文件 C 代码意味着安全审计、内存审计、性能审计的成本大幅下降。对于受合规约束的行业(金融、医疗、政务),这一点非常重要。

5.3 Apache 2.0 + 友好协议

仓库是 Apache 2.0,GLM-5.2 权重是 MIT(来自 Z.ai)。你可以商用、改写、再发布。

六、和同类项目的对比

如果你在考虑"本地跑大模型",现在有几条主流路径:

方案适合场景局限
Ollama快速跑 7B~70B 单文件模型不支持 MoE 流式,大模型需要全装内存
llama.cppCPU/GPU 混合推理强项是 dense 模型,MoE 支持还在演进
vLLM / SGLang生产级 GPU 推理服务需要多卡 GPU,不适合 25GB 笔记本
colibriMoE 大模型 + 普通硬件主要支持 GLM 系列,生态还在早期

colibri 的定位很清晰:它是 GLM-5.2 这类 MoE 大模型的"小型设备 first" 运行时,不是 Ollama 的替代品,而是 MoE 流式场景的补位。

七、电商 / 业务场景能用上吗?

可能比你想象的直接。

7.1 本地客服/知识库助手

一个电商团队最常见的隐私顾虑是「客服对话能不能上公有云 API」。colibri + GLM-5.2 的组合给了一个选项:

  • 完全本地部署,对话不出公司内网
  • KV 持久化到磁盘,多客服会话无缝切换
  • 25GB 内存门槛意味着不需要专门的 AI 服务器

7.2 商品文案 / SKU 描述批量生成

如果你每天要写 1000+ 条商品文案、SEO 标题、本地化翻译,colibri 在 128GB 桌面上的 ~1.8 tok/s 速度已经可以批量任务化。纯 C 单文件部署让它可以塞进 CI/CD 流水线。

7.3 选品 / 评论分析的离线工具

Learning Cache 的"用得越久越快"特性,对选品场景很合适:你每天让它读一批评论 / SKU 描述,几天后它就会把你的品类 expert 留在 RAM 里。

八、怎么开始?

8.1 上手步骤

## 1. 克隆仓库
git clone https://github.com/JustVugg/colibri.git
cd colibri

## 2. 一键 setup(检查 gcc / OpenMP,编译、自检)
cd c && ./setup.sh

## 3. 下载预转换的 GLM-5.2 int4 容器(含 int8 MTP head)
##    Hugging Face: mateogrgic/GLM-5.2-colibri-int4-with-int8-mtp
##    注意:必须是 int8 head 版本,int4 head 草稿接受率 0%

## 4. 启动对话
COLI_MODEL=/path/to/glm52_i4 ./coli chat

## 5. 检查计划(VRAM/RAM/disk 分配)
COLI_MODEL=/path/to/glm52_i4 ./coli plan

## 6. 自检(只读)
COLI_MODEL=/path/to/glm52_i4 ./coli doctor

## 7. 启动 web dashboard + OpenAI 兼容 API
./coli web --model /path/to/glm52_i4

Windows 用户甚至不需要自己编译:从 Releases 下载 colibri-<version>-windows-x86_64.zip,解压后把 colibri-*-windows-x86_64.exe 改名为 glm.exe,安装 Python 3(仅一次性转换用),就能跑。

8.2 调优旋钮

下面是项目文档里比较实用的环境变量,按用途分组:

变量作用
COLI_MODEL模型路径(必须)
COLI_NUMA=1多路服务器上交错常驻权重
COLICUDAPIPE=2GPU resident pipeline 跨层保持
PIPE=1(默认)async I/O 池边算边读
PILOT=1router-lookahead 预取下一层 expert
SPEC_PIN=1(默认)MTP 草稿和主模型 pin 到同一 kernel
DRAFT=0关闭 MTP 投机解码(cache 冷时不划算)
GRAMMAR=file.gbnf强制 JSON / 结构化输出

九、读这篇你能带走什么

  • 如果你是 AI 工具使用者:
    colibri 证明了 25GB 内存 + 纯 C 引擎也能跑生产级 MoE 模型,意味着未来会有更多"小机器跑大模型"的项目——你可以关注这个趋势,或者直接试用 colibri 跑本地客服。
  • 如果你是开发者:
    colibri 的代码组织(单文件 C + 小头文件)值得学习——它展示了"少即是多"的工程哲学。如果你正在做 MoE 推理优化,它的 MLA / MTP / Learning Cache 三件套是必读。
  • 如果你是创业者:
    colibri 把"本地大模型"的硬件门槛降到了你能负担的程度,可以用它在 MVP 阶段做"完全本地"的 AI 产品,不用担心云 API 的成本和合规风险。
  • 如果你是研究者:
    项目仓库里有完整的 benchmark / 实验文档,docs/benchmarks.md 和 issue #108 / #81 涵盖了量化精度损失、scale-granularity / rotation 的消融实验。

蜂鸟体重几克,但每天能采几千朵花。这个引擎只占几 MB 内存,但让 744B 模型"活"在了你桌上那台笔记本上——这就是 colibri 给我的最大启发:好的工程不是堆资源,而是把资源用到它该用的地方。

十、参考资料

  • GitHub 仓库:https://github.com/JustVugg/colibri
  • 项目主页:https://justvugg.github.io/colibri
  • 模型(HF,含 int8 MTP head):https://huggingface.co/mateogrgic/GLM-5.2-colibri-int4-with-int8-mtp
  • Quick Start 文档:https://github.com/JustVugg/colibri/blob/main/docs/quickstart.md
  • Benchmark:https://github.com/JustVugg/colibri/blob/main/docs/benchmarks.md
阅读量: 358