← 返回信息流
AI 资讯Hacker News·13 小时前

低配电脑也能跑GLM 5.2

原标题:Show HN: Getting GLM 5.2 running on my slow computer

速览

一位开发者分享了在老旧或低配电脑上运行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 检查点无需一次性存在磁盘上,可恢复。

使用方法

  1. 克隆仓库并运行 cd c && ./setup.sh 编译并自检。
  2. 下载预转换的 int4 模型(Hugging Face 上 jlnsrk/GLM-5.2-colibri-int4)或使用 ./coli convert 命令从 FP8 分片在线转换(仅需 Python 和 torch 等)。
  3. 设置环境变量 COLI_MODEL 指向模型目录,然后 ./coli chat 启动聊天。
  4. 可选参数:--temp(温度,默认 0.7 + nucleus 0.90)、--topp(自适应专家 top-p,可减少 30–40% 磁盘读取)、--ngen(最大输出 token 数)、AUTOPINTHINKDRAFTTF 等。
  5. 学习缓存:引擎记录实际路由到的专家,在下一次启动时自动将最热的专家固定在空闲 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 投机解码:利用
查看原文 →github.com