LabHub

博客

在慢速电脑上跑 GLM-5.2 — colibrì 如何从磁盘流式加载 744B 模型

한국어English日本語中文

引言 — 用 25GB 内存的笔记本跑 744B 模型?

colibrì 是一个以在普通消费级 PC 上运行 GLM-5.2 为目标的推理引擎。按 colibrì 的说法,GLM-5.2 是一个总参数 744B(7,440 亿)的 MoE 模型。通常这种规模需要多张 GPU 和数百 GB 的 VRAM。而 colibrì 却在一台 12 核 CPU、25GB 内存的机器上把它跑起来。纯 C 写成、约 1,300 行,运行时依赖为零 — 既没有 BLAS,也没有 Python。

当然,这不是免费的。项目所标榜的目标本身就不是速度。概括起来就是"让 GLM-5.2 在 12 核笔记本、25GB 内存上给出正确的答案,哪怕速度要以每段落几分钟来计"。本文诚实地审视 colibrì 实际做了什么、靠什么样的技巧让它成为可能,以及它到底有多实用。

核心技巧 — MoE 稀疏性 + 磁盘流式加载

两个事实咬合在一起。

第一,GLM-5.2 是 MoE。生成一个 token 时,激活的不是全部 744B,而只有约 40B。参数被细分成一个个"专家(expert)",每个 token 由路由器只挑选与输入匹配的少数几个来用。在 colibrì 的构建中,路由专家共有 21,504 个(75 个 MoE 层 × 256 个),用 int4 表示时每个约 19MB。

第二,正因如此,没必要把全部都放进内存。colibrì 把模型一分为二。

也就是"庞大的模型,小巧的引擎"。每个 token 的瓶颈不是计算,而是磁盘读取 — 冷启动状态下,每个 token 要从 SSD 读约 11GB(75 层 × 8 个专家)。这个磁盘带宽决定了速度的上限。

让它变得可以忍受的那些装置

磁盘流式加载本质上就是慢的。colibrì 有意思的地方,在于它啃掉这份慢的那些办法。

量化是这一切的底座。int4 容器配 per-row 缩放,在 AVX2 内核里 dequant-on-use。量化综述文章里讲过的"减少比特数来换取内存和带宽"这场仗,在这里原封不动地延续为"减少要从磁盘读取的字节数"。

真要跑起来,硬件下限如下,入口模式共有四种。

# 硬件下限 (依据 README)
OS:    Linux 或 WSL2         CPU: AVX2, 12 核以上
RAM:   16GB 以上 (缓存自动上限, 峰值约 20GB)
Disk:  约 370GB 本地 NVMe (ext4) — 不支持网络挂载

# 运行模式
./coli chat     # 交互式 CLI
./coli serve    # OpenAI 兼容 API (仅文本)
./coli bench    # MMLU / HellaSwag / ARC
./coli plan     # 只读取头部的 dry run, 零分配

诚实的部分 — 那么它到底有多快

慢。冷启动状态约 0.05–0.1 tok/s — 实际上 10~20 秒才蹦一个词。光是加载就要约 30 秒。社区上报的实测数据随硬件而异:M5 Max(128GB)1.06 tok/s,Framework 13(128GB + 学习固定)0.37 tok/s,装了 PCIe5 NVMe 的 9950X 0.28 tok/s。就算最好的情况,也不过每秒一个 token 出头。

这不是一个交互式工具。一个段落要花上几分钟。那么,什么时候用它呢?

如果你需要生产级的吞吐量,答案很明确:老老实实分配 GPU。colibrì 本来也没打算取代它 — 你可以用 ./coli serve 开一个 OpenAI 兼容 API,但那种速度撑不起真实的服务流量。

结语 — 在"能跑"与"好用"之间

colibrì 真正有意思的地方不是速度,而是它得以成立这件事本身。曾被认为"没有 GPU 就不可能"的规模,如今靠 MoE 稀疏性 + 磁盘流式加载 + 聪明的缓存,在一台 25GB 内存的机器上好歹能给出答案。"能跑"和"好用"确实是两码事,但只有先证明了"能跑","好用"才会随后跟上。

本地推理的民主化大多是按这个顺序到来的 — 先是"疯是疯了点,但真能跑",然后花上几年变成"现在真的挺实用"。llama.cpp 当初也正是这样起步的。colibrì 如今走到了哪一步,上面那些数字诚实地给出了答案。即便如此,想象每段落几分钟变成每句几秒的那一天,也并不算太难。

参考资料

评论

还没有评论。

登录后即可发表评论