Prhub

#51310 [Spec Decode] Register Qwen3.6 dSpark acceptance coverage

原始 PR 作者 mgoin 合并时间 2026-08-08 05:07 文件变更 2 提交数 1 评论 0 代码增减 +125 / -103

执行摘要

注册 Qwen3.6 dSpark 接受率与 GSM8K 回归测试

PR body 明确目标:为 RedHatAI/Qwen3.6-35B-A3B-speculator.dspark 与 RedHatAI/Qwen3.6-35B-A3B-NVFP4 添加 dSpark 接受率与 GSM8K 回归覆盖;并指出 'The existing per-model tests are registered as data-backed parameterized cases, so future target/draft architectures can supply their model, evaluation, and reference-metric settings without duplicating the test flow',即通过数据驱动参数化降低后续架构的测试接入成本。同时 'The GSM8K helper also accepts chat-template kwargs so the Qwen3.6 case can disable thinking',支撑 Qwen3.6 关闭思考模式的评估需求。作者还声明已搜索 open PR 确认无重复,并指出 #47390 仅涉及 Qwen3.5 家族运行时支持、与本 PR 互补。

值得精读,特别是数据驱动参数化测试的组织方式与回归阈值设定思路;同时需关注两点:一是 Qwen3.6 参考指标基于单次运行且容差收紧到 5%,建议补充多次测量或放宽容差以避免 CI flaky;二是确认参数化收敛过程中 Gemma4 与 Qwen3 旧用例的参数漂移(FlashInfer sampler 禁用、enforce_eager、attention_backend)是否有意为之,必要时按新配置重新校准参考值。

讨论亮点

无实质技术讨论。claude[bot] 自动审查因 fork PR 被禁用;维护者 tlrmchlsmth 直接批准。工程要点集中在 PR body:作者声明已完成重复性搜索(确认无重复 open PR)、给出 pre-commit 与单用例运行结果(163.08 秒通过,GSM8K accuracy 0.885、acceptance rate 0.41、acceptance length 4.25),并按项目要求披露了 AI 辅助生成与人工复核声明。

实现拆解

  1. 数据驱动重构(tests/v1/e2e/spec_decode/acceptance_rates/dspark/test_dspark.py):新增 frozen dataclass DSparkCorrectnessConfig,将目标模型、草稿模型、参考指标、采样与 LLM 配置集中为字段;删除原独立函数 test_gemma4_dspark_correctness_and_acceptance_rate、fixture dspark_config 及对应的 Qwen3 独立测试,替换为统一的参数化测试。
  2. 参数化注册:定义 QWEN3_DSPARK_DEEPSPEC、GEMMA4_DSPARK_DEEPSPEC、QWEN3_6_DSPARK_SPECULATORS 三个配置实例,经 @pytest.mark.parametrize 挂载到 test_dspark_correctness_and_acceptance_rate;断言统一为 实际值 >= 参考值 * REGRESSION_TOLERANCE,容差从旧的 0.9 收紧到 0.95。
  3. GSM8K 评估辅助扩展(tests/evals/gsm8k/gsm8k_eval.py):evaluate_gsm8k_offline 新增 chat_template_kwargs 参数并透传给 llm.chat(),使 Qwen3.6 用例可传入 {"enable_thinking": False} 关闭思考模式。
  4. 新增 Qwen3.6 用例:配置 num_speculative_tokens=8、language_model_only=True、use_chat_completions=True、200 题 GSM8K 子集;实测 accuracy 0.885、acceptance rate 0.41、acceptance length 4.25,单用例约 163 秒。
  5. 验证配套:pre-commit 指定文件钩子与 pytest --collect-only 通过,另有参数化后的三用例串行验证。无部署、schema 或配置变更。
文件 模块 状态 重要度
tests/v1/e2e/spec_decode/acceptance_rates/dspark/test_dspark.py dSpark 验证 modified 7.19
tests/evals/gsm8k/gsm8k_eval.py GSM8K 评估 modified 4.2

关键符号

test_dspark_correctness_and_acceptance_rate evaluate_gsm8k_offline

分析完成后,这里会展示 LLM 生成的相对完整源码片段和详细注释。

评论区精华

没有提炼出高价值讨论线程

当前评论区没有形成足够清晰的争议点或结论,后续有更多讨论时会体现在这里。

风险与影响

1) 阈值可靠性:Qwen3.6 参考指标来自单次 200 题 GSM8K 测量(body 明确 'Reference from 200 GSM8K questions'),旧用例则基于 5~12 次运行的统计;新断言用 REGRESSION_TOLERANCE=0.95(5% 容差)替代旧的 0.9,acceptance rate 实测 0.41 对比阈值 0.3895 余量极小,temperature=1.0 概率采样下容易 flaky。
2) 行为静默变化:参数化收敛未完全保留旧配置——原 Gemma4 用例设置的 VLLM_USE_FLASHINFER_SAMPLER=0 环境变量丢失(DSparkCorrectnessConfig.disable_flashinfer_sampler 字段在测试体中未被消费),enforce_eager 从 True 变为默认 False;原 Qwen3 用例 attention_backend='FLASH_ATTN' 变为默认 None、gpu_memory_utilization 从 0.9 变 0.92。参考值未按新配置重测,存在断言失真可能。
3) CI 成本:35B 级 checkpoint 下载与加载、单用例 163 秒、三用例串行,CI 时长与磁盘/带宽开销上升。
4) 正确性影响:纯测试变更,不影响运行时路径。

用户/运行时:无影响,未触碰 vllm/ 源码。团队:获得 Qwen3.6 dSpark 的持续回归护栏,且数据驱动框架让后续 DSpark 目标/草稿架构接入成本降为新增一个 DSparkCorrectnessConfig 实例。CI:新增 qwen3.6-speculators 用例,带来额外的模型下载(35B NVFP4 + speculator)与约 163 秒/用例的执行时间。测试生态:dspark 测试从单模型独立函数演进为参数化注册,可维护性提升,但容差收紧与旧用例参数漂移需要后续关注。

参考阈值来自单次运行 容差收紧至 5% 旧用例参数静默漂移 CI 时长增加

关联 Issue

未识别关联 Issue

当前没有检测到明确关联的 Issue 链接,后续同步到相关引用后会出现在这里。

完整报告

参与讨论