在13年前的Xeon上运行Gemma 4 26B,达到5 Tokens/秒(仅CPU)
TL;DR
一台配备两颗Ivy Bridge Xeon E5‑2690 v2 CPU(仅AVX1)的13年旧HP StoreVirtual设备,可以使用经过修补的仅CPU版ik_llama.cpp构建,以大约5 tokens/秒的速度运行Google的Gemma 4 26B参数混合专家模型生成文本。该修复移除了AVX2依赖,并为两个在pre‑AVX2硅片上静默失败的MoE图操作添加了后备实现。
硬件上下文
- 服务器:改装的HP StoreVirtual存储设备(约2013年),双路Xeon E5‑2690 v2(Ivy Bridge),DDR3内存,无GPU。
- 指令集:仅AVX1;缺少在Haswell(v3)2014年引入的AVX2和FMA3。
- 成本:整机成本低于**$300**。
- 性能:解码约5.2 tokens/秒,提示评估约16 tokens/秒。
为什么这很重要
在如此旧硬件上运行现代的26B参数MoE模型表明:
- 无需昂贵GPU即可进行本地推理,这对隐私敏感的工作负载或云成本激增时非常有用。
- 通过解决指令集不匹配和隐藏错误,可以使仅CPU推理变得健壮,从而延长旧企业硬件的使用寿命。
- 开源工具(
ik_llama.cpp分支)可以适配旧CPU,扩大大型语言模型的可访问性。
原始障碍
一篇病毒式传播的Hacker News帖子展示了Gemma 4在2016年Broadwell Xeon上使用ik_llama.cpp以及许多性能技巧(推测解码、闪存注意力、MoE路由、运行时权重重新打包)运行的情况。当作者在Ivy Bridge机箱上尝试相同操作时,构建失败,因为该分支假设了AVX2。缺失的AVX2指令导致编译时错误;在快速工作规避中禁用了GGML_USE_IQK_MULMAT标志后,模型仍然产生无意义的多语言输出。
静默失败
即使在禁用GGML_USE_IQK_MULMAT后,图构建器仍会发出两个MoE图操作——MOE_FUSED_UP_GATE和FUSED_UP_GATE。调度器在非AVX2构建中没有这些操作的对应情况,因此每个专家的前馈网络的张量保持未初始化状态。结果是产生确定性的 gibberish,logits均值约为+16,而不是随机噪声。
修复(PR #2138)
该补丁由三个主要部分组成,全部位于#if !GGML_USE_IQK_MULMAT之后,因此AVX2构建保持不变。
- 编译时修复 – 在
iqk_quantize.cpp中使用便携标量循环替换 stray AVX2 调用;修复了缺失的包含和不匹配的函数签名,使代码能够在AVX1 CPU上编译。 - 运行时错误修复 – 图构建器现在发出具有有效标量实现的操作:
- 对于MoE上门,合并权重张量被拆分为独立的gate和up切片,每个切片分别乘以
ggml_mul_mat_id,然后通过ggml_fused_mul_unary(SwiGLU)组合。密集类似操作获得相同处理。 - 这些路径使用现有的非IQK内核(
mul_mat_id和fused_mul_unary),在不使用AVX2的情况下保持正确性。
- 对于MoE上门,合并权重张量被拆分为独立的gate和up切片,每个切片分别乘以
- CI存根 – IQK源码中的存根函数与头文件同步,修复了导致测试套件无法链接的缺失
<cstdint>包含和签名不匹配。
该补丁不处理--run-time-repack标志,该标志仍将权重重新排序为仅AVX2布局;推荐的解决办法是删除该标志。
重现结果
- 硬件:双路Xeon E5‑2690 v2(AVX1),DDR3,无GPU。
- 构建:克隆PR #2138引用的分支,使用
GGML_USE_IQK_MULMAT=0进行编译。 - 模型:下载Gemma 4 26B‑A4B,量化为
Q8_0。 - 运行:使用标准的
ik_llama.cppCPU标志,省略--run-time-repack。
您应该在仅CPU系统上观察到约5 tokens/秒的解码速度。
社区反应
- 性能期望:几位评论者指出,虽然5 tps适用于低吞吐任务,但提示评估速度(~16 tps)可能成为交互使用的瓶颈。
- 成本比较:一项分析估计,在德国运行该机箱(约500 W)每小时成本约为**$0.15/小时**,大约是云服务提供商相同输出量的$0.005/小时 token成本的30倍。
- 未来展望:一位用户预测,到2027年中,超过200B参数的MoE模型可能在消费级硬件上运行,引用一个在16 GB MacBook Air上达到7‑9 tps的35B参数模型。
- 其他硬件:用户报告在2013年Mac Pro和内存更大的双路Xeon服务器上也有类似速度,证实该方法在这类旧机器上具有可扩展性。
为什么在公司博客上发布?
作者认为真正的价值不在于廉价硬件本身,而在于所需的技能集:
- 诊断低级CPU指令不匹配。
- 导航并修补性能关键的C++代码。
- 与AI助手(Claude)迭代以产生正确的修复。
这些能力类似于维护遗留网络应用或数据库:能够“一直挖掘直到找到杠杆点”是一项可市场化的服务。
要点
- 如果为关键内核提供适当的AVX1后备,旧CPU可以运行现代MoE模型。
- 静默错误(缺失的调度器情况)可能产生确定但错误的输出;记录logits是一种有效的调试步骤。
- 开源补丁使社区能够延长旧硬件的寿命,为基于token的服务提供低成本的后备方案。
该补丁目前在GitHub上公开 https://github.com/ikawrakow/ik_llama.cpp/pull/2138 *等待维护者审查。
Sources
相关
- Dispatch
- Dispatch
- Dispatch
- Dispatch
- Dispatch