Prhub

#25786 [Bug] Correct Weight Offloader's Attribute Name for torch.nn.Parameter

原始 PR 作者 xiaobao520123 合并时间 2026-05-20 13:28 文件变更 1 提交数 4 评论 7 代码增减 +1 / -1

执行摘要

修复 Parameter 属性名 typo

PR body 指出此修复是源 PR #24531 的一部分,目的是纠正参数卸载时属性名检查的拼写错误,避免将真正的 weight_loader 遗漏,导致参数行为不正确。

PR 值得合并,但 reviewer 提出的简化建议(getattrisinstance)可考虑在后续重构中一并优化,以提高代码健壮性和可维护性。

讨论亮点

Code review 中 gemini-code-assist[bot] 提出两点改进建议:(1) 可用 getattr(old_param, 'weight_loader', lambda *args, **kwargs: None) 简化 if-else 判断;(2) 第 450 行的精确类型检查 old_param_type == torch.nn.Parameter 不够灵活,建议改用 isinstance 以兼容更多子类。这些建议未在本 PR 中处理。

实现拆解

  1. 定位 python/sglang/srt/utils/offloader.py_move_param_to_meta 函数中,第 455 行 hasattr(old_param, "weihgt_loader") 拼写错误。
  2. "weihgt_loader" 修正为 "weight_loader",使条件分支能正确检测并复制已存在的 weight_loader 属性。
  3. 若旧参数没有 weight_loader 属性,仍保持原有 fallback 逻辑:赋值为一个无操作 lambda。
文件 模块 状态 重要度
python/sglang/srt/utils/offloader.py 卸载器 modified 4.49

关键符号

_move_param_to_meta

关键源码片段

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

唯一改动文件,修正了 _move_param_to_meta 函数中属性名检查拼写错误

# python/sglang/srt/utils/offloader.py 第 450-458 行
# 修复前:hasattr(old_param, "weihgt_loader") 导致 weight_loader 属性永远无法被识别
# 修复后:正确检测 weight_loader 属性是否存在
elif old_param_type == torch.nn.Parameter:
    new_param = torch.nn.Parameter(
        data=new_data,
        requires_grad=False,
    )
    if hasattr(old_param, "weight_loader"): # 修正前为 "weihgt_loader"
        new_param.weight_loader = old_param.weight_loader
    else:
        new_param.weight_loader = lambda *args, **kwargs: None

评论区精华

简化赋值逻辑及类型检查建议 设计

gemini-code-assist[bot] 建议用 getattr 简化 if-else,以及将精确类型检查改为 isinstance 以兼容更多子类。

结论:未采纳,当前仅做最小修复。 · 已解决

风险与影响

风险极低。本次变更仅为单字符拼写修正,使用 hasattr 检查属性存在性,不会引入回归或新错误。

仅影响权重卸载(weight offloading)功能中使用 torch.nn.Parameter 的场景(如部分模型参数)。修正后,原本因 typos 未被正确保留的 weight_loader 现在会正常复制,确保卸载行为与预期一致。不会影响不涉及卸载的模型。

关联 Issue

未识别关联 Issue

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

完整报告

参与讨论