Prhub

#35632 [Fix] Keep deterministic GDN prefill on Triton

原始 PR 作者 mmangkad 合并时间 2026-08-20 19:38 文件变更 2 提交数 2 评论 5 代码增减 +60 / -2

执行摘要

修复确定性推理下 GDN prefill 后端选择,强制 Triton

PR #34859 让 SM90 上的确定性推理默认使用 FlashInfer GDN prefill,但 FlashInfer 的 prefill 是 batch 敏感的,无法保证确定性,这违背了确定性推理的语义。PR 的目标是恢复 Triton prefill,确保确定性推理的稳定性。

该 PR 值得精读,因为它展示了如何在性能优化与确定性保证之间做权衡,并提供了清晰的错误处理方式。建议关注 gdn_backend.py 中的策略函数和新增的校验函数。

讨论亮点

该 PR 有 5 条评论,均为 CI 重跑指令和结果,无实质讨论。Reviewer BBuf 批准了 PR,没有反对意见。

实现拆解

  1. 修改确定性模式下的默认策略:在 flashinfer_gdn_prefill_default 中增加 get_exec().deterministic.enable_deterministic_inference 的条件,当确定性推理启用时直接返回 None,使默认后端回退到 Triton。
  2. 新增显式校验函数:新增 _validate_gdn_linear_attn_backends,在 GDNAttnBackend 初始化时调用,若确定性推理且 prefill 后端为 FlashInfer,则抛出 ValueError,拒绝启动。
  3. 补充测试:在 test_gdn_prefill_backend_policy.py 中新增两个测试,分别验证默认策略在确定性模式下不选 FlashInfer,以及显式指定 FlashInfer 时抛出异常。测试类改为 CustomTestCase 以支持更好的错误处理。
文件 模块 状态 重要度
python/sglang/srt/layers/attention/linear/gdn_backend.py 核心逻辑 modified 6.73
test/registered/unit/layers/attention/test_gdn_prefill_backend_policy.py 测试 modified 6.44

关键符号

_validate_gdn_linear_attn_backends flashinfer_gdn_prefill_default

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

评论区精华

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

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

风险与影响

该修改主要影响确定性推理模式下的性能:在 SM90 GPU 上启用 --enable-deterministic-inference 时,prefill 默认不再使用 FlashInfer,可能带来性能回退,但这是为了保证确定性的必要取舍。校验函数在 GDNAttnBackend 初始化时抛出异常,可能影响显式指定 FlashInfer 的现有配置,但这是有意为之,需要用户调整配置。

影响面集中在 GDN prefill 后端选择逻辑,主要影响使用 SM90/SM100 GPU 且启用确定性推理(--enable-deterministic-inference)的用户。该修改确保这些用户获得稳定、可重复的推理结果,代价是可能牺牲部分性能。

潜在性能回退 配置变更

关联 Issue

未识别关联 Issue

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

完整报告

参与讨论