在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模型表明:

  1. 无需昂贵GPU即可进行本地推理,这对隐私敏感的工作负载或云成本激增时非常有用。
  2. 通过解决指令集不匹配和隐藏错误,可以使仅CPU推理变得健壮,从而延长旧企业硬件的使用寿命。
  3. 开源工具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_GATEFUSED_UP_GATE。调度器在非AVX2构建中没有这些操作的对应情况,因此每个专家的前馈网络的张量保持未初始化状态。结果是产生确定性的 gibberish,logits均值约为+16,而不是随机噪声。

修复(PR #2138)

该补丁由三个主要部分组成,全部位于#if !GGML_USE_IQK_MULMAT之后,因此AVX2构建保持不变。

  1. 编译时修复 – 在iqk_quantize.cpp中使用便携标量循环替换 stray AVX2 调用;修复了缺失的包含和不匹配的函数签名,使代码能够在AVX1 CPU上编译。
  2. 运行时错误修复 – 图构建器现在发出具有有效标量实现的操作:
    • 对于MoE上门,合并权重张量被拆分为独立的gate和up切片,每个切片分别乘以ggml_mul_mat_id,然后通过ggml_fused_mul_unary(SwiGLU)组合。密集类似操作获得相同处理。
    • 这些路径使用现有的非IQK内核(mul_mat_idfused_mul_unary),在不使用AVX2的情况下保持正确性。
  3. CI存根 – IQK源码中的存根函数与头文件同步,修复了导致测试套件无法链接的缺失<cstdint>包含和签名不匹配。

该补丁处理--run-time-repack标志,该标志仍将权重重新排序为仅AVX2布局;推荐的解决办法是删除该标志。

重现结果

  1. 硬件:双路Xeon E5‑2690 v2(AVX1),DDR3,无GPU。
  2. 构建:克隆PR #2138引用的分支,使用GGML_USE_IQK_MULMAT=0进行编译。
  3. 模型:下载Gemma 4 26B‑A4B,量化为Q8_0
  4. 运行:使用标准的ik_llama.cpp CPU标志,省略--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

相关