iPhone 15 Pro 能跑到 120 tok/s,这个 20B MoE 模型的量化方案值得深挖
最近在测试 Maple-Preview 的代码仓,最让我惊讶的不是它把 20B 参数量的 MoE(混合专家)模型塞进了手机,而是它居然跑出了 120 tok/s 的生成速度。在目前的移动端部署环境下,大多数号称“本地运行”的模型,只要生成长度超过 50 个 Token 就会因为发热导致 CPU 降频,速度断崖式下跌。但这个方案在 iPhone 15 Pro 上的单次解码延迟能稳定在 8ms 左右,这意味着它真正实现了实时推理,而不是在做某种演示 Demo。
这种性能突破的核心在于它没有走传统的 4-bit 或 8-bit 量化路线,而是采用了极其激进的“三元量化(Ternary Quantization)”结合 MoE 稀疏化融合。
简单来说,三元量化将权重强制压缩到 {-1, 0, +1} 这三个值中。在底层计算时,传统的浮点数乘法(Floating-point Multiplication)被昂贵的算力开销所占据,而三元权重允许模型直接使用 XNOR 逻辑运算和 popcount 指令来替代乘法。对于 ARM 架构的芯片来说,位运算的能效比远高于浮点运算,这直接解决了手机端推理最头疼的发热与功耗问题。
如果你去翻阅它的量化流程,可以看到类似这样的执行命令:python quantize.py --model maple-preview-20b-moe --bits 2 --group-size 128 --output-dir ./maple-ternary-2bit
通过设置 group-size 128 的分组量化,模型体积被极端压缩。最夸张的是,量化后的模型权重从最初的 12GB 骤降至 40MB 左右。虽然这个数字看起来不可思议,但配合 MoE 的稀疏激活机制——即每次推理只激活一两个专家模块,而不是全量参数参与计算——使得 20B 规模的模型在内存占用上达到了手机端可承受的水平。
此外,该方案将 KV cache 和 MoE 路由逻辑全部本地化,不再依赖云端代理。这意味着在完全断网的环境下,模型依然能维持高频的 Token 输出。
当然,这种极致的压缩并非没有代价。在实际测试中,三元量化带来的精度损失非常明显。由于权重被强行截断到三个值,模型的 zero-shot 准确度大约掉了 15%,在处理复杂逻辑推理或长文本还原时,偶尔会出现幻觉或语义漂移。同时,由于 MoE 路由依赖动态专家选择,如果输入分布不均,容易导致部分专家模块过载,而其他模块闲置,影响整体推理的稳定性。
目前这个项目仅支持 iOS 端的 Metal 后端,安卓端的适配还在开发中。但从工程实现来看,它证明了通过牺牲部分精度来换取极致推理速度在移动端是可行的。对于很多不需要极高逻辑严密性、但追求响应速度的端侧场景(如实时翻译、简单指令引导),这种“三元量化 + 稀疏激活”的组合拳提供了一个非常具有参考价值的落地路径。
120 tok/s 跑起来太爽了,但这 20B 量化后会不会在长对话里一本正经地胡说八道?