20B 参数的大语言模型跑在手机上是什么体验?DeepGrove 用三值权重把推理速度推到 127 tok/s

一个 200 亿参数的推理模型,跑在 iPhone 上每秒生成 127 个 token,在 Mac mini M4 上达到 218 tok/s。DeepGrove 最新发布的 Maple-Preview——一个原生三值权重(ternary-weight)训练的 20B-A1B MoE 模型,完整权重只有 5.31 GB。

Maple-Preview 速度-质量前沿图:横轴为解码速度(tokens/s),纵轴为平均性能得分

三值权重:把乘法变成加法

传统量化路线的逻辑是:先用全精度(FP16/BF16)训练一个模型,再用 PTQ(训练后量化)或 QAT(量化感知训练)把它压到 4-bit、2-bit。问题是,压缩后的模型性能总会打折——一个 BF16 下 85 分的模型,压到 2-bit 可能只剩 60 分。

Maple-Preview 走了一条不同的路:直接在 2-bit 三值精度下训练。每个权重只有三种取值:{-α, 0, +α},其中 α 是每行独立学习的缩放因子。在这种精度下,矩阵乘法中的浮点乘运算可以被整数加法替代——权重是 +α 就加上输入向量,是 -α 就减去,是 0 就跳过。这把推理的算术负担降低了一个数量级。

模型内存占用对比:Maple 在 131K token 上下文下仅占约 7.5 GB,远低于 16 GB 基准线

DeepGrove 在 model card 中明确阐述了这一设计哲学:「模型运行的精度应当是它训练的精度」。他们认为,先训练再压缩的方法从根本上限制了性能上限和架构自由度——你不仅要承受精度损失,还要被迫适配全精度模型遗留的架构约束。

架构设计:为推理速度而生

Maple-Preview 的架构配置体现了明确的硬件感知设计:

参数配置
总参数量20.2B
每次推理激活参数1.49B
层数24
专家数256
Top-K 路由Top-8
注意力机制混合滑动窗口 + 全局注意力
上下文长度131,072 tokens
权重精度2-bit 三值(每行一个 α 缩放因子)
检查点大小5.31 GB

几个关键设计决策值得展开:

24 层 + 256 专家(而非 30 层 + 224 专家)。DeepGrove 在开发过程中测试了多种配置,最终选择了更浅但更宽的架构。更少的层数意味着更少的顺序计算(推理时的主要瓶颈),更多的专家则通过稀疏激活保持模型容量。每次推理只激活 256 个专家中的 8 个,即 1.49B 参数参与计算。

混合滑动窗口注意力。每 4 层中有 3 层使用 512-token 的滑动窗口注意力,1 层使用全局注意力。这种设计在保持长距离建模能力的同时,将 KV-cache 的内存增长限制在线性范围内。在 131K token 的完整上下文下,Maple 的总内存占用约为 7.5 GB(模型权重 + KV-cache),远低于 16 GB 的 Mac mini 内存上限。

FlashHead 加速。这是 DeepGrove 在 mlx-lm fork 中实现的独特优化。标准语言模型在生成每个 token 时需要计算完整的 logits 向量(词表大小 × hidden dim),然后做 softmax 选出下一个 token。FlashHead 用 k-means 聚类将词表分为约 4748 个簇,推理时只对 top-512 个簇的中心做精确打分,再在候选簇内做精确搜索。这将输出头的计算量降低了约 80%,代价是约 2 分钟的一次性 k-means 预处理。

Benchmark:在同量级中领先

DeepGrove 公布的评测覆盖四个推理 benchmark:

模型LCBv6AIME 2026HMMT 2026GPQA-D平均总参数激活参数
Maple-Preview75.187.578.873.578.720.2B1.49B
Maple-Preview (Flash)75.685.880.369.277.720.2B1.49B
Qwen3.5 35B-A3B74.691.181.884.282.935B3B
GLM 4.7 Flash64.089.281.175.277.430B3B
Ternary Bonsai 27B77.987.574.268.977.127.3B
Qwen3 30B-A3B66.088.378.873.476.630.5B3.3B
Qwen3.5 9B65.686.771.281.776.39B
GPT-OSS 20B74.690.068.971.576.320.9B3.6B
LFM2 24B-A2B21.923.217.447.027.424B2B

Benchmark 性能对比:Maple-Preview 在四个推理 benchmark 上的分组得分

Maple-Preview 以 78.7% 的平均分在同等参数规模(20B 级别)中领先。Qwen3.5 35B-A3B 以 82.9% 的平均分排在第一,但它的总参数量是 Maple 的 1.75 倍,激活参数是 2 倍,且需要 4-bit 量化才能在设备上运行。Maple-Preview 在原生三值精度下就达到了接近的水平。

在 AIME 2026(美国数学邀请赛)上,Maple-Preview 拿到 87.5 分,仅比参数量翻倍的 Qwen3.5 35B 低 3.6 分。DeepGrove 还演示了 Maple-Preview 在 MacBook Pro M5 Pro 上以 281.5 tok/s 的速度完整解答 IMO 2024 第一题(满分 7/7),整个推理过程不到 30 秒。

需要注意的局限:DeepGrove 自己承认这是一个专注于纯推理能力的预览版,在 agentic benchmark(工具调用、代码执行等任务)上表现不佳。他们计划在正式版中通过扩展训练来补齐。

iPhone 上的 127 tok/s 是怎么做到的

DeepGrove 在 iPhone 上对比了 Maple-Preview 和 Ternary Bonsai 27B(Qwen3.6 27B 的三值量化版)。同样是做一道胡萝卜蛋糕的食谱,Maple-Preview 在约 10 秒内完成回复(127 tok/s),Bonsai 27B 在 6 分钟后仍在生成(9.6 tok/s)——13 倍的差距。

造成差距的核心原因有三层:

第一层是激活参数量。Maple-Preview 每次推理激活 1.49B 参数,Bonsai 27B 虽然也是 MoE 架构但激活参数更多。在移动设备上,内存带宽是主要瓶颈,激活参数越少,需要从内存读取的数据越少。

第二层是层数。Maple 只有 24 层,更少的层意味着更短的顺序计算链。Transformer 推理时每生成一个 token 都要完整跑一遍所有层,层数直接影响延迟。

第三层是 FlashHead。标准输出头在词表很大时(Maple 的词表未公开,但通常在 10 万-25 万之间)会成为显著的开销。FlashHead 将这一步的计算量压缩到原来的 20% 左右。

在 Mac mini M4 上的实测数据(来自 GitHub README):

芯片输出头解码速度 (tok/s)Prefill 速度 (tok/s)峰值内存
M4标准16910756.51 GB
M4FlashHead21810756.69 GB
M5 Pro标准35937736.73 GB
M5 ProFlashHead39538576.92 GB

本地运行指南

Maple-Preview 的权重已在 HuggingFace 上开源(deepgrove/maple-2bit-mlx),运行环境基于 Apple Silicon 的 MLX 框架。DeepGrove 提供了一个 mlx-lm 的 fork,包含 Maple 模型定义和 FlashHead 支持。

bash
# 环境要求:Apple Silicon Mac + uv 包管理器
git clone https://github.com/deepgrove-ai/mlx-lm-deepgrove.git
cd mlx-lm-deepgrove
./setup.sh
source .venv/bin/activate

# 下载权重(约 5.3 GB)
hf download deepgrove/maple-2bit-mlx --local-dir maple-2bit-mlx

# 单次生成
python -m mlx_lm generate --model ./maple-2bit-mlx --trust-remote-code --flash-head \
  --prompt "Write a haiku about a grove." --temp 1.0 --top-p 0.95 --top-k 20

# 交互式对话
python -m mlx_lm chat --model ./maple-2bit-mlx --trust-remote-code --max-tokens -1 \
  --temp 1.0 --top-p 0.95 --flash-head

--flash-head 参数启用 FlashHead 加速。需要注意的是,当前的 mlx-lm fork 使用的是 MLX 标准构建(为保证可移植性),DeepGrove 表示将在近期发布更快的自定义库。

权重转换工具也包含在内,支持将 BF16 的 Maple 权重流式转换为三值格式,过程中不需要将 38 GB 的源模型完整载入内存:

bash
python -m mlx_lm.ternary /path/to/maple-bf16 -o maple-2bit-mlx --flash-head

端侧自适应学习:一个有趣的方向

Maple-Preview 还展示了一个实验性功能:端侧权重自适应。在演示中,用户提到自己有素食饮食习惯后,模型在夜间自动生成训练数据并对自身权重做微调(约 10-20 分钟,峰值内存 5.9 GB)。第二天,当用户询问皮革包推荐时,模型给出了合成材料的替代建议。

作为对比,同样场景下的 Claude Sonnet 5(开启记忆功能)未能将素食偏好泛化到皮革制品的推理上。

这个功能目前还处于早期实验阶段,但它指向了一个有潜力的方向:当模型足够小、足够快时,个性化的权重级学习在消费设备上变得可行。DeepGrove 将这一机制称为「dreaming」——模型在空闲时根据用户交互自动生成数据并训练自身。

这意味着什么

Maple-Preview 的核心贡献在于证明了三值权重训练可以产出高质量的推理模型。在此之前,1-bit/2-bit 量化模型要么性能严重下降(如 LFM2 24B-A2B 在 benchmark 上平均只有 27.4%),要么需要大幅增加参数量来补偿精度损失。Maple-Preview 以 20B 的总参数量、1.49B 的激活参数,在推理 benchmark 上达到了 35B 模型的水平。

对于端侧 AI 部署而言,这意味着:

内存门槛大幅降低。5.31 GB 的检查点可以在 8 GB 内存的设备上运行(含操作系统开销),16 GB 设备可以同时处理 131K token 的长上下文。相比之下,同级别的 4-bit 量化模型通常需要 12-15 GB 的模型内存。

推理延迟接近实时。在 M4 Mac mini 上 218 tok/s 的速度意味着一个 500 token 的回复在 2.3 秒内生成完毕。在 iPhone 上的 127 tok/s 也远超人类阅读速度(约 5-8 tok/s)。

能耗优势。三值权重的加法运算比浮点乘法能耗低得多,这对电池供电的移动设备至关重要。DeepGrove 没有公布具体能耗数据,但算术运算量的减少直接转化为功耗的降低。

当然,Maple-Preview 还是一个预览版。它的 agentic 能力未经充分训练,通用对话质量可能不如经过大量 RLHF 的商业模型,推理能力也还有提升空间(GPQA-D 上 73.5% 的得分说明科学推理仍有短板)。但作为一个技术验证,它清晰地展示了三值权重训练路线的潜力:低精度不一定是性能的妥协,如果从一开始就将效率作为架构设计的第一原则。


来源:DeepGrove Maple-Preview Model Card · GitHub: deepgrove-ai/mlx-lm-deepgrove · Hacker News 讨论