并行草稿模型一次前向就能起草一整块 token,但作者认为官方发布的系统没用满这份加速:单请求时每步只接受少量 token 却要读一遍全部目标权重;批处理时逐请求的验证开销让加速比大约减半;而且最优做法随服务场景、草稿模型、目标模型和显卡而变。SpecPilot 是一个自动优化循环:每轮用代价模型找出当前系统离上限差距最大的环节,多个智能体并行探索方向并合并成功的改动,内核子智能体专调离显存带宽上限最远的内核;用 token forcing 把每个输出 token 和原版逐一对照,防止“奖励作弊”;结构化记忆把验证过的机制带到下一轮和新部署。仓库放出的是它为 6 种部署分别找到的推理引擎(基于裁剪版 SGLang),附启动、测速和校验脚本。
点赞 16 · 代码星数 82
理由
- 作者称不训练、不损失质量,单请求下相对自回归的加速从原版的 4.46 倍提到 10.87 倍,批处理下从 1.94 倍提到 3.93 倍;README 表格里 H100 上 Qwen3.8-27B + DFlash2 从 3.95 倍到 8.86 倍,并附从全新克隆重跑四个 H100 设置的加速比和置信区间。
- 找到的机制可以单独拿来读:无损 12 位权重格式 W12(BF16 拆成三个 4 位平面、在 GEMM 寄存器里逐位还原,作者称单独使用就让 8–30B 稠密模型的 BF16 解码快 1.15–1.26 倍)、两级验证、面向混合循环结构目标模型的树验证,以及三种批处理机制。
- 能照做:代码 Apache-2.0,每个设置只用一张卡,脚本负责装环境、按固定版本下载检查点、起 OpenAI 兼容服务和对比测速;抱脸当日点赞 16、代码星数 82(只代表关注度)。
用法
- 建环境:bash scripts/setup_env.sh(Python 3.11、torch 2.13 + CUDA 13.0,依赖锁定);下载某个设置的检查点:bash scripts/download_models.sh h100_c1_qwen38-27b_dflash2(设置名就是 settings/ 下的目录名)。
- 起服务:bash scripts/serve.sh h100_c1_qwen38-27b_dflash2 final 0 在 0 号卡 30000 端口起 SpecPilot 引擎;把 final 换成 stock / ar 起原版和自回归对照;接口兼容 SGLang HTTP 和 OpenAI。
- 测速:bash scripts/bench.sh <设置> final-1 0,再用 scripts/compare.py speed 比较加速比、scripts/score.py 给 gsm8k / humaneval / math500 / mbpp 打分;每个引擎第一次启动要编译内核,先空跑一遍再计时。
风险
- 硬件窄:只在 H100 80GB 和 RTX PRO 6000 Blackwell 96GB 上做过,RTX PRO 6000 的内核只为 sm_120a 编译;torch 2.13 + CUDA 13.0 需要 R580 驱动,旧驱动要靠前向兼容库。
- 只覆盖 6 种固定组合(Qwen3.8-27B / Muse-Glimmer-30B 配 DFlash2 / DSpark),仓库放的是找到的引擎,没看到智能体优化循环本身的启动方法,换模型或换草稿模型无法直接复用。
- “无损”指贪心解码下每个 token 都由目标模型决定;README 写明输出与自回归并非逐位一致(批量验证的计算顺序不同,近似平局可能翻转),附带的打分只作完整性检查;加速数字均为作者报告。
编辑:适合已经在单卡上用 Qwen3.8-27B 配 DFlash2 / DSpark 做服务的团队;做推理优化的读者可以重点看 W12 权重格式和两级验证两部分。