资讯动态

如何为SSD扩展新模型?Qwen3/Llama3实现与EAGLE3 Draft开发指南

发布时间:2026/10/16 19:14:17 来源:尧图企业网站定制
【免费下载链接】ssdA lightweight inference engine supporting speculative speculative decoding (SSD).项目地址https://gitcode.com/gh_mirrors/ssd10/ssd点击查看免费下载SSDSpeculative Speculative Decoding是一个轻量级 LLM 推理引擎通过“推测验证并行”的投机解码Speculative Decoding算法实现无损加速。本文以 SSD 中 Qwen3 与 Llama3 两个现成模型实现为蓝本手把手讲解扩展新模型的完整流程并深入剖析 EAGLE3 Draft 模型的架构设计与权重加载要点帮助你在自己的模型上复现 4.0x 解码加速。一、先看懂 SSD一张图理解核心算法SSD 投机推测解码架构与解码速度对比传统投机解码SD中小模型起草Draft和大模型验证Verify在同一硬件上串行执行而 SSD 让两者在不同硬件上并行小模型提前预判大模型可能的验证结果并对所有分支同时投机。猜对了起草开销直接归零。图中右侧柱状图展示了 AR、SD、SSD 三种方案的解码速度对比SSD 达到约 4.0x 加速。引擎层面SSD 已支持 Tensor Parallelism、PagedAttention、CUDA Graphs、torch 编译与前缀缓存模型扩展只需关注模型本体 权重加载 注册三件事。二、新模型落地只需改动的 4 个位置环节文件职责模型定义ssd/models/qwen3.py / ssd/models/llama3.py5 层结构的 torch Module 实现模型注册ssd/engine/model_runner.py按model_type分发模型类权重加载ssd/utils/loader.pysafetensors → 参数映射含 packed 权重路径配置ssd/paths.py模型快照目录的环境变量三、第一步读懂 Qwen3 的 5 类结构每个模型文件都遵循统一的分层套路以 Qwen3ForCausalLM 为例Qwen3AttentionQKV 投影QKVParallelLinear→ 逐 head 的 QK RMSNormRMSHeadNorm→ RoPE → AttentionQwen3MLPgate/up 合并投影 SiluAndMul激活 下行投影Qwen3DecoderLayerpre-norm 结构residual 贯穿流式传递Qwen3ModelEmbedding N 个 DecoderLayer 最终 Normforward(input_ids, positions) → hidden_statesQwen3ForCausalLM加上lm_head与compute_logits并声明packed_modules_mapping⚠️ 注意构造参数中必须透传投机解码相关开关——draft、speculate、spec_k、async_fan_out、draft_async以及张量并行参数tp_group/tp_size这些是 Attention 层支持 SSD 树状注意力的前提见 Qwen3Attention 构造。Qwen3 与 Llama3 的差异点对照 LlamaAttentionQwen3 有 QK NormLlama3 没有rope_thetaQwen3 默认 1,000,000Llama3 默认 500,000Qwen3 保留rope_scalingLlama3 主动置空qkv_biasQwen3 支持来自 configLlama3 恒为 False四、第二步注册模型并配置路径引擎通过 HuggingFace config 的model_type字段分发模型类逻辑在 setup_and_warmup_model_and_cudagraphsmodel_type llama→LlamaForCausalLMmodel_type qwen3→Qwen3ForCausalLM其他类型直接抛ValueError: Unsupported model type因此新模型接入只需导入你的模型类在分发处加一个elif分支。同时按 paths.py 的样式用环境变量如SSD_TARGET_MODEL/SSD_DRAFT_MODEL指向本地快照目录需包含config.json并在 bench_helpers.py 的size_to_model映射中登记模型名。五、第三步让权重对号入座loader.py 的加载规则很简单权重名若命中packed_modules_mapping如q_proj → qkv_proj.q走分片合并加载——这是把 HF 里 4 个独立矩阵合并成 2 个 packed 矩阵的关键否则按参数名直接copy_所以新模型的两条铁律参数命名与 HF 权重 key 一致或提供映射表packed_modules_mapping覆盖所有被合并的投影层。六、EAGLE3 Draft 模型开发要点Eagle3DraftForCausalLM 是 SSD 里最精巧的部分与完整小模型当 Draft路线不同EAGLE3 只用单层 Transformer做投机目标层激活采集LlamaModel前向时在指定的eagle_layers默认[2, L//2, L-3]见 config.py截获残差流拼成3 × d_model_target维的特征fc 投影nn.Linear(3*d_model_target, hidden_size)把目标特征压到 Draft 宽度后续步则复用 Draft 自身的输出做自条件双路拼接输入Eagle3Attention 的qkv_proj输入维度是2 * hidden_size——token 嵌入与条件特征各自过 RMSNorm 后拼接小词表加速lm_head只覆盖draft_vocab_size通过d2t/t2d映射表把小词表 logits 散射回完整目标词表compute_logits权重加载同样有专门通道load_eagle_model 会把midlayer.*前缀映射到model.layer.*、norm.weight映射到final_norm.weight并在 Draft 权重缺失 embedding 时自动从目标模型目录回补hidden_size 需一致。七、验证你的新模型引擎自检与基准测试都在 bench/ 下--eagle会启用 EAGLE3 自动选 Draft如 8B 用EAGLE3_YUHUILI_8B70B 用 SpecForge 版本见 bench_helpers.pycd bench # 同步投机解码70B 目标 1B Draft python -O bench.py --llama --size 70 --gpus 4 --spec --k 6 --b 1 --temp 0 --numseqs 128 --output_len 512 --all # EAGLE3 异步 SSD注意当前限制 Llama 目标、temp0、必须 --async python -O bench.py --llama --size 70 --gpus 5 --eagle --async --k 7 --f 3 --b 1 --temp 0 --numseqs 128 --allQwen 目标则用--qwen --size 32。当前限制提示EAGLE 在 bench 脚本中仅对 Llama 目标开放bench.py 的 assert而Qwen3ForCausalLM也显式禁止了use_eagle参数qwen3.py——若你要扩展 Qwen3 的 EAGLE Draft这正是需要修改的入口。八、常见坑清单 ️model_type没注册启动即报Unsupported model type先补 model_runner 分发rope_theta 不一致EAGLE Draft 的 config 常带错误默认值config.py 会自动用目标模型值覆盖自定义加载时别漏掉packed 权重漏映射显存加载成功但输出乱码优先检查packed_modules_mappinguse_eagle用错位置它必须配 Draft 侧的Eagle3DraftForCausalLM配到LlamaForCausalLM上会触发 assert始终用python -O运行基准关闭 debug 开销 扩展路径总结仿写ssd/models/下的 5 类结构 → 在model_runner.py注册 → 对齐权重命名与 packed 映射 →paths.py配路径 → bench 验证。掌握这套范式GPT-OSS、Kimi-K2.5 等新模型README Roadmap 中的规划接入 SSD 就是水到渠成的事。赞分享【免费下载链接】ssdA lightweight inference engine supporting speculative speculative decoding (SSD).项目地址https://gitcode.com/gh_mirrors/ssd10/ssd点击查看免费下载相关推荐ATAC认证机制Basic Auth与Bearer Token实现ATAC认证机制Basic Auth与Bearer Token实现 在API开发与测试过程中认证Authentication是保障接口安全的重要环节。A人工智能深度学习生物信息学科研Path of Building新手完整教程6个阶段从建号到看懂伤害计算Path of Building新手完整教程6个阶段从建号到看懂伤害计算 《流放之路》的Build规划有多复杂天赋树上千个节点、装备词缀几百条、技能石连接环桌面应用RBush性能基准测试与原生循环和其他库的对比分析RBush性能基准测试与原生循环和其他库的对比分析 RBush是一个高性能的JavaScript R树空间索引库专为2D点和矩形数据设计。本文将通过详细的基创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