执行摘要
- 一句话:默认禁用 DSA indexer fusion 修复 DeepSeek-V3.2 精度回归
- 推荐动作:该 PR 值得合并,以快速修复 CI 回归。建议在修复 fusion 精度问题后重新评估是否默认启用。相关精度修复工作可参见后续 PR #30342。
功能与动机
根据 PR body,CI 定时全量运行中 test/registered/8-gpu-models/test_deepseek_v32_indexcache.py::TestDeepseekV32IndexTopkPattern 测试失败:gsm8k 精度为 0.9295 / 0.9249,低于阈值 0.93。根因是 DSA indexer Q/K fusion(#27705)导致 DeepSeek-V3.2 精度退化。此前 #30018 已禁用该 fusion,但 #30025 在合并时误将默认值改回 False,导致回归。
实现拆解
变更仅在 python/sglang/srt/environ.py 中一行修改:
- 将
SGLANG_DISABLE_DSA_INDEXER_FUSION 的默认值由 EnvBool(False) 改为 EnvBool(True)。
- 该环境变量控制 DSA indexer 路径中 Q/K fusion 的启用状态:
True 表示禁用 fusion,False 表示启用。
- 变更后,所有使用该环境变量的模块(如
dsa_indexer.py)将在默认配置下跳过 fusion 路径,恢复原始精度。
关键文件:
python/sglang/srt/environ.py(模块 环境配置;类别 source;类型 core-logic): 唯一变更文件,修改了 SGLANG_DISABLE_DSA_INDEXER_FUSION 的默认值,直接影响 DSA indexer 的行为。
关键符号:未识别
关键源码片段
python/sglang/srt/environ.py
唯一变更文件,修改了 SGLANG_DISABLE_DSA_INDEXER_FUSION 的默认值,直接影响 DSA indexer 的行为。
# python/sglang/srt/environ.py
class Envs:
# ... 前面的配置省略 ...
# DSA Backend (canonical names; fall back to SGLANG_NSA_* with deprecation warning)
SGLANG_DSA_FUSE_TOPK = EnvBoolWithAlias(True, deprecated_name="SGLANG_NSA_FUSE_TOPK")
SGLANG_DSA_TOPK_FLASHINFER_DETERMINISTIC = EnvBool(False)
# ... 其他 DSA 配置 ...
# 🔽 本次变更:默认禁用 DSA indexer fusion,以修复 DeepSeek-V3.2 精度回归
SGLANG_DISABLE_DSA_INDEXER_FUSION = EnvBool(True)
# sgl-kernel
SGLANG_SKIP_SGL_KERNEL_VERSION_CHECK = EnvBool(False)
# ... 后续配置 ...
评论区精华
暂无 review 讨论。
风险与影响
- 风险:风险较低。变更仅涉及默认值切换,且提供了充分的本机验证数据(8×H200,5 轮运行):fusion 关闭时平均精度 0.9553,方差极小;fusion 开启时平均精度 0.9306,且存在跨阈值波动。两组数据范围无重叠,确认精度回归确实由 fusion 导致。副作用是关闭 fusion 可能略微增加 stream 数量(#30025 修复后仍可接受),但精度收益远超此代价。
- 影响:影响范围较窄。仅影响使用 DSA indexer fusion 的场景(主要是 DeepSeek-V3.2 等模型在特定评测配置下的推理)。默认禁用后:
- 用户无需手动设置环境变量即可获得稳定精度。
- 性能上可能略逊于 fusion 开启版本,但根据 #30025 的 benchmark,对 TPOT 影响在噪声范围内(+1.96%,t=-1.48)。
- 需要 fusion 的用户仍可通过设置
SGLANG_DISABLE_DSA_INDEXER_FUSION=0 手动启用。
- 风险标记:配置默认值变更, 精度修复
关联脉络
- PR #27705 [DSA] Indexer Q/K fusion (original feature): 引入 DSA indexer Q/K fusion 的 PR,是本次精度回归的根源。
- PR #30018 [Fix] Turn off dsa indexer fusion by default: 最初禁用该 fusion 的 PR,本次 PR 恢复了其变更。
- PR #30025 fix: reorder DSA indexer dual-stream ops to avoid CUDA graph stream explosion: 意外 re-enable fusion 的 PR,本次 PR 仅回退其环境变量翻转。
- PR #30342 Re-enable DSA indexer fusion with accuracy fix?: 讨论中提及的未来 PR,计划在修复精度问题后重新启用 fusion。
参与讨论