低配电脑也能跑GLM 5.2
速览
一位开发者分享了在老旧或低配电脑上运行GLM 5.2的经验。通过模型优化或量化等技术,实现了在有限硬件资源下的推理。这表明GLM 5.2可能对硬件要求不高,或作者找到了有效的轻量化部署方法。该实践为低算力用户运行大模型提供了参考。
AI 深度解读
背景
GLM-5.2 是清华大学研发的大规模 Mixture-of-Experts(MoE)语言模型,拥有 744B 参数(约 7440 亿),其中每个 token 仅激活约 40B 参数。这类前沿模型通常需要多块高端 GPU(如 H100)才能运行,部署成本极高。然而,一位开发者(jlnsrk)在 Hacker News 上展示了一个名为 colibrì 的纯 C 推理引擎,能让 GLM-5.2 在仅配备 ~25 GB RAM 的消费级机器上运行,完全依赖 CPU,无需 GPU、Python 或任何外部依赖。这一突破让“前沿模型在普通 PC 上正确回答”成为现实。
核心内容
colibrì(v1.0)是一个单文件 C 引擎(c/glm.c,约 1300 行),专为 GLM-5.2(具体架构 glm_moe_dsa)设计,采用 int4 量化,通过从磁盘流式加载专家参数来运行。模型总大小约 370 GB(int4 格式),但运行时仅需常驻 ~9.9 GB RAM(对应密集部分),其余 21,504 个路由专家(每个 ~19 MB)存放在磁盘上,按需流式加载并使用 LRU 缓存、可选固定热存储及 OS 页缓存。
架构与关键技术
- MoE 结构:GLM-5.2 有 75 个 MoE 层,每层 256 个专家,加上 MTP 头,共 21,504 个专家。每个 token 只激活约 40B 参数,其中 ~17B 密集参数(注意力、共享专家、嵌入)常驻内存,~11B 路由专家参数随 token 变化而从磁盘读取。
- MLA 注意力:采用 Multi-head Latent Attention(q/kv-LoRA,交织部分 RoPE),使用压缩 KV 缓存:每个 token 仅需 576 个浮点数(而非 64 头无 GQA 时的 32,768 个),缩小 57 倍。
- Sigmoid 路由器:类似 DeepSeek-V3,无 aux_tc 和 routed_scaling_factor,有共享专家,前三层为密集层。
- MTP 投机解码:利用 GLM-5.2 自身的多 token 预测头(第 78 层)草拟 token,主模型批量验证。草稿头需 int8 量化(转换器默认),int4 下接受率降至 0–4%;int8 下接受率可达 39–59%,每前向产生 2.2–2.8 个 token。通过拒绝采样保持无损。注意:冷缓存时验证草稿会额外路由专家(~660 → ~1100 专家加载/token),可能净增延迟,引擎提供自适应保护和
DRAFT=0选项。 - 真实采样:支持温度 + 核采样,默认 0.7 / 0.90(为 int4 调优;官方 1.0 / 0.95 会采样尾部量化噪声)。
- 整点运算内核:Q8_0 风格 int8 激活、AVX2
maddubs,int8 矩阵乘法快 1.4–2.5 倍(实测 119 GFLOP/s),int4 批量快 1.8 倍。路由依据形状在运行时选择:int4 单行仍用 f32(实测更慢)。 - MLA 权重吸收:借鉴 DeepSeek 技巧,解码时无需逐 token 重建 k/v——query 吸收
kv_b,上下文在注意力后投影。已验证精确性。 - 异步专家预读:当前专家块被计算时,内核已预读下一块(
WILLNEED)。 - 量化内核:int8 / packed int4 / packed int2,逐行缩放,AVX2,按需反量化。打包已验证与 int8 容器比特一致。
- DSA 稀疏注意力:正在开发中,闪电索引权重(从 FP8 仓库提取约 108 GB)正在下载,索引器前向即将实现。在此之前注意力是密集的,且对 ≤2048 token 的上下文精确。
- 批处理联合 MoE:在 prefill 和 MTP 验证中,每个批次中的唯一专家只读取一次,并应用到所有路由到它的位置。
- 字节级 BPE tokenizer:纯 C 实现(GPT-2 风格,Unicode 属性正则,320k 合并)。
- RAM 安全:专家缓存启动时根据
MemAvailable自动调整大小,确保不会触发 OOM。 - 离线 FP8→int4 转换器(
c/convert_fp8_to_int4.py):每次下载一个分片(~5 GB),反量化(128×128 块缩放),重量化为引擎容器,然后删除分片——756 GB 的 FP8 检查点无需一次性存在磁盘上,可恢复。
使用方法
- 克隆仓库并运行
cd c && ./setup.sh编译并自检。 - 下载预转换的 int4 模型(Hugging Face 上
jlnsrk/GLM-5.2-colibri-int4)或使用./coli convert命令从 FP8 分片在线转换(仅需 Python 和 torch 等)。 - 设置环境变量
COLI_MODEL指向模型目录,然后./coli chat启动聊天。 - 可选参数:
--temp(温度,默认 0.7 + nucleus 0.90)、--topp(自适应专家 top-p,可减少 30–40% 磁盘读取)、--ngen(最大输出 token 数)、AUTOPIN、THINK、DRAFT、TF等。 - 学习缓存:引擎记录实际路由到的专家,在下一次启动时自动将最热的专家固定在空闲 RAM 中,越用越快。
性能数据
引擎运行在开发者 humble 硬件(12 核,25 GB RAM,NVMe 通过 WSL2 VHDX,随机读取约 1 GB/s)。解码受磁盘限速:冷 token 需要 ~11.4 GB 专家读取;缓存变暖后 MTP 投机解码可将有效成本减半。实际来自不同机器的测试(贪心解码,--ngen 32,MTP 开启):
| 机器 | 参数 | tok/s |
|------|------|-------|
| 开发机(12 核,25 GB RAM,受限磁盘) | 默认 | ~0.3 |
| 开发机 + --topp 0.7 | 自适应专家 top-p | ~0.5 |
| M5 Max(猜测 24 GB RAM) | 自动缓存限制 2 槽/层 | ~1.0 |
| 有更多 RAM 和更快磁盘 | 大缓存 + 热固定 | 预计 >1.5 |
核心结论:在 24 GB RAM 机器上,缓存自动限制为每层 2 个槽,解码保持冷状态;RAM 限制比磁盘更紧。--topp 0.7 单独带来 1.6 倍加速。
关键要点
- 纯 C 零依赖:整个运行时引擎是一个 C 文件(~1300 行)加少量头文件,无 BLAS、无 Python、无 GPU。
- 消费者硬件运行前沿模型:在 25 GB RAM、CPU 上运行 744B 参数的 GLM-5.2,成本低于一个 H100 风扇。
- 流式专家加载:370 GB 的 int4 模型存储在磁盘上,只常驻 9.9 GB 密集参数,其余按需流式加载,利用 LRU 和 OS 页缓存。
- 极端内存优化:MLA 注意力将 KV 缓存缩小 57 倍;int4 量化;整点运算内核加速。
- MTP 投机解码:利用
