人工智能大模型预训练模型优化模型评测【免费下载链接】DeepSpecDeepSpec: a full-stack codebase for training and evaluating speculative decoding algorithms项目地址https://gitcode.com/gh_mirrors/de/DeepSpec点击查看免费下载DeepSpec 是一个面向投机解码Speculative Decoding草稿模型训练与评估的全栈开源代码库覆盖数据准备、草稿模型实现、训练与评测脚本四大环节内置 DSpark、DFlash、Eagle3 三种草稿模型算法。本文以仓库 README.md 为主线结合 scripts/data/README.md 与各核心模块源码完整讲解从环境搭建、三阶段工作流数据准备 → 训练 → 评估、配置体系到已发布 checkpoint 复现的每一个环节读完即可按仓库默认配置端到端跑通一套 Qwen3-4B 草稿模型的训练与评测。DeepSpec 定位为投机解码训练更聪明的草稿模型投机解码的核心思路是用一个轻量草稿模型draft model快速生成候选 token再由目标模型target model如 Qwen3、Gemma并行验证并拒绝采样在保证输出分布不变的前提下显著加速推理。DeepSpec 正是为这一场景打造的完整工程栈它包含数据准备工具、草稿模型实现、训练代码与评估脚本见 README.md 的项目描述。当前仓库内置三种草稿模型DSparkConfidence-Scheduled Speculative Decoding with Semi-Autoregressive GenerationarXiv:2607.05147DFlasharXiv:2602.06036Eagle3arXiv:2503.01840。从目录结构看仓库可划分为四块scripts/数据、训练、评估三个阶段的 shell 与 Python 脚本config/按算法 × 目标模型组织的训练配置dflash / dspark / eagle3 各含 qwen3_4b、qwen3_8b、qwen3_14b、gemma4_12bdeepspec/核心 Python 包含 data缓存与数据集、modeling各算法建模、trainer训练器、eval评估器、utils分布式/配置/采样等工具eval_datasets/gsm8k、math500、aime25、humaneval、mbpp、livecodebench、mt-bench、alpaca、arena-hard-v2 等评测数据。环境准备安装 Python 依赖python -m pip install -r requirements.txtrequirements.txt 中锁定了核心版本例如torch2.9.1、transformers5.10.2、numpy2.4.4、triton3.5.1、sentencepiece0.2.1、safetensors0.7.0等数据准备环节额外依赖datasets4.8.5与openai2.6.1用于调用 OpenAI 兼容的推理服务。文件头注释提醒如默认 wheel 与机器 CUDA 环境不匹配需安装对应 CUDA 版本的 torch。需要注意数据准备阶段需要额外安装一个推理引擎来承载目标模型如 SGLang、vLLM、TGI只要暴露 OpenAI 兼容的/v1端点即可详见 scripts/data/README.md。SGLang 不在 requirements.txt 中需单独安装例如pip install sglang[all]。三阶段工作流每一阶段的产出都是下一阶段的输入DeepSpec 的端到端流程分三步串联前一步的输出直接喂给下一步见 README.md阶段做什么关键产出1. 数据准备下载 prompts、用目标模型重生成答案、构建目标缓存训练 JSONL 目标缓存默认 Qwen3-4B 约 38 TB2. 训练基于缓存的 target 输出训练草稿模型~/checkpoints/project_name/exp_name/step_*3. 评估在基准任务上测量投机解码接受率各数据集上的接受率指标表阶段一数据准备Data Preparation数据管线默认以Qwen/Qwen3-4B为目标模型共三步下载并切分 prompt 数据 → 用目标模型重生成 assistant 回答 → 预计算训练所用的目标缓存。切换其他目标模型如 Gemma时只需修改模型名--model/model_path并按该模型的推荐生成设置调整采样参数--temperature、--top-p、--top-k、--min-p同时把示例输出路径里的qwen3_4b字样一并改名。默认输出如下train_datasets/perfectblend_train.jsonl train_datasets/qwen3_4b/perfectblend_train_regen.jsonl ~/.cache/deepspec/qwen3_4b_target_cache默认假设单机 8 张可见 GPUGPU 较少时需在 shell 脚本中修改num_workers与CUDA_VISIBLE_DEVICES。Step 1下载并切分数据数据源为mlabonne/open-perfectblend训练切分写入 JSONL留出的 user turns 写入eval_datasets/python scripts/data/download_and_split.py \ --dataset-name mlabonne/open-perfectblend \ --test-size 0.05 \ --train-output-path train_datasets/perfectblend_train.jsonl \ --test-output-dir eval_datasets \ --skip-existing产出train_datasets/perfectblend_train.jsonl eval_datasets/perfectblend.jsonl该脚本的其他可选参数见 scripts/data/download_and_split.py包括--split默认train、--sample-size只处理前 N 条源数据、--seed默认 42、--test-output-name默认perfectblend.jsonl。内部会将数据源的human/gpt/chatgpt/bing/bard角色映射为user/assistant校验每行对话以 user 开头、内容非空--skip-existing表示两个目标文件都已存在时直接跳过。Step 2用 Qwen3-4B 重生成回答这一步先启动目标模型的推理服务再对训练集逐条重生成答案。示例使用 SGLang也可替换为任何 OpenAI 兼容引擎。在第一个终端启动本地 sglang 服务bash scripts/data/launch_sglang_server.sh默认在端口30000–30007启动 8 个Qwen/Qwen3-4Bworker日志写到logs/sglang_qwen3_4b/。从 launch_sglang_server.sh 的源码看脚本会为每个 worker 设置独立的--nccl-port从 31000 起、--dtype bfloat16、--mem-fraction-static 0.9并附带 300 秒心跳监控与退出清理逻辑。在另一个终端重生成答案python scripts/data/generate_train_data.py \ --model Qwen/Qwen3-4B \ --server-address \ 127.0.0.1:30000 \ 127.0.0.1:30001 \ 127.0.0.1:30002 \ 127.0.0.1:30003 \ 127.0.0.1:30004 \ 127.0.0.1:30005 \ 127.0.0.1:30006 \ 127.0.0.1:30007 \ --concurrency 32 \ --temperature 0.7 \ --top-p 0.8 \ --top-k 20 \ --min-p 0 \ --max-tokens 4096 \ --disable-thinking \ --resume \ --input-file-path train_datasets/perfectblend_train.jsonl \ --output-file-path train_datasets/qwen3_4b/perfectblend_train_regen.jsonl产出train_datasets/qwen3_4b/perfectblend_train_regen.jsonl如有样本失败会写入train_datasets/qwen3_4b/perfectblend_train_regen_error.jsonl。该脚本的其余参数见 scripts/data/generate_train_data.py还包括--repetition-penalty、--num-samples、--is-reasoning-model、--is-gpt-oss以及互斥的--enable-thinking/--disable-thinking通过chat_template_kwargs的enable_thinking传入。启动时会先并行探测各 server 是否可用然后按--concurrency限流轮询分发请求并支持--resume断点续跑通过统计输出/错误文件行数计算偏移量。进入 Step 3 前如果 sglang 与缓存构建共用 GPU需要先停掉 sglang 服务。Step 3构建目标缓存Target Cache训练循环直接读取预计算的目标缓存而不是反复运行目标模型。构建命令CUDA_VISIBLE_DEVICES0,1,2,3,4,5,6,7 python scripts/data/prepare_target_cache.py \ --config config/dspark/dspark_qwen3_4b.py \ --train-data-path train_datasets/qwen3_4b/perfectblend_train_regen.jsonl \ --output-dir ${HOME}/.cache/deepspec/qwen3_4b_target_cache \ --local-batch-size 16存储警告目标缓存为整个训练集按 token 存储隐藏状态体积极大。默认Qwen/Qwen3-4B设置下约需38 TB磁盘。运行前务必确认--output-dir所在文件系统空间充足占用随数据集规模、序列长度与目标隐藏维度缩放。若存储受限可缩小训练集或减少配置中的model.target_layer_ids捕获层数越少缓存越小。产出即 scripts/train/train.sh 消费的缓存目录~/.cache/deepspec/qwen3_4b_target_cache该脚本其他参数见 scripts/data/prepare_target_cache.py--train-data-path可重复传入以合并多个 JSONL--min-loss-tokens默认 14过滤监督 token 过少的样本--max-shard-bytes默认 64 GiB控制单个 shard 文件大小--local-batch-size默认 32--num-workers默认 4。脚本通过向目标模型指定层注册 forward hook 捕获隐藏状态run_target_forward_with_hookstarget_layer_ids中的-1表示嵌入层输出。目标缓存的底层格式从 deepspec/data/target_cache_dataset.py 可以看出缓存协议当前版本TARGET_CACHE_VERSION 2目录包含manifest.json版本、样本数、shard 数、target_layer_ids、hidden_size、各 dtype、dtype 等元数据、samples.idx每样本一条定长索引记录记录各张量的文件内偏移与shard-*.bin数据分片张量按样本对齐存储input_ids为 int32attention_mask/loss_mask为 uint8target_hidden_states多个目标层 concat与target_last_hidden_states均为 bf16训练时由CacheDataset通过mmap零拷贝按需读取只保留少量打开的 shard 句柄max_open_shards4LRU 淘汰写入端采用后台线程的AsyncTargetCacheWriter异步落盘各 rank 先写本地_tmp/rank_*最后由 rank 0 汇总、重排 shard 并生成全局索引与 manifest。一键包装脚本以上三步合并为 scripts/data/prepare_data.sh运行bash scripts/data/prepare_data.sh包装脚本将默认参数集中定义模型Qwen/Qwen3-4B、配置config/dspark/dspark_qwen3_4b.py、8 worker、并发 32、温度 0.7 等。需要手动控制各阶段启停、调整采样参数、减少 GPU 或检查中间产物时使用上面的逐条手动命令即可。阶段二训练草稿模型bash scripts/train/train.sh启动机制不是标准 torchrunscripts/train/train.sh 的头部注释明确说明本地启动复刻的是仓库自带的 node launcher 语义并非标准 torchrun——train.py 会自行按每张可见 GPU 派生一个 workertorch.multiprocessing.spawn(main, nprocstorch.cuda.device_count())总 worker 数由CUDA_VISIBLE_DEVICES决定。当MASTER_ADDR/MASTER_PORT与RANK/WORLD_SIZE未设置时init_dist 默认按单节点本地运行处理master 地址127.0.0.1端口29500。选择算法与目标模型config_path通过config_path指向 config/ 下的某个配置即可选择算法与目标模型例如默认的config/dspark/dspark_qwen3_4b.py。仓库提供的公开配置清单## dflash config/dflash/dflash_gemma4_12b.py config/dflash/dflash_qwen3_4b.py config/dflash/dflash_qwen3_8b.py config/dflash/dflash_qwen3_14b.py ## dspark config/dspark/dspark_gemma4_12b.py config/dspark/dspark_qwen3_4b.py config/dspark/dspark_qwen3_8b.py config/dspark/dspark_qwen3_14b.py ## eagle3 config/eagle3/eagle3_gemma4_12b.py config/eagle3/eagle3_qwen3_4b.py config/eagle3/eagle3_qwen3_8b.py config/eagle3/eagle3_qwen3_14b.py训练脚本默认写法target_cache_dir${target_cache_dir:-${HOME}/.cache/deepspec/qwen3_4b_target_cache} CUDA_VISIBLE_DEVICES0,1,2,3,4,5,6,7 python train.py \ --config config/dspark/dspark_qwen3_4b.py \ --opts data.target_cache_path${target_cache_dir}用环境变量target_cache_dir即可覆盖缓存目录无需改脚本。--opts覆盖机制不改配置文件的改参方式--opts可按点分键路径覆盖任意配置字段值按 Python 标量int/float/bool/str解析可重复使用该标志设置多个字段例如--opts data.target_cache_path${target_cache_dir} \ --opts train.lr3e-4 \ --opts train.local_batch_size2其底层实现见 deepspec/utils/config.py 的parse_opts_to_config对每个keyvalue沿.拆分的路径逐层下钻未知键会抛出KeyError值通过yaml.safe_load解析。配置加载load_config会直接执行 Python 配置模块并收集其中定义的顶层对象因此配置本身是可编程的——例如 config/dspark/dspark_qwen3_4b.py 末尾的finalize_cfg(cfg)会在配置解析完成后被调用见 finalize_config自动把logging.checkpoint_dir与logging.tensorboard_dir拼为~/checkpoints/project_name/exp_name与~/tensorboard/project_name/exp_name。local_batch_size是每卡微批大小显存充裕时如 80 GB 卡可提到 4 或 8 以提升 GPU 利用率OOM 时保持 1无需改配置文件即可通过--opts train.local_batch_size4覆盖。配置参数详解以 DSpark / Qwen3-4B 为例config/dspark/dspark_qwen3_4b.py 是训练侧的完整参数清单拆解如下通用project_name deepspec、exp_name dspark_block7_qwen3_4b决定 checkpoint 与 TensorBoard 目录、seed 42。model 段参数默认值含义target_model_name_or_pathQwen/Qwen3-4B目标模型来自 deepspec/utils/constant/public.py 的常量QWEN_3_4B另有 8B/14B/Gemma-4-12B 常量block_size7每个 anchor 上的草稿位置数即一次提议的草稿 token 数num_draft_layers5草稿骨干层数target_layer_ids[1, 9, 17, 25, 33]从目标模型捕获的层列表供草稿骨干作为上下文特征mask_token_id151669噪声占位 token idnum_anchors512每样本采样的 anchor 块数markov_rank256Markov 头的秩0 表示禁用markov_head_typevanillaMarkov 头类型vanilla/gated/rnnconfidence_head_alpha1.0置信度头损失权重0 表示禁用confidence_head_with_markovTrue置信度头是否结合 Markov 特征loss_decay_gamma4.0损失按块内位置指数衰减的 gammace_loss_alpha0.1交叉熵损失权重l1_loss_alpha0.9草稿-目标概率分布 L1 距离损失权重train 段trainer_cls Qwen3DSparkTrainerEagle3 对应Qwen3Eagle3Trainer、lr 6.0e-4、warmup_ratio 0.04、weight_decay 0.0、precision bf16、local_batch_size 1、global_batch_size 512、num_train_epochs 10、max_train_steps None按 epoch 推算、max_grad_norm 1.0、sharding_strategy no_shard、torch_compile True。logging 段logging_steps 10、checkpointing_steps 3000。data 段target_cache_path None由--opts注入、chat_template qwen、max_length 4096、num_workers 4。对照 config/dflash/dflash_qwen3_4b.py 可以看出算法差异DFlash 配置显式markov_rank 0禁用 Markov 头、confidence_head_alpha 0.0禁用置信度头、ce_loss_alpha 1.0/l1_loss_alpha 0.0纯 CE 损失其余骨架一致。Eagle3 则走 config/eagle3/eagle3_qwen3_4b.py参数变为ttt_length 7、step_loss_decay 0.8、draft_num_hidden_layers 1、torch_compile False。训练循环的源码级实现训练器继承 deepspec/trainer/base_trainer.py 的BaseTrainer训练阶段的关键机制数据加载训练集为 CacheDataset配合CUDAPrefetcherdeepspec/data/cuda_prefetcher.py与StatelessResumableDistributedSamplerdeepspec/utils/distributed.py跨 epoch 边界确定性流式重排支持任意偏移续训。批大小换算_compute_training_schedule要求global_batch_size能被world_size * local_batch_size整除据此算出梯度累积步数、每 epoch 步数若max_train_steps为空则由 epoch 数推算。模型构建build_models用目标 checkpoint冻结初始化草稿模型的 embedding 与 lm_headinitialize_embeddings_and_head(..., freezeTrue)其余参数从零训练。精度与并行precision映射到 bf16/fp16/fp32sharding_strategy支持full_shard/shard_grad_op/no_shard/hybrid_shard/hybrid_shard_zero2模型以 FSDP 包装torch_compileTrue时训练模型会经torch.compile(model, dynamicTrue)编译。优化器BF16 优化器配合 warmup 学习率调度deepspec/utils/optim.py 中的WarmupScheduler。断点续训与托管启动时discover_latest_checkpoint自动发现最新 checkpoint 并恢复模型、优化器与步数通过 deepspec/utils/hfai_suspend.py 的SuspendController支持被中断前保存并挂起每checkpointing_steps保存一次 checkpoint并可通过auto_eval_command见 deepspec/utils/constant/public.py在保存时自动提交评估。训练结束后 checkpoint 写到~/checkpoints/project_name/exp_name/step_*。硬件方面默认配置与脚本假设单机 8 卡GPU 较少时减少CUDA_VISIBLE_DEVICES即可。阶段三评估bash scripts/eval/eval.shscripts/eval/eval.sh 对训练好的草稿 checkpoint 运行 eval.py在 eval_datasets/ 的投机解码基准上评测。需设置两个关键变量target_name_or_path—— 草稿模型训练所针对的目标模型默认Qwen/Qwen3-4B须与训练配置一致draft_name_or_path—— 草稿 checkpoint例如~/checkpoints/deepspec/dspark_block7_qwen3_4b/step_latest用step_latest指向最新 checkpoint也可换成step_N或下表中的已发布 Hugging Face repo ID。评测任务与命令行参数eval.py 内置任务列表数据集名 最大样本数任务样本数任务样本数gsm8k500livecodebench500math500500mt-bench80aime2530alpaca500humaneval164arena-hard-v2500mbpp256命令行参数eval.py--max-new-tokens默认 2048、--temperature默认 1.0、--confidence-threshold默认 0.0置信度头提前停止阈值仅当为 0.0 时才收集置信度校准指标、--tensorboard-dir、--stepTensorBoard 记录步数、--seed默认 980406。运行时eval.py从草稿 checkpoint 读取AutoConfig按其architectures[0]从EVALUATORS映射表中选择对应的评估器Qwen3DSparkModel→Qwen3DSparkEvaluatorGemma4DSparkModel→Gemma4DSparkEvaluatorEagle3 同理同样按可见 GPU 数 spawn 多进程每个 rank 分片处理样本最后 all-reduce 汇总。评测指标与投机解码循环评估器以 deepspec/eval/base_evaluator.py 为基类。generate_decoding_sample实现了标准的投机解码循环目标模型 prefill 后草稿模型提出一个DraftProposalverify_draft_tokens用目标模型并行验证并以拒绝采样决定接受前缀accept_prob clamp(target_prob / draft_prob, max1.0)的累积积未接受处从目标分布做残差采样循环持续到max_new_tokens或停止符。最终输出表格包含每数据集的指标#proposedraft_tokens_per_proposal每次提议的平均草稿 token 数accept_lenacceptance_length平均接受长度verify_rate接受 token 数 / 提议 token 数accept_ratepos逐位置接受率。结果可用--tensorboard-dir--step落盘 TensorBoardlog_tensorboard 记录每个数据集的draft_tokens_per_proposal、accept_length、verify_rate与逐位置接受率。DSpark 的置信度头校准可选DSpark 独有若草稿模型带置信度头confidence_head_alpha 0评估时会顺带输出置信度校准指标。从 deepspec/eval/dspark/confidence_head.py 可见ConfidenceHeadRecorder把每个位置的置信度预测对 step 概率做 cumprod 得到前缀接受概率与真实接受前缀比对统计ECE期望校准误差、AUROC、Brier score与可靠性图reliability diagram输出reliability_diagram.png。注意仅当--confidence-threshold 0.0时才收集这些指标设置阈值 0 时build_dspark_proposal会按置信度提前截断草稿提议长度deepspec/eval/dspark/draft_ops.py 的_confident_prefix_length用于评测置信度调度式的加速效果。已发布 Checkpoint 与复现注意事项README 中发布的 checkpoint 即论文 Table 1 所用模型。每个 checkpoint 均由对应目标模型以非 thinking 模式在open-perfectblend数据上生成训练数据后训练得到且是 config/ 下对应训练配置的直接产物算法Qwen/Qwen3-4BQwen/Qwen3-8BQwen/Qwen3-14Bgoogle/gemma-4-12B-itEagle3deepseek-ai/eagle3_qwen3_4b_ttt7deepseek-ai/eagle3_qwen3_8b_ttt7deepseek-ai/eagle3_qwen3_14b_ttt7deepseek-ai/eagle3_gemma4_12b_ttt7DFlashdeepseek-ai/dflash_qwen3_4b_block7deepseek-ai/dflash_qwen3_8b_block7deepseek-ai/dflash_qwen3_14b_block7deepseek-ai/dflash_gemma4_12b_block7DSparkdeepseek-ai/dspark_qwen3_4b_block7deepseek-ai/dspark_qwen3_8b_block7deepseek-ai/dspark_qwen3_14b_block7deepseek-ai/dspark_gemma4_12b_block7重要提示若要在新论文中引用这些结果必须使实验设置与本仓库训练配置一致否则对比没有意义。面向特定领域使用时建议对草稿模型再次微调以获得更好效果尤其是目标模型预期以 thinking 模式运行时。支持算法一览仓库当前内置三种草稿模型其建模实现分别位于 deepspec/modeling/dspark/ 与 deepspec/modeling/eagle3/DSpark基于锚点anchor 半自回归块的草稿模型。从 deepspec/modeling/dspark/common.py 可以看到其训练机制从序列中采样若干 anchor 位置每个 anchor 后接block_size个草稿位置草稿骨干以目标模型的target_layer_ids隐藏状态为上下文特征加上带mask_token_id的噪声嵌入并行前向整个块损失在 deepspec/modeling/dspark/loss.py 中由 CE对目标 token、L1对目标概率分布与置信度头损失加权组合并按块内位置以loss_decay_gamma指数衰减可选 Markov 头vanilla/gated/rnn见 deepspec/modeling/dspark/markov_head.py与置信度头为 DSpark 的核心创新。DFlash与 DSpark 共用模型骨架与训练器但配置上禁用 Markov 头与置信度头、使用纯 CE 损失可视为 DSpark 的消融/基线版本。Eagle3基于 TTTTest-Time Training思想的草稿模型配置如ttt_length 7、step_loss_decay 0.8、draft_num_hidden_layers 1训练/评估实现见 deepspec/modeling/eagle3/ 与 deepspec/eval/eagle3/evaluator.py。许可证、致谢与引用DeepSpec 以MIT 许可证发布见 LICENSE其中包含按各自许可证适配的第三方代码完整归属记录见 NOTICE。README 致谢中特别说明训练框架整体与 Eagle3 实现借鉴自 SpecForgeApache-2.0Eagle3 的建模、损失、优化器、注意力与评估代码均有适配受影响文件在 NOTICE 中列明DFlash 草稿模型设计与训练配方来自 DFlash 项目MIT目标模型家族支持 Qwen3 与 Gemma。引用本仓库及 DSpark 论文时可使用 README 中给出的 BibTeX 条目misc{cheng2026dspark...}title 为DSpark: Confidence-Scheduled Speculative Decoding with Semi-Autoregressive GenerationarXiv:2607.05147。仓库亦欢迎新算法的贡献。赞分享人工智能大模型预训练模型优化模型评测【免费下载链接】DeepSpecDeepSpec: a full-stack codebase for training and evaluating speculative decoding algorithms项目地址https://gitcode.com/gh_mirrors/de/DeepSpec点击查看免费下载相关推荐Flair训练器详解从数据准备到模型评估全流程Flair训练器详解从数据准备到模型评估全流程 Flair训练器是构建最先进NLP模型的核心工具通过ModelTrainer类实现从数据预处理到模型训练的完NLP深度学习机器学习PaddleOCR 文字识别模型训练全流程指南数据准备、训练调优、评估与部署PaddleOCR 文字识别模型训练全流程指南数据准备、训练调优、评估与部署 本文以 PaddleOCR 文本识别Text Recognition任务为主人工智能计算机视觉深度学习U-Net训练全流程从数据准备到模型评估的完整教程U Net训练全流程从数据准备到模型评估的完整教程 想要掌握深度学习图像分割技术U Net作为医学影像领域的经典模型通过编码器 解码器架构实现像素级分割。示例工程深度学习计算机视觉人工智能创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考