Prhub

#29229 Fix dummy weight init for tensor subclasses

原始 PR 作者 aurickq 合并时间 2026-06-29 01:17 文件变更 1 提交数 2 评论 2 代码增减 +4 / -1

执行摘要

修复张量子类的 dummy 权重初始化

一些张量子类(如 MXFP8 封装)的 .data 暴露低比特存储 dtype(如 FP8),但封装张量本身报告逻辑 dtype(如 bfloat16)。原先使用 param.data.dtype 导致这些封装进入低比特回退路径,该路径只重写原始存储张量,绕过了封装类的 uniform_() 逻辑,无法更新侧张量(如 block scales)。

值得合并,修复了低比特张量子类初始化的缺陷。建议后续可添加针对张量子类的单元测试,确保该类边界的正确性。

讨论亮点

无 review 评论。

实现拆解

  1. python/sglang/srt/model_loader/weight_utils.pyinitialize_dummy_weights() 函数中,将条件判断从 torch.finfo(param.data.dtype).bits < 16 改为 torch.finfo(param.dtype).bits < 16
  2. 保留原有回退路径(生成 float16 张量并 copy 回 param.data),但仅当张量的逻辑 dtype 位数小于 16(如 FP8)时才触发。
  3. 对于逻辑 dtype 为 16 位或以上的张量子类(如 bfloat16),直接调用 param.uniform_(),利用封装类的自定义实现,确保 block scales 等侧张量也被正确初始化。
文件 模块 状态 重要度
python/sglang/srt/model_loader/weight_utils.py 模型加载 modified 5.57

关键符号

initialize_dummy_weights

关键源码片段

python/sglang/srt/model_loader/weight_utils.py data-contract

核心变更文件,修改 dummy 权重初始化函数中的 dtype 判断逻辑

def initialize_dummy_weights(
    model: torch.nn.Module,
    low: float = -1e-3,
    high: float = 1e-3,
    seed: int = 1234,
) -> None:
    """Initialize model weights with random values."""
    for param in model.state_dict().values():
        if torch.is_floating_point(param):
            generator = torch.Generator(device=param.data.device)
            generator.manual_seed(seed)
            # 使用 param.dtype 而非 param.data.dtype,以支持张量子类
            # 例如 MXFP8 wrapper 的逻辑 dtype 为 bfloat16,而 .data 为 FP8
            if torch.finfo(param.dtype).bits < 16:
                # uniform_ 不支持 FP8 等低比特 dtype
                dtype = param.data.dtype
                tmp_param = param.data.to(torch.float16)
                tmp_param = tmp_param.uniform_(low, high, generator=generator).to(dtype)
                param.data.copy_(tmp_param)
            else:
                # 对于逻辑 dtype 为 16 位及以上的张量(包括子类),调用其 uniform_
                param.uniform_(low, high, generator=generator)

评论区精华

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

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

风险与影响

低风险。变更仅影响 initialize_dummy_weights 中的判断条件,且逻辑清晰;但需确保所有张量子类的 dtype 属性正确反映其逻辑 dtype。若存在 dtype 返回错误类型的子类,可能导致回退路径错误。

直接影响使用低比特张量子类(如 MXFP8)的模型在 dummy 权重初始化时的行为,使这些模型不再丢失 block scales 等侧张量的初始化。不影响普通张量或未使用张量子类的场景。

缺少测试覆盖

关联 Issue

未识别关联 Issue

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

完整报告

参与讨论