colibri:2400 行 C 代码实现的超大模型本地推理引擎,12700 Star
7440 亿参数的模型,25GB 内存就能跑?第一次看到这个项目时觉得又是标题党——正常跑这样的模型需要 8 张 H100 或者 1.5TB 内存。打开 README 之后发现核心代码只有 2400 行 C,零依赖,不需要强制使用 GPU。
它叫 colibri,在 GitHub 上有 12700 多个 Star,是一个能在普通笔记本上跑超大模型的推理引擎。
实际运行效果
设置好模型路径之后,运行 ./coli chat,32 秒启动,内存占用 9.9GB。问一句意大利语的"你好",模型正常回复,没有出现乱码或答非所问。网页端可以对模型运行状态进行实时监控,内存占用和推理速度一目了然。
这个 7440 亿参数的模型,colibri 的做法是把它分成两部分:密集的部分一直驻留在内存中——注意层、共享专家、嵌入层等每次都要用到,int4 量化之后只占 9.9GB;专家部分放在磁盘上——75 个 MoE 层 × 256 个专家,加上 MTP 头,一共 21504 个文件,总大小约 370GB,按需加载。每个 token 只激活大约 5% 的参数,因此每次推理只读取大约 11GB 的专家数据,25GB 内存足够。加载时间大约 30 秒,峰值 RSS 约为 20GB,系统会自动进行限制。
核心技术
磁盘流式加载专家。 模型在处理当前内容时,系统已经提前读取后面要使用的数据。预读机制和缓存策略一起工作,使经常使用的数据保留在内存中。刚开始启动时比较慢,用了几次之后就会快很多。
MLA 注意力压缩。 长对话时的内存占用一直是个问题,该技术可以大大减小,压缩比为 57 倍,原来要占用大量内存的地方现在轻松很多,对内存较小的设备很友好,长对话也可以运行。
原生 MTP 推测解码。 模型自带一个助手,可以预测后面可能出现的内容,当小助手预测正确时,生成速度可以提高两倍以上。但要注意这个小帮手有特定的版本要求,如果选错了就不会起作用。
语法约束推测解码。 在生成固定格式内容时,语法规则本身也是很好的预测依据。比如生成 JSON 时,大括号、引号等固定部分基本不需要去猜,对于需要结构化输出的场景非常有用。
OpenAI 兼容 API。 提供标准的 HTTP 接口,现有工具可以对接使用,支持常见的参数配置,流式输出也可以正常使用,还支持模型的思考模式(先推理再给出答案)。
安装与使用
首先要保证有 25GB 内存以及 370GB 的 NVMe 空间。模型权重从 Hugging Face 下载预转换好的 int4 版本,或者使用官方脚本进行 FP8 转换。下载完成后,模型被分成很多小文件,每个专家都是独立的。
然后克隆仓库,进入 c 目录,运行 ./setup.sh,脚本会检查 gcc、编译引擎、跑自测。转换工具一次只下载一个分片,756GB 的完整检查点从不需要一次性存在磁盘上。
启动命令:
COLI_MODEL=/path/to/model ./coli chat
要 API 服务器就用 coli serve,端口、API Key、模型 ID 都可以设置。Windows 11 也可以直接运行,使用 MinGW-w64 编译即可。
注意事项
速度较慢。 作者说"速度不是主要的",冷启动时是 0.05 到 0.1 tok/s,问一个问题要等 10-20 秒才会出现第一个字。M5 Max 上有用户测到大约 1 tok/s,但仍然不如 GPU 或云端 API。缓存预热后配合 MTP 推测解码会好一些。
对磁盘性能有要求。 NVMe 随机读大约 1GB/s 是物理上限,VHDX 虚拟磁盘会更慢,磁盘直接决定体验。冷启动时每个 token 都要读大约 11GB 的数据,所有压力都落在磁盘上。
MTP 头版本要选对。 社区有人下载了错误版本,后来发现 MTP 从没被开启过,因为 int4 头的接受率很低。必须使用 int8 的 MTP 头,否则推测解码完全不能工作。Hugging Face 上有社区版本已经换成了 int8 头。
项目基于 MIT 协议开放。
开源地址:https://github.com/JustVugg/colibri