Prhub

sgl-project/sglang · 标签视图

标签列表

聚合结果

quant 相关 PR

2026-09-16
缺陷修复 重要性 7.18 洞察度 6.00

合并 autotune 缓存并修复 MXFP4 TP 对齐等六项杂项

值得精读,但只需重点看三个文件:`mxfp4_flashinfer_trtllm_moe.py` 的 `_pad_intermediate_size`(补齐布局与 scale 填充值的选择)、`flashinfer_autotune.py` 的 `flashinfer_autotune_context`(对 FlashInfer `AutoTuner` load/save 语义的绕过方式)、`fp8_utils.py` 的 `block_supported` 守卫(tuple/list 比较这种容易写错的细节)。`scheduler.py`、`fp8.py`、`weight_updater.py` 三处属于清理项,浏览即可。若你是 SM100 MXFP4 TP 配置的使用者,建议按 `print_warning_once` 的提示实测补齐后的吞吐,并与 TP/EP 组合对比;若你是维护者,建议把被删掉的 MXFP4 TP padding 回归用例以更轻量的形式补回,并在文档里明确“补齐只发生在权重加载后、形状契约以 `intermediate_size_per_partition` 为准”。

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

放宽 MoE 入口守卫,MXFP8 dispatch 不再启动崩溃

值得精读,但属于「小改动、大信息量」的类型:31 行内完整体现了 dispatcher 侧量化契约演进后,入口守卫如何跟上。 重点关注: 1. 为什么用 `quant_info.use_mxfp8 and dtype == float8_e4m3fn` 的联合判定,而不是单纯 `quant_info.use_mxfp8`——理解这条「双条件」是为了避免配置与载荷不一致时静默走错路径,这个模式可以复用到其他量化入口的守卫。 2. `else` 分支完整保留原有两条错误信息,意味着作者刻意让既有 FP8 失败语义零漂移,这是低风险修补的示范做法。 3. 输出侧仍强制 BF16 的不对称设计,是阅读时最值得追问的一点:它到底是 TRT-LLM 的硬约束,还是当前实现尚未覆盖的遗留假设。 4. 建议后续补一个覆盖 `mxfp8` dispatch 的三分支单元测试,并考虑在 `else` 分支的错误信息中提示「`use_mxfp8` 与实际 payload dtype 不一致」这一可能原因。

#35605 [XPU] Use torch scaled_mm for XPU block FP8 linear

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

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

XPU 块状 FP8 线性改用 torch scaled_mm,并预排布 scale 存储

值得精读,但重点不在算子本身,而在三处工程决策:一是派发层级的选择(把平台分支放进 _dispatch_auto_backend 而非顶层,保证显式 backend 仍可覆盖),这是容易被写错且直接破坏用户配置的细节;二是用公开 API torch.nn.functional.scaled_mm + ScalingType 显式表达 activation 与 weight 两套 block scale 配方,替换私有 torch._scaled_mm 关键字参数写法,可读性与前向兼容性都更好;三是把 scale 的 transpose-contiguous 物化提前到 process_weights_after_loading_block_quant,属于典型的「热路径代价前移」优化。建议后续补充:XPU 上 Triton vs scaled_mm 的延迟对比数据、在派发处增加 torch 版本/能力兜底,以及确认除 w8a8_block_fp8_linear 之外没有其他读取 weight_scale_inv 的消费方依赖行连续布局。

性能优化 重要性 8.96 洞察度 8.00

GLM-5.2 草稿专家层转逐通道 FP8,修复 Quark AITER 路径不可达

值得精读,尤其是量化/推理性能方向的工程师。建议重点看三处设计决策:(1)`should_apply_glm_nextn_moe_ptpc` 这一“同一判定服务权重转换与模块构建”的模式,以及提交 64c44144 为何要专门对齐两侧门控——这是静默数值错误的高发点;(2)`_resolve_nextn_quant_config` 从直接改动共享 `QuarkConfig` 改为 copy + deepcopy 的过程,以及配套的 `test_flag_on_does_not_mutate_caller_config`;(3)`QuarkW8A8FP8MoE` 的 runner 选择从死标志 `apply_router_weight_on_input` 改为 kernel 前置条件,并用 `print_info_once` 让回退可观测。若你负责 ROCm 上其它 quark FP8 MoE 模型的线上服务,建议在升级后对比 AITER 与 `--moe-runner-backend triton` 的表现与数值一致性和显存形态。此外,PR body 与最终实现存在文件位置不一致(body 仍写 `deepseek_weight_loader.py`),阅读时应以 `glm4_moe.py` 的 `GlmMoeDsaForCausalLMNextN` 为准。

