执行摘要
- 一句话:新增 DeepSeek MTP 并行加载测试
- 推荐动作:值得关注其测试设计思路:_spec_decode_num_drafts 指标用于验证 drafter 非空,避免无声回退;_token_match_ratio 以相似度容忍硬件差异。对于负责测试策略的工程师,这是一个良好的多并行测试模板。
功能与动机
防止类似 #29545 (TP+EP 加载时崩溃) 的 bug 在没有回归门的情况下合入。跟踪 Issue #36264。
实现拆解
实现分为 5 步:
- 定义并行配置枚举:通过 InlineConfig dataclass 定义 TP=2、EP=2、EP=2+EPLB、PP=2(跳过)四种配置。
- 构造引擎参数:_inline_kwargs 根据配置生成 LLM 初始化参数字典,包括启用 EPLB 时的窗口和步长参数。
- inline 测试函数:test_deepseek_mtp_load_inline 为每个配置分别构建 spec 和 no-spec 的 LLM,生成输出后使用 _token_match_ratio 检查 token 序列的相似度不低于 0.8,并通过 _spec_decode_num_drafts 确认 drafter 实际生效(非空)。
- 数据并行测试函数:test_deepseek_mtp_load_dp 使用 AsyncLLM 模拟 DP=2 的启动方式,生成输出并比较 spec/no-spec 结果。
- CI 配置:在 .buildkite/test_areas/spec_decode.yaml 中新增 Spec Decode DeepSeek MTP Parallel Load (B200) 任务,依赖 EAGLE 和 spec decode 相关源文件,使用 2 卡 B200 运行。
关键文件:
tests/v1/e2e/spec_decode/test_mtp_parallel_load.py(模块 并行加载测试;类别 test;类型 test-coverage;符号 _token_match_ratio, InlineConfig, _inline_kwargs, _generate_token_ids_inline): 新增测试文件,覆盖 DeepSeek MTP 在 TP/EP/EPLB/DP 并行配置下的权重加载和正确性验证。
.buildkite/test_areas/spec_decode.yaml(模块 CI配置;类别 config;类型 configuration): 新增 CI 任务配置,确保 DeepSeek MTP 并行加载测试在 B200 硬件上被定期执行。
关键符号:_token_match_ratio, _inline_kwargs, _generate_token_ids_inline, _spec_decode_num_drafts, test_deepseek_mtp_load_inline, test_deepseek_mtp_load_dp, _generate
评论区精华
review 中的核心讨论包括:
风险与影响
- 风险:低风险:本 PR 仅添加测试文件和 CI 配置,不修改任何核心代码。风险点包括:
- 新 CI 任务使用 2 卡 B200,增加了资源占用,但设为 optional(可选),不影响主流水线。
- 测试模型为随机权重的小型模型(5 层 DeepSeek-V3),不会产生实际推理误差。
- 如 benchmark 显示,inline 测试运行约 493 秒(约 8 分钟),DP 测试约 38 秒,总 CI 时间增加可控。
- 影响:对用户无直接影响;对团队的好处是新增了 DeepSeek MTP 在多种并行配置下的回归测试,防止未来类似 #29545 的 bug 逃避检测。对系统(CI)的影响是新增一个可选但依赖多 GPU 的测试任务。
- 风险标记:新增多GPU测试, CI时间增加, 依赖随机权重模型
关联脉络
- PR #29545 [Bugfix] Fix DeepSeek R1 MTP weight loading: 该 PR 修复了 DeepSeek MTP 在 TP+EP 下的权重加载崩溃,本测试旨在防止此类回归。
- PR #36264 [Tracking issue]: NVIDIA CI improvements: 本 PR 是该跟踪项的一部分,旨在增加 NVIDIA CI 的测试覆盖。
- PR #38104 [WIP] Pipeline parallel support for DeepSeek MTP: PP=2 测试被跳过,引用此 PR 作为依赖。
参与讨论