LFM2.5-DSpark:推测解码实现 3.2x 推理加速攻略 · 干货攻略

  • 链接:https://x.com/maximelabonne/status/2085384100416782828
  • 分类:x-tips
  • 来源:X @maximelabonne
  • 作者:Jay
  • 更新:2026-08-26
  • 仓库:LiquidAI/LFM2.5-2.6B-DSpark

这是什么

DSpark(Decoding Spark)是 Liquid AI 为 LFM2.5 系列模型发布的推测解码(Speculative Decoding)draft 模型系列,覆盖三个尺寸:

Draft 模型 目标模型 Draft 参数量
LFM2.5-1.2B-Instruct-DSpark LFM2.5-1.2B-Instruct ~295.7M
LFM2.5-2.6B-DSpark LFM2.5-2.6B ~327.7M
LFM2.5-8B-A1B-DSpark LFM2.5-8B-A1B ~327.7M

Draft 模型架构:5 层纯注意力(attention-only)解码器 + 隐藏状态投影层 + Markov 链 head + 置信度调度验证器,总计 ~300M 参数。每个 draft 模型比目标模型轻约 10 倍,以"sidecar"方式附加在目标模型上,不替换目标模型权重。

核心机制(DSpark 三组件): 1. DFlash-style 并行主干:基于目标模型上下文特征单次前向传播,为所有 draft token 产出 hidden states 2. Markov 链 head:轻量级顺序 head,建模相邻 token 间的依赖关系,提升后续位置接受率 3. 置信度调度验证器:预测每个 token 的存活概率,修剪低置信度后缀(验证成本大于收益时跳过)


为什么值得关注

@maximelabonne(Liquid AI Head of Post-Training)分享了什么

Maxime Labonne 在 X 上宣布了 DSpark draft checkpoints 发布,核心信息:

  • 推理吞吐提升高达 3.18x:H100 上 LFM2.5-8B-A1B-DSpark MATH500 场景 428→1362 tok/s;MacBook M4 Max 上 LFM2.5-2.6B 61→139 tok/s,均为 vendor 实测数字
  • 零质量损失:Greedy 解码下输出与目标模型完全一致(每条被拒绝的 token 都被目标模型正确 token 替代),benchmark pass@1 / exact match 不变
  • 函数调用延迟降低 57%:多工具场景下 LFM2.5-2.6B 函数调用延迟平均降低 57%,对 Agent 场景意义重大
  • 即开即用:发布当天支持 llama.cpp 和 SGLang,无需等待上游合并

解决了什么问题

LLM 推理在 decode 阶段是内存带宽受限(memory-bound)——延迟主要来自把权重从 DRAM 加载到 SRAM,而非密集计算。传统自回归 decode 每个 token 都要完整加载一次目标模型权重,效率极低。

推测解码用轻量 draft 模型批量生成候选 token,再让目标模型一次前向传播验证全部候选——一次权重加载验证多个 token,把内存带宽瓶颈转为计算受限(compute-bound),从而提速。

但现有推测解码方案(如 EAGLE-3、DFlash)各有局限:DFlash 并行主干无法建模 token 间依赖,接受率随位置下降;Markov 链 head 只建模相邻 token,无法利用更长上下文。

DSpark 将两者结合,并加入置信度调度,在 LFM 线性状态空间模型架构上首次实现生产级推测解码


核验过程

官方来源

  1. HuggingFace 官方博客huggingface.co/blog/LiquidAI/lfm25-dspark):完整 benchmark 数据表、架构说明、三组件原理、命令行示例、模型下载链接
  2. Liquid AI 官方博客liquid.ai/blog/lfm2.5-dspark):与 HF 博客数据一致,含 H100 和 M4 Max 双平台 5 数据集详细对比图
  3. HuggingFace 模型卡LiquidAI/LFM2.5-2.6B-DSpark):确认 draft 模型为 LiquidAI/LFM2.5-2.6B 的 drafter;SGLang 约 2.6x 加速

交叉验证结论

说法 来源 核验结果
LFM2.5-2.6B DSpark H100 mean 2.67x(323→864 tok/s) HF 博客 + 官方博客 ✅ 完全一致
LFM2.5-2.6B DSpark M4 Max mean 2.27x(61→139 tok/s) HF 博客 + 官方博客 ✅ 完全一致
LFM2.5-8B-A1B DSpark H100 mean 2.54x(418→1074 tok/s) HF 博客 + 官方博客 ✅ 完全一致
LFM2.5-8B-A1B DSpark M4 Max mean 1.18x(90→106 tok/s) HF 博客 + 官方博客 ✅ 完全一致(MoE 限制)
MATH500 上 H100 3.06x(326→1000 tok/s,LFM2.5-2.6B) HF 博客 + 官方博客 + Unite.AI 报道 ✅ 三方一致
8B-A1B H100 MATH500 3.18x(428→1362 tok/s) HF 博客 + 官方博客 + Unite.AI 报道 ✅ 三方一致
函数调用延迟降低 57%(多工具场景平均) HF 博客 + 官方博客 + daily.dev ✅ 三方一致
Greedy 输出与目标模型完全一致,pass@1 不变 HF 博客 ✅ 确认(机制保证)
Draft 模型 ~300M 参数(5 层 attention-only) HF 博客 ✅ 确认
Day-one 支持 llama.cpp(PR#27383)和 SGLang(PR#31041) HF 博客 ✅ 确认
M4 Max 使用 FP16 GGUF + Metal,H100 使用 BF16 + SGLang HF 博客 ✅ 确认(两种不同配置)

⚠️ 注意:H100 基准使用 SGLang + BF16,M4 Max 基准使用 llama.cpp + Metal + FP16 GGUF。两种配置和引擎均不同,数字不可直接横向比较。X 帖中笼统说"3.2x"是取 H100 MATH500 的峰值;实际使用中加速比取决于硬件、模型和数据集。


上手步骤

方式一:SGLang(GPU 推荐)

前置条件:需要 SGLang build 含 DSpark LFM2 target 支持,对应 PR #31041

python -m sglang.launch_server \
 --model-path LiquidAI/LFM2.5-2.6B \
 --speculative-algorithm DSPARK \
 --speculative-draft-model-path LiquidAI/LFM2.5-2.6B-DSpark \
 --speculative-draft-attention-backend flashinfer \
 --disable-radix-cache \
 --mem-fraction-static 0.75 \
 --port 30000

然后用 OpenAI-compatible 接口调用:

curl http://localhost:30000/v1/chat/completions \
 -H "Content-Type: application/json" \
 -d '{
   "model": "LiquidAI/LFM2.5-2.6B",
   "messages": [{"role": "user", "content": "Explain speculative decoding in 3 sentences."}]
 }'

