Prhub

sgl-project/sglang · 标签视图

标签列表

聚合结果

attention 相关 PR

2026-09-16

#39648 dsv4.1: Top-k kernels and candidate selection

原始 PR · 作者 hnyls2002 · 合并时间 2026-09-16 14:54

功能 重要性 8.38 洞察度 8.00

DSV4.1 新增索引器内核,重做 Top-K v2 分派

建议精读,重点关注三处:`topk.py` 的探测驱动 JIT 宏与 `plan_topk_v2` 默认值语义、`topk_impl.cuh` 的 NaN padding 与 `coarse_bin_lower_bound` 的 round-to-even 补偿、`topk_v2.cuh` 的 `PageTransform` 解耦与 cluster 8/16 分派。四个值得学习的设计决策:用 NaN 而非极小值填充以保护合法的 -inf;用 ULP 步进而非重算 fp16 bin 处理 round-to-nearest-even;用 `cudaOccupancyMaxActiveClusters` 而不是 SM 数除法定 pool 尺寸(GPC 约束);把 page-table 变换从选择内核解耦成独立结构以便两种输出模式共用。若负责索引器或 Blackwell 性能,建议先补齐 BBuf 要求的边界 benchmark 再信任这些阈值,并为三个新内核补注册测试。

功能 重要性 8.01 洞察度 7.00

抽出 DSV4.1 独立内核与 Python 封装,作为 PR 栈首层合入

值得精读,尤其是准备接 #38798 / #39648 的工程师与负责 DSV4.1 内核维护的同学。 - 优先看三处设计决策:`small_gemm_bf16.py` 的 `MAX_M` 策略上限与 `can_use_*` 契约(调用方负责回退,内核只做「形状正确即最快」);`mxfp8_epilogue.py` 的 UE8M0 舍入 + 128x4 swizzle 偏移 + padding 槽位裁剪策略(多 CTA 写集合不相交的隐含证明);`q_rope_store.py` 的 prefill/decode 分支与 int64 偏移、PDL 开关。 - 阅读时把每个 `assert` 当成调用契约而非防御式编程:这些断言定义了调度层必须满足的形状、stride 与设备前提。 - 跟进项建议:(a) 按 BBuf 的意见把 `candidate_blocks.py` / `indexer_postprocess.py` 的独立覆盖补进本层或明确移交 #39648;(b) 为 `engram_gather` 补 owned / unowned ID 的用例;(c) 刷新 PR 描述中已过期的 byte-identical 声明与文件统计,避免后续审计引用失效结论;(d) 如计划支持非 Blackwell 平台,尽早确认 `can_use_*` 谓词在所有调用点的使用方式。

#39547 [AMD][bugfix] Fix DSV4 MTP crash

原始 PR · 作者 RolaoDenthu · 合并时间 2026-09-16 12:10

缺陷修复 重要性 4.99 洞察度 3.00

修复 AMD 上 DSV4 MTP 崩溃,用 is_dspark 门控 D2H 优化

不值得精读,但值得记录。它展示了性能优化遭遇平台差异时的一种最小成本处理方式:不整体回滚,而是用 is_dspark 将优化限定在已知安全的平台。对 AMD 后端维护者而言,建议确认 is_dspark 覆盖了实际崩溃环境,并考虑补充自动化测试,防止回归。

缺陷修复 重要性 5.48 洞察度 3.00

修复 NPU 多 stage PP 启动崩溃,去掉失效属性引用

值得花几分钟精读,但不是因为改动的技术难度,而是因为它揭示了一个可复用的工程教训:删除公共属性(#38293)与新增对该属性的引用(#38249)在时间上交错,最终由 NPU 用户在启动阶段埋单。阅读时建议重点关注三点:① 作者在 PR body 中的根因回溯链路,理解「跨 PR 集成缺口」是如何形成的;② `all_gather_group` 从条件取值改为恒取 `attn_tp_group` 的语义变化,是否会影响下游 all-gather 分支;③ 该路径为何没有自动化测试,以及在 NPU CI 中加入 `pp-size > 1` 启动冒烟用例的可行性。若你是 NPU 相关代码的维护者,建议顺手排查其他平台分支(XPU/ROCm)是否存在同样指向 `require_attn_tp_allgather` 的残留引用。

性能优化 重要性 8.87 洞察度 6.00

新增预填充图固定上下文参数,C4 索引器内存开销降 58%

值得精读。该 PR 展示了"固定上下文元数据 + 超限 eager 回落"的设计模式,以及如何把一个新的性能开关安全地嵌入 prefill CUDA graph 核心路径:能力标记(supports 属性)、启动期校验、守卫双保险(can_run_graph + 后端内 raise)。工程上也有借鉴意义:review 驱动的 getattr 禁令促使数据字段显式化,参数解析收敛到 server args 层而不是散落在 runner 中。关注后续 DSV4 系列演进(如 #39677)对这一契约的扩展。

缺陷修复 重要性 6.92 洞察度 5.00

修复首 token 延迟元数据与复用层 attention 索引

值得快速精读。两个修复都很小但边界处理值得借鉴:index_attention_layers_by_global_id 用对象引用相等区分“复用”与“重复”,并保留位置索引表的语义;convert_to_output_meta_info 用 first_token_time > created_time 的守卫防止脏延迟输出。关注点:复用层返回原始表后,调用方对表长度的假设是否仍然成立。

2026-09-15
缺陷修复 重要性 5.50 洞察度 5.00

调整 QSA indexer 流上下文,复用已有 CUDA 流

建议精读但不必深挖:整个 diff 只有 4 行,真正值得关注的是三点——(1) stream 上下文的 fork 点从 QKV 准备之前后移到之后,以及 `wait_stream` 为什么没有跟着移动;(2) `record_stream` 与成对 `wait_stream` 构成的跨流契约;(3) PR 标题的“流不断创建”缺少量化与根因说明。若后续要修改 `_prepare_qkv_gate` 或 indexer 的读集合,务必回到这段代码确认 `wait_stream` 的语义仍然成立;同时建议给这类多流 overlap 改动补一条可复现的流数量断言或 profiler 基线,避免只靠截图背书。

测试 重要性 4.12 洞察度 5.00

DCP KL 测试切换 MLA 后端并回退 bf16 KV

值得精读,但重点不在代码(+2/-4 的测试参数切换,几分钟即可看完),而在 motivation 里的因果链:一次 attention backend 解析逻辑的改动(#35770 unwrap `HybridLinearAttnBackend.full_attn_backend`)如何让 Kimi Linear prefill 意外落入 FP8 量化钩子,并把 KL 从 0.003-0.006 抬到 0.007-0.013。建议关注三个设计决策:(1) 为什么选择换后端而不是放宽阈值——保持了测试的判别力,是正确的取舍;(2) 为什么 `cutedsl_mla` 更合适——它是 SM100 上的 DCP 原生 MLA 内核,且已被 Kimi Linear DCP 测试采用,避免为单个测试保留一条非主路径;(3) 遗留问题——是否应把“tokenspeed_mla + fp8 KV + DCP”组合的精度损失记录为已知限制,或单独加一个小规模的 FP8 KL 守护测试,并考虑把阈值从 0.01 收紧到约 0.008 以保留回归灵敏度。