Prhub

#24533 Cherry pick weight_checker non-persistent buffer pattern list from #21278

原始 PR 作者 fzyzcjy 合并时间 2026-05-06 21:14 文件变更 1 提交数 3 评论 1 代码增减 +15 / -0

执行摘要

权值检查器跳过非持久化缓冲区

非持久化缓冲区(如 cos_sin_cacheinv_freq)注册为 persistent=False,不保存在检查点中,权重加载后需重新计算。权值检查器若比较这些张量会导致误报错误。PR body 明确说明:"these buffers are registered with persistent=False, are not saved in checkpoints, and are recomputed after loading weights — so they must not be compared."

此 PR 为小范围 bugfix,值得快速合并。建议关注是否还有其他非持久化缓冲区需要类似处理,可后续扩展模式列表。

讨论亮点

PR 无 review 评论。提交记录显示此 PR 是来自 #21278 的 cherry-pick,且只挑选了 weight_checker.py 的部分,排除了原 PR 中影响其他文件的变更。

实现拆解

  1. 添加非持久化缓冲区模式列表:在 _postprocess_tensors 函数中,skip_compare_names = [] 后增加 non_persistent_buffer_patterns = ["cos_sin_cache", "inv_freq"],并附注释说明原因。
  2. 匹配并跳过非持久化缓冲区:遍历 raw 字典中的所有张量名称,若名称包含任一模式(如 cos_sin_cache),则将该名称追加到 skip_compare_names,并记录日志。避免了后续对这些张量的比较。
  3. 保持原有逻辑不变dequant fp8 及后续逻辑未修改。此变更仅插入了跳过非持久化缓冲区的处理。
文件 模块 状态 重要度
python/sglang/srt/utils/weight_checker.py 工具 modified 6.06

关键符号

_postprocess_tensors

关键源码片段

python/sglang/srt/utils/weight_checker.py core-logic

核心变更文件,添加了跳过非持久化缓冲区的逻辑。

def _postprocess_tensors(
    raw: Dict[str, torch.Tensor],
) -> Iterable[Tuple[str, bool, torch.Tensor]]:
    from sglang.srt.debug_utils.dumper import get_tensor_info
​
    skip_compare_names = []
​
    # 跳过非持久化缓冲区,例如 cos_sin_cache
    # 这些缓冲区注册为 persistent=False,不保存在检查点中
    # 权重加载后应重新计算,因此不需要在此比较
    non_persistent_buffer_patterns = [
        "cos_sin_cache", # RoPE 缓存
        "inv_freq", # RoPE 逆频率(如果作为缓冲区存在)
    ]
​
    for name in raw:
        for pattern in non_persistent_buffer_patterns:
            if pattern in name:
                skip_compare_names.append(name)
                logger.info(f"[check_tensors] Skipping non-persistent buffer: {name}")
                break
​
    # dequant fp8 逻辑保持不变 ...
    quant_names = [
        name
        for name in raw
        if name.endswith("weight") and name.replace("weight", "weight_scale_inv") in raw
    ]
    skip_compare_names += quant_names
    # ... 后续代码保持不变

评论区精华

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

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

风险与影响

风险极低。变更仅添加了针对特定模式名称的跳过逻辑,不影响现有功能。若模式列表不全,可能漏跳其他非持久化缓冲区,但模式可后续扩展。日志级别为 info,不会产生噪音。

影响范围仅限于 weight_checker.py 中的 _postprocess_tensors 函数。对用户透明,仅改善权值检查器的正确性,避免因比较非持久化缓冲区而误报。团队调试和权重验证流程将更可靠。

低风险 仅工具文件变更

关联 Issue

未识别关联 Issue

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

完整报告

参与讨论