今天在 GitHub Trending 上看到一个有意思的项目:DeepSeek 开源的 DeepSpec,这是一个专为投机解码(Speculative Decoding)设计的全栈训练与评估框架,帮助研究者训练更高效的 Draft 模型,从而显著加速大模型的推理过程。
一、项目概述
DeepSpec 是 DeepSeek 开源的全栈代码库,用于训练和评估投机解码中的 Draft 模型。投机解码是一种在不影响生成质量的前提下大幅加速 LLM 推理的关键技术——它使用一个小型 Draft 模型快速生成候选 token,再由大目标模型进行验证。
项目核心包含三大模块:
- 数据准备:下载 prompts、重新生成目标模型答案、构建目标缓存
- 模型训练:支持三种前沿 Draft 算法——DSpark、DFlash 和 Eagle3
- 模型评估:在 9 个标准化 benchmark 上测量投机解码的接受率
DeepSpec 目前支持 Qwen3 和 Gemma 系列作为目标模型,并提供了完整的预训练 checkpoint 供直接使用。
二、技术原理
投机解码的工作流程
投机解码的核心思想是"以小博小"——用一个轻量级 Draft 模型快速生成多个候选 token,然后由大目标模型并行验证。如果 Draft 模型猜对了大部分 token,推理速度可以提升 2-3 倍甚至更多。DeepSpec 的完整流程分为三阶段:
- 数据准备:从训练集中下载 prompts,使用目标模型重新生成标准答案,并构建目标缓存。注意默认配置下缓存可能高达 38TB(以 Qwen/Qwen3-4B 为例),需要充分规划存储。
- 训练:Draft 模型以目标模型的输出为目标进行训练,学习预测目标模型的生成行为。
- 评估:在标准化 benchmark 上测量接受率和加速比。
三种 Draft 算法
DeepSpec 集成了三种主流的 Draft 模型架构:
| 算法 | 特点 |
|---|---|
| Eagle3 | 基于 Transformer 的 Draft 模型,利用目标模型的隐藏状态作为额外输入 |
| DFlash | 高效的轻量级 Draft 设计,通过 flash-style attention 优化推理速度 |
| DSpark | DeepSpec 的核心贡献,详见配套论文《DSpark》 |
训练框架设计
从 train.py 可以看到,训练流程的设计非常工程化:
def main(local_rank):
args = parse_args()
seed_all(int(args.seed))
if local_rank == 0:
print(json.dumps(args, indent=4, cls=CustomJSONEncoder), flush=True)
trainer = args.train.trainer_cls(local_rank, args)
trainer.train()
trainer.clean_up()
关键设计点:
- 使用
torch.multiprocessing.spawn实现多 GPU 并行,每 GPU 一个 worker - 通过 config 文件驱动训练配置,支持
--opts覆盖单个字段 - 集成了 git SHA 记录,方便复现训练结果
评估框架
eval.py 中通过配置驱动的 Evaluator 选择机制:
EVALUATORS = {
"Qwen3DSparkModel": Qwen3DSparkEvaluator,
"Gemma4DSparkModel": Gemma4DSparkEvaluator,
"Qwen3Eagle3Model": Qwen3Eagle3Evaluator,
"Gemma4Eagle3Model": Gemma4Eagle3Evaluator,
"Eagle3DraftModel": Qwen3Eagle3Evaluator,
}
模型架构名称与 Evaluator 类自动映射,支持 9 个标准 benchmark 的一次性评估。
三、安装与快速开始
环境要求
- Python 3.10+
- CUDA 兼容的 GPU(默认配置需要 8 张 GPU,可通过 CUDA_VISIBLE_DEVICES 调整)
- 足够的磁盘空间(数据缓存可能需要 TB 级存储)
安装步骤
# 克隆仓库
git clone https://github.com/deepseek-ai/DeepSpec.git
cd DeepSpec
# 安装依赖
python -m pip install -r requirements.txt
最简运行示例
# 训练(需要先准备好数据)
bash scripts/train/train.sh
# 评估
bash scripts/eval/eval.sh
四、使用方法与实战
数据准备
完整的 Pipeline 需要按顺序执行:
# 1. 下载并分割训练数据
# 2. 重新生成目标模型答案
# 3. 构建目标缓存
⚠️ 存储警告:默认配置下目标缓存可能达到 38TB,建议在 SSD 或大容量存储上运行。
训练配置
训练通过配置文件驱动,例如训练 DSpark 搭配 Qwen3-4B:
bash scripts/train/train.sh
配置路径指向 config/dspark/dspark_qwen3_4b.py,可以通过 --opts 覆盖参数:
bash scripts/train/train.sh --opts train.batch_size=32 train.learning_rate=5e-4
checkpoint 保存于 ~/checkpoints/<project_name>/<exp_name>/step_*。
使用预训练 Checkpoint
DeepSpec 提供了多个预训练 checkpoint 可直接下载使用:
python scripts/eval/eval.sh \
--target_name_or_path Qwen/Qwen3-4B \
--draft_name_or_path deepseek-ai/dspark_qwen3_4b_block7
支持的预训练 checkpoint 已在 Hugging Face 上发布,覆盖 Qwen3-4B/8B/14B 和 Gemma-4-12B 四种目标模型。
多 GPU 适配
默认配置使用 8 GPU,如果 GPU 数量不足:
export CUDA_VISIBLE_DEVICES=0,1,2,3
bash scripts/train/train.sh
五、常见问题与解决方案
安装失败
问题:pip install -r requirements.txt 失败,特别是 torch 依赖。
解决:CUDA torch 需要手动安装匹配版本的 wheel,官方 wheel 可能不适合所有环境。请根据 CUDA 版本从 pytorch.org 安装。
磁盘空间不足
问题:数据准备阶段报磁盘空间错误。 解决:默认缓存约 38TB,可通过修改配置中的缓存路径指向大容量存储卷,或减少数据集大小。
GPU 内存不足
问题:训练时 OOM。 解决:减少 batch size,或降低模型规模(从 Qwen3-14B 降到 4B)。
引用规范
如果使用 DeepSpec 进行学术研究,请注意:
- 使用仓库提供的默认训练配置,确保结果可比性
- 如果目标模型运行在 thinking mode,需要对 Draft 模型进行微调
六、总结
DeepSpec 是 DeepSeek 开源的一个高质量投机解码全栈框架,将数据准备、模型训练和标准化评估整合为一条完整的 Pipeline。它集成了 DSpark、DFlash 和 Eagle3 三种主流 Draft 算法,并提供预训练 checkpoint 供直接使用。
对于从事 LLM 推理加速的研究者和工程师来说,DeepSpec 提供了一个开箱即用的实验平台。它的模块化设计也方便研究者贡献新的 Draft 算法——只需要按照接口规范实现并添加到 EVALUATORS 映射中即可。