2026-09-15
重构 重要性 7.15 洞察度 4.00

拆分权重加载与后处理两阶段,保持组合接口不变

值得快速阅读,不必精读。关注两点:一是用显式类名调用的静态拆分如何在保持三参数兼容接口的同时打开阶段边界;二是测试如何用事件序列把“调用顺序”这种隐式契约变成可回归的显式断言。若正在做模型加载插件或扩展点设计,可把该 PR 作为最小可用范例。

2026-09-14
文档 重要性 4.05 洞察度 4.00

GLM-5.2 MI355X MXFP4 配方升级镜像并启用 TOPK_V2

**是否值得精读**:源码层面不值得精读——没有任何逻辑实现,全文 14 行 diff,属于典型的文档/配置同步,3-5 分钟即可看完。 **值得关注的设计决策**:一是镜像 tag 与 env flag 的耦合关系,建议在 `docs/src/snippets/configs/zai-org/glm-5.2.jsx` 的 `dockerImages` 条目旁就地加注释,或在 MDX 里补一句「TOPK_V2 需要 20260913 及以上镜像」,把隐含前提显式化;二是用 Revert 收敛范围的取舍,如果确实需要解释 HiCache arm,应把说明放在 InferenceX 侧,而不是回流到 cookbook。 **给后续维护者的动作建议**:(1) 若计划对外发布该配方,补一次 MI355X 实机精度/性能快照,别只依赖 reviewer 的经验判断;(2) 在 InferenceX#3081 合并后回头核对镜像 tag 与并发点集是否仍一致,避免短期漂移;(3) 排查 PR body 中 “PR Test (Extra)” 失败的原因,确认它与本次文档改动无关。

功能 重要性 9.36 洞察度 8.00

DSV4 在 gfx950 启用 fp8 双池 KV,容量提升 1.5×

值得精读,尤其是正在做 KV 量化、异构内存池或新硬件后端的人。建议按以下顺序看:先读 `python/sglang/srt/mem_cache/deepseek_v4_memory_pool.py` 与 `unified_kv_kernels/layout.py` 建立行宽/两池的单一真相,再读 `models/deepseek_v4.py` 的 `_forward_prepare` 看“用 caller buffer 决定布局分支”的设计,最后看 `runtime.py` 与 `fused_qk_norm_rope_store.py` 理解写入/读取两侧的形态约束。 值得关注的设计决策有三个:(1) 把 E8M0 scale 在行内重复写两份、并用 512 B 2 的幂 stride 对齐 asm reader,属于“为内核取数模式服务”的布局设计;(2) 所有未就绪组合一律显式拒绝并附原因与后续 PR 号,而不是靠默认值静默降级;(3) 判据挂在 caller 传入的 buffer 上,从结构上消除 prepare 与 backend 对布局的分歧。 如果要把它用于生产,请先确认三件事:目标场景的并发区间(c=8 附近有 7.6% 解码损失)、是否需要 PD/HiCache/CP(当前均不可用)、以及是否有独立复测(现有精度证据只有 GSM8K 的四组配对,性能证据全部来自作者自测)。若只是评估设计而非上线,本 PR 的价值在于它展示了一次“KV 行宽级重构”如何做到默认零影响、边界显式化。

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

NPU 量化 RMSNorm 包装补 kwargs 修报错

建议快速浏览而非精读:实现只有一行,理解「调用方透传 quant_linear → 包装层签名不收 → TypeError」这一因果链即可。值得关注的两个设计决策:一是选择在包装层吞参而不是修改调用方或显式声明 quant_linear,好处是最小侵入,代价是失去参数校验;二是该文件在同一 PR 家族里持续以「包装/适配」方式兼容 NPU 量化,长期看这类隐式契约容易积累技术债。后续建议补一个 CPU 可跑的轻量单元测试,直接断言包装后的 forward 能在接收 quant_linear 时正常返回并与朴素实现数值一致,同时考虑给 `**kwargs` 加注释说明可安全忽略的原因。