Skip to content

决策翻转:接受共享 decode loop 的 ~2% kernel 回归,换掉两份 online softmax 副本 #8

Description

@holtwood

背景

TLLM-P0-004 的实现计划里,PR-1 要把 decode 的 tile loop 抽成共享模板,让连续 KV 与分页 KV
共用同一份 online softmax。设计包 §10 为它预设了门禁:

必须附 attention_decode 的前后 kernel_bench 对比证明无性能回归;出现可测回归则
退回复制实现。

执行时该门禁被触发:抽取实测给生产 kernel attention_decode 带来 +1.4~2.3% 的可复现
回归
。当时按门禁回退为复制实现,PR-1 未提交,PR-2(#7)改为自持一份寻址实现。
完整证据与测量方法的三次修正见设计包 §10.1。

现在的决定:翻转这个取舍

接受该回归,改回共享 loop。 理由:

  1. 复制方案唯一的风险是"两份实现漂移",而它已经被自动门禁覆盖。feat(cuda): direct paged decode attention kernel (TLLM-P0-004 PR-2) #7 的
    test_paged_direct.cpp 要求 direct 与 legacy 在同一 pool / 块表 / 输入下输出
    逐位相同(12 组几何 × 3 seed)。任何一份 online softmax 被改动而另一份没跟上,
    这个测试会立刻失败。也就是说:复制方案声称的"更独立"优势,其代价(双份维护)
    并不能换来额外的安全保障——安全来自门禁,不来自副本数量。
  2. 量级不划算:+1.42.3% 落在 attention_decode 单个 kernel 上。该 kernel 在 decode
    步中只占一小部分(W8A16 GEMM 才是大头),换算到端到端约 0.1
    0.3%。为这个量级维护
    两份 60 行级的 online softmax(含 __expf、online rescale、final normalize 的
    逐字对应关系)不划算。
  3. 反向收益:共享 loop 让 direct 与 legacy 的差分退化回纯寻址测试——这是设计包
    §4.4/§8 原本的意图,能更精确地定位"寻址错了"还是"归约错了"。

本次决定接受的代价(明确记录,不隐藏)

  • attention_decode(生产 decode 默认路径)在生产架构 sm_120 上会有 +1.4~2.3%、
    最坏 +4.9%(D=128/S=512)的 kernel 时间变化。该数字来自 §10.1 的同进程交替 A/B。
  • 这是已知且已测量的代价,不是"重测一遍希望它消失"。§10.1 已记录:两种规避写法
    (策略按值/按引用、无效行返回零行以消分支)均测到同样回归,扰动来自抽取本身。

不接受的代价

  • 不因此放松任何正确性门禁:共享 loop 之后,direct vs legacy 仍要求逐位相同;
    独立 oracle 对照(TLLM-P0-002)保留;sanitizer 仍为 0 error 门禁。
  • 不把这次翻转用于任何性能声明。kernel 级收益仍只能由后续 benchmark PR 给出。

相关

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions