Prhub

sgl-project/sglang · 标签视图

标签列表

聚合结果

mla 相关 PR

2026-09-15
测试 重要性 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 以保留回归灵敏度。

缺陷修复 重要性 7.28 洞察度 6.00

修复 DCP 下 MLA 重删 CPU 备份/恢复的 KV 索引越界崩溃

值得精读,尤其对维护 DCP / PD 分离 / HiCache / KV 内存池的同学。重点关注三处设计决策:① 把索引换算从 host pool 方法提升为 `layers/dcp/layout.py` 纯函数的动机与收益;② `_write_loc_dcp_span` + `write_loc_is_dcp_resolved` 这对契约如何避免统一池上的双重换算;③ 为什么可以安全删除「整加宽页」断言——理解 `seqlen - 1` 的 ragged 前缀与「起始页对齐」这个更弱前提的差别。若只关心结论,可记住两点:崩溃触发条件是 DCP>1 时用加宽 id 直接索引 rank 局部 KV buffer;修复方式是 `indices[dcp_rank::dcp_size] // dcp_size`。合并后建议跟进两件事:为 `maybe_dcp_kernel_indices` 补一个起始对齐的显式校验或更强的测试守护,以及排查作者提到的「恢复请求重复 token」独立缺陷。

2026-09-14
缺陷修复 重要性 2.86 洞察度 6.00

DSV4 K 缓存位置读取移到 PDL 等待之后,避免写到陈旧槽位

值得精读,但读法要偏「知识点」而非「代码量」:diff 只有一行,真正的价值在 PR body 与两条评论串起的 PDL 契约推理。 重点关注:1)为什么 `out_loc` 必须晚读,而 `position` 与 `freqs_cis` 可以早读——这条「元数据就绪边界」的判断标准可以直接迁移到其它 fused kernel;2)DarkSharpness 提出的「等待点后置是为 prefetch overlap 服务」这一设计意图,以及作者如何用一行改动折中,这是性能与正确性权衡的典型样本;3)作者给出的验证方式(standalone GPU trials + CUDA-graph 微基准 + 明确的「非端到端」免责说明)值得作为 kernel 层修复的验证模板;4)遗留项:没有回归测试,建议后续补一个能构造「前置 kernel 刚产出 cache location」的最小用例,并顺带排查同目录其它 PDL kernel 是否存在同类提前读取。

性能优化 重要性 7.03 洞察度 7.00

gfx95 上把 prefill 计算预算按原始 token 计费,batch 精确填满 chunked-prefill-size

**值得精读,但重点不在 diff 的行数。** 建议按以下顺序看: 1. `PrefillAdder._update_prefill_budget` 新增的 `compute_charge` 参数——这是全 PR 的设计核心,理解“KV 预算按 page、计算预算按 token”的分工边界,以及为什么两个计算预算必须同时切换(否则先归零者会留下取整余量)。 2. `add_one_req` 的新 `elif self.exact_chunk_fill:` 分支——注意 `chunk_tokens_limit` 而非 `rem_chunk_tokens` 的选择、`truncation_align_size` 对齐、以及 `_check_prefill_tile_budget` 的插入位置,这三点决定了它和 SWA / tile budget 特性的边界。 3. 最后一个 merge commit 对上游 `raw_extend_input_len` 的处理,是“让本地改动贴合上游口径”的良好实践样本。 **改进建议**:为 `exact_chunk_fill` 补一个可直接断言的单元测试(例如 page_size=64、chunk=16384、prompt 混合,断言 `rem_chunk_tokens` 归零且 extend 总长恰为 16384),因为当前等价性与正确性完全依赖作者的一次性场景重放,无法防止后续回归。

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

验证路径复用解码融合准备,MLA 每层 preparation 由 5 次 launch 降为 1 次

推荐精读,尤其是正在做 MLA / speculative verify 性能优化或统一内存池相关改动的同学。值得关注的设计决策有三点:(1) 用 `fused_fp8_query` 单哨兵同时控制「跳过重复 KV 写入」和「跳过 query concat」,比在多处重复判断 gate 更难写错;(2) 复用 `forward_decode` 的守卫序列(`save_kv_cache` + 静态 gate + `_resolve_fused_write_loc`)而不是新建路径,使 decode 与 verify 的融合语义天然一致;(3) 明确把 dispatch 修复与 kernel 选择(CUDA vs Triton)切开,压缩了评审面。 阅读时建议同步确认两件事:一是 PR body 承诺的 `test/registered/kernel/attention/test_trtllm_mla_fp8_prepare.py` 是否已在其他 PR 落地,否则需补上 verify 路径的回归测试;二是真实权重(Kimi K3 + trtllm_mla + fp8 KV + MTP)的精度与吞吐结论是否已补齐,因为当前所有数字都来自 acceptance length=1.0 的 dummy 诊断,不能直接当作上线依据。

2026-09-13
功能 重要性 7.56 洞察度 7.00

外部链接器支持草稿 KV 打包并新增严格校验

值得精读:这是外部链接器从「只存目标 KV」走向「目标 + 草稿统一打包」的关键一步,`layer_mapping` 的 `int | Sequence[int]` 放宽与 `_with_packed_draft_mapping` 的层号复用技巧是整条 Unified Cache 功能线里最值得借鉴的设计点。阅读时建议重点关注三处:(1)`_with_packed_draft_mapping` 的 `(layer_mapping[depth], target_device_layer_num + depth)` 约定如何与 components 的拼接顺序耦合,任何一侧顺序变化都会静默错配;(2)`_build_hicache_draft_plan` 中新增的 fail-fast 是否是最终形态——Leoyzen 在评论里提出的「草稿部分失败只丢 draft 还是整条 entry」还没有答案,若采纳 fail-soft,这里需要配套改动;(3)DSV4 与 DSA 两条策略的校验强度不一致(page size、KV/indexer 数量),建议补齐 DSV4 侧校验并补一个 `is_unified_kv=True` 且带草稿池的负向用例。另外建议在合并后回看 CI:GPU linker 用例在 rerun 时两条 lane 都失败,需要确认是 flaky 还是真实回归。

2026-09-12
文档 重要性 4.38 洞察度 5.00

MI355X MXFP4 配方改用 triton DSA 后端

值得精读(尤其是负责 AMD/ROCm 部署与内核选型的工程师),但读的重点不是 diff 本身,而是它给出的选型判据。建议关注三件事:一,`tp` 变化如何改变每 rank 的 query head 数并进而决定 DSA 后端(16 heads/rank 走 gfx950 Triton 稀疏 MLA,8 heads/rank 只能留 tilelang);二,在 `verified: false` 单元上“先改配方、后补基准”的推进节奏,以及用 `verified` 字段隔离对外发布数字的做法;三,把选择依据直接写成配置旁注释、并在 cookbook 同步标注边界,避免后续被“统一成 tilelang”改回。后续建议:为本组配方补一个 DSA 后端数值一致性/性能回归用例(哪怕只是 small-batch decode 的 SNR 门限),并在 `GLM-5.2.mdx` 的 AMD 总述段落加一句“triton 为 ROCm 默认,tilelang 仅用于已发布数字对应的 TP8/gfx942 配方”以消除口径歧义。

功能 重要性 8.78 洞察度 7.00

aiter 后端接入 DCP,Kimi-K3 在 MI355X 跑通 tp8/dcp8

值得精读,尤其是负责 AMD 注意力后端、DCP/长上下文分片或 Kimi-K3 部署的工程师。建议重点看三处设计决策:(1) `_forward_verify_dcp()` 把 target verify 拆成「本 rank 前缀 + 仅 rank 0 计算 draft window + 本地 merge_state_triton」的两段式结构,以及为绕开 varlen 索引重复而引入的 2-D token table 与 `use_2d_view`;(2) aiter DCP 选择自然对数 LSE 并通过 `is_mla_dcp_lse_base_on_e()` 固化底数约定,直接影响跨 rank 归约的正确性;(3) head 数记账从单 rank 的 `num_head_padded` 拆成 gather 后的 `mla_kernel_num_head_padded`,以及随之放宽的断言带来的风险面。同时请把「无自动化测试 + CI 未跑到 DCP 路径」视为后续必须补齐的债务:任何在此之上继续开发的改动,都应先补一个能在 CI 中真正执行 `--dcp-size > 1` 的注册测试,再动这些路径。