基准命令(不加 DSpark):去掉三个 --speculative-* 参数即可做对比。

方式二:llama.cpp(Apple Silicon / 边缘推荐)

前置条件:需要含 DSpark 支持的 llama.cpp build,对应 PR #27383,需启用 Metal 加速。

llama-server -m LFM2.5-2.6B-F16.gguf \
 -md LFM2.5-2.6B-DSpark-F16.gguf \
 --spec-type draft-dspark \
 --spec-draft-n-max 10 \
 --spec-draft-n-min 0 \
 -fa on \
 -ngl 99

参数说明: - -m / -md:分别指定目标模型和 draft 模型(两边都用 F16;QAD Q4_0 + DSpark 的组合官方未测试) - --spec-type draft-dspark:指定推测解码类型 - --spec-draft-n-max 10:最大 draft 长度(drafter 配置 block size 为 9,n-max 会被 clamp 到此值) - -fa on -ngl 99:启用 Flash Attention 和加载全部层到 GPU

下载 Draft 模型

所有 DSpark draft checkpoints 均已在 HuggingFace 发布:

模型 Safetensors GGUF
LFM2.5-1.2B-Instruct-DSpark HF 仓库 HF GGUF
LFM2.5-2.6B-DSpark HF 仓库 HF GGUF
LFM2.5-8B-A1B-DSpark HF 仓库 HF GGUF

验证 DSpark 是否生效

SGLang 响应会包含 usage 字段中 draft_tokens(或用 --log-prefix-draft);llama-server 输出中每个 response 的 timing 行会报告 draft_n / draft_n_accepted,例如 draft_n=7/5 表示提议 7 个 token、接受 5 个。


坑与适用边界

坑 1:MoE 模型(8B-A1B)在 Apple Silicon 上收益极小

LFM2.5-8B-A1B 是 MoE(Mixture of Experts)架构。llama.cpp Metal 后端验证 k 个 token 会激活更多 expert,权重流量反而更大。M4 Max 上 8B-A1B DSpark 仅获得 1.18x 加速(H100 上 2.54x)。如果你要在 MacBook 上跑 8B,请勿期待 DSpark 带来显著加速

坑 2:H100 和 MacBook 基准不可横向比较

H100 基准用 SGLang + BF16,M4 Max 用 llama.cpp + Metal + FP16 GGUF——引擎、精度、后端均不同。X 帖流传"3.2x 加速"是 H100 MATH500 峰值,不宜直接与 MacBook 对比。

坑 3:DSpark 和 QAD 尚未联合测试

QAD(量化感知蒸馏)指南中提到 1.2B/2.6B QAD Q4_0 在同一 repo。DSpark draft 模型目前仅提供 F16 版本,Q4_0 draft + Q4_0 target 的组合 Liquid AI 尚未测试,混用需自行 benchmark。

坑 4:温度必须为 0

所有官方 benchmark 均在 temperature=0(greedy)下测量。Markov head 的接受率依赖于精确分布匹配,温度扰动会破坏这一前提,导致接受率大幅下降、加速效果消失。DSpark 不适用于 temperature>0 的场景

坑 5:Draft 模型和目标模型版本必须严格匹配

Draft 模型只能配对对应的目标模型版本(1.2B-Instruct 只能配 1.2B-Instruct,不能配 2.6B)。混用会导致接受率极低甚至输出错误。

适用边界

  • 最适合:H100/A100 等数据中心 GPU 部署 LFM2.5-2.6B 或 1.2B;对函数调用延迟敏感的 Agent 场景;需要在 MacBook M 系列上跑 LFM2.5-2.6B 且对交互速度有要求
  • 不适合:MacBook + 8B-A1B(MoE Metal 后端限制);需要 temperature>0 的生成任务;追求绝对最低内存占用(draft 模型增加约 300M 额外权重)
  • 与 QAD 的关系:两者可互补——QAD 解决量化精度损失,DSpark 解决推理吞吐,QAD+DSpark 联合使用官方未测试

一句话结论

LFM2.5-DSpark 以 ~300M 参数的 sidecar draft 模型实现 H100 上平均 2.67x / MacBook M4 Max 平均 2.27x 推理加速,零质量损失;在 SGLang(GPU)或 llama.cpp(Metal/边缘)均可即开即用,是 LFM2.5 系列本地/云端部署提效的实用手段。

数据来源:HuggingFace 官方博客 huggingface.co/blog/LiquidAI/lfm25-dspark + Liquid AI 官方博客 liquid.ai/blog/lfm2.5-dspark + HuggingFace 模型卡 LiquidAI/LFM2.5-2.6B-DSpark;H100 基准使用 SGLang + BF16,M4 Max 使用 llama.cpp + Metal + FP16,两套配置不可直接横向比较。