Skip to content

Set init_method_std default to sqrt(0.3333/hidden_size)#1337

Open
DanielSun11 wants to merge 2 commits into
PaddlePaddle:developfrom
DanielSun11:fix-init-method-std-default
Open

Set init_method_std default to sqrt(0.3333/hidden_size)#1337
DanielSun11 wants to merge 2 commits into
PaddlePaddle:developfrom
DanielSun11:fix-init-method-std-default

Conversation

@DanielSun11

Copy link
Copy Markdown
Contributor

Change init_method_std default from 0.02 to None. In TransformerConfig.__post_init__, when init_method_std or embedding_init_method_std is None, set it to math.sqrt(0.3333 / hidden_size).

- Change init_method_std default from 0.02 to None
- In __post_init__, when init_method_std or embedding_init_method_std is None,
  set it to math.sqrt(0.3333 / hidden_size)
Copilot AI review requested due to automatic review settings June 29, 2026 16:30

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

该 PR 旨在将 Transformer 的默认权重初始化标准差 init_method_std 从固定值(0.02)改为基于 hidden_size 的缩放(sqrt(0.3333 / hidden_size)),以使默认初始化与隐藏维度相关联。

Changes:

  • TransformerConfig.init_method_std 默认值从 0.02 调整为 None
  • TransformerConfig.__post_init__ 中,当 init_method_std is None 时,将其设置为 math.sqrt(0.3333 / self.hidden_size)
  • 更新 init_method_std 字段说明文档以反映新的默认行为。

PR 标题/描述检查:

  • 标题不符合仓库约定的 [CLASS]Title 格式;建议改为类似:[Config] Set init_method_std default to sqrt(0.3333/hidden_size)(并去掉引号)。
  • 描述说明了“改什么/为什么改”,信息基本完整;但与实现关于 embedding_init_method_std 的表述存在不一致(已在代码评论中指出)。

Comment on lines +989 to +990
if self.init_method_std is None:
self.init_method_std = math.sqrt(0.3333 / self.hidden_size)
Comment thread src/paddlefleet/transformer/transformer_config.py
Comment thread src/paddlefleet/transformer/transformer_config.py Outdated
PaddlePaddle-bot

This comment was marked as outdated.

@Paddle-CI-Bot

Paddle-CI-Bot commented Jun 30, 2026

Copy link
Copy Markdown

PaddleFleet Log Analysis

Run #28435313622 · Attempt 1

日志分析报告

流水线名称 问题标签 修复建议 日志片段
Unit test (single card) magic_init=Falseinit_method_stdmagic_sigma 相等,assertNotAlmostEqual 断言失败 TransformerConfig.__post_init__ 中当 magic_init=False 时不应将 init_method_std 设为 sqrt(0.3333/hidden_size),需保留原始默认值 0.02 或其他非 magic 值 报错代码
Integration test (H20, single card) Loss 对齐失败(GLM4.5 single card,10步全部偏移,max diff 0.0849) init_method_std 默认值改变导致模型初始化分布变化,loss 曲线整体漂移;需恢复 GT baseline 或更新 GT loss 文件 报错代码
Integration test (H20, multi-card) Loss 对齐失败(pt/sft/sft_cp/lora/dpo/fp8/grouped_gemm/ep4/qwen_pt/qwen_sft/qwen_lora,共11个子任务) 同上,init_method_std 新默认值影响全部依赖权重初始化的模型,需更新所有受影响任务的 GT loss 文件,或在测试中显式传入 init_method_std=0.02 复现原行为 报错代码
Integration test (A100) Loss 对齐失败(pt/sft/lora/dpo/qwen_pt/qwen_sft/qwen_lora,共7个子任务) 同上,A100 路径下 GT loss 均基于旧默认值训练,需同步更新 报错代码

失败的测试case:

# Unit test
tests/single_card_tests/test_transformer_config.py::TestMagicInit::test_magic_init_false_uses_normal_init

# Integration test (H20 single card)
glm45_single_card  — 10/10 步全部偏移,max abs diff 0.08486843

# Integration test (H20 multi-card)
glm45_pt              — Log Loss 10.7291  vs GT 11.3971, diff 0.6680
glm45_sft             — Log Loss 5.5859   vs GT 0.0604,  diff 5.5255
glm45_sft_cp          — Log Loss 5.5803   vs GT 0.0499,  diff 5.5304
glm45_lora            — Log Loss 3.9282   vs GT 0.0047,  diff 3.9235
glm45_dpo             — Log Loss 0.5598   vs GT 0.6061,  diff 0.0463
glm45_pt_fp8          — Log Loss 10.7291  vs GT 11.3972, diff 0.6680
glm45_pt_grouped_gemm — Log Loss 10.7300  vs GT 11.3945, diff 0.6644
glm45_pt_ep4          — Log Loss 10.7287  vs GT 11.3964, diff 0.6676
qwen_pt               — Log Loss 10.9159  vs GT 11.3410, diff 0.4250
qwen_sft              — Log Loss 10.0224  vs GT 9.8019,  diff 0.2204
qwen_lora             — Log Loss 9.6687   vs GT 9.4001,  diff 0.2687

# Integration test (A100)
glm45_pt_multi_card_a100    — Log Loss 11.5375  vs GT 11.9235, diff 0.3859
glm45_sft_multi_card_a100   — Log Loss 4.5275   vs GT 0.0282,  diff 4.4992
glm45_lora_multi_card_a100  — Log Loss 2.6685   vs GT 6.754,   diff 4.0855
glm45_dpo_multi_card_a100   — Log Loss 0.6197   vs GT 0.7423,  diff 0.1226
qwen_pt_multi_card_a100     — Log Loss 10.9197  vs GT 11.4033, diff 0.4837
qwen_sft_multi_card_a100    — Log Loss 10.0614  vs GT 9.8346,  diff 0.2268
qwen_lora_multi_card_a100   — Log Loss 9.7523   vs GT 9.5058,  diff 0.2465

根本原因分析:

PR #1337TransformerConfig.init_method_std 默认值从 0.02 改为 None,并在 __post_init__ 中无条件地将 None 值设为 sqrt(0.3333/hidden_size)——该逻辑在 magic_init=False 时同样生效,导致:

  1. 单测断言失败:测试期望 magic_init=Falseinit_method_std 不等于 magic_sigma,但 __post_init__ 填充后两者相同;
  2. 集成测试 loss 全面漂移init_method_std 变化后权重初始化分布改变,所有依赖该参数的模型(GLM4.5 pt/sft/lora/dpo/fp8/grouped_gemm/ep4、Qwen3 pt/sft/lora)在 H20 和 A100 上的训练 loss 均偏离旧 GT baseline,其中 sft/lora 类任务 GT 接近 0(GT baseline 本身可能也需重新生成)。

修复建议:

  1. 修复 magic_init=False 分支:在 TransformerConfig.__post_init__ 中,仅当 magic_init=True 时才将 init_method_std 默认设为 sqrt(0.3333/hidden_size);当 magic_init=Falseinit_method_stdNone 时,应设为原默认值 0.02(或其他语义合理的非 magic 值),确保两个分支行为差异可被单测区分。

  2. 重新生成 GT loss 文件:在上述逻辑修复后,如果 magic_init=True(即默认行为)下 init_method_std 确实改变,需用新默认值重跑各子任务(glm45_pt、glm45_sft、glm45_lora、glm45_dpo、glm45_pt_fp8、glm45_pt_grouped_gemm、glm45_pt_ep4、qwen_pt、qwen_sft、qwen_lora 在 H20/A100 两套环境)并更新 BOS 上的 GT loss 文件(PaddleFleet_latest/glm45_*_gt_loss.txt / qwen_*_gt_loss.txt)。

  3. 验证顺序:先通过单测 → 再触发集成测试,防止逻辑反复。


🔍 准确性记录:请点击评论底部 😊 图标,选择 👍(准确)或 👎(有误),将自动记录到 CI 监控系统

🔄 每次 Re-run 后自动更新

@PaddlePaddle-bot PaddlePaddle-bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🤖 Paddle-CI-Agent | pr_review | 2026-06-30 11:36:32 Asia/Shanghai

📋 Review 摘要

PR 概述:将 TransformerConfig.init_method_std 默认值改为按 hidden_size 推导,并修复 hidden_size=0 时的除零路径。
变更范围src/paddlefleet/transformer/transformer_config.py
影响面 TagModels

问题

级别 文件 概述
🟡 建议 src/paddlefleet/transformer/transformer_config.py:993 默认值语义已变更,但现有 TestMagicInit.test_magic_init_false_uses_normal_init 仍断言旧语义,测试预期需要同步更新

历史 Findings 修复情况

Finding 问题 状态
F1 hidden_size 默认值为 0 时直接计算 math.sqrt(0.3333 / self.hidden_size) 会除零 ✅ 已修复

📝 PR 规范检查

标题缺少官方 Tag,PR 描述也缺少 ### PR Category / ### PR Types / ### Description 三个必填 section。

标题建议(可直接复制):

  • [Bug fixes] Set init_method_std default from hidden_size
PR 描述建议(点击展开,可直接复制)
### PR Category
<!-- One of [ User Experience | Execute Infrastructure | Operator Mechanism | Custom Device | Performance Optimization | Distributed Strategy | Parameter Server | Communication Library  | Environment Adaptation ] -->
User Experience
### PR Types
<!-- One of [ New features | Bug fixes | Improvements | Performance | BC Breaking | Deprecations | Docs | Devs | Not User Facing | Security | Others ] -->
Bug fixes
### Description
<!-- Describe what you’ve done -->
Change `TransformerConfig.init_method_std` default from `0.02` to `None`, and set the default initialization std in `__post_init__` to `math.sqrt(0.3333 / hidden_size)` when it is not provided. `embedding_init_method_std` keeps following `init_method_std` when left unset.

总体评价

历史除零问题已通过 hidden_size == 0 回退 0.02 修复;默认值会在 embedding_init_method_std 为空时继续被 embedding 初始化继承。合入前还需要同步更新现有 TransformerConfig 单测预期,避免新默认行为被旧测试断言拦住。

Comment thread src/paddlefleet/transformer/transformer_config.py
@codecov-commenter

Copy link
Copy Markdown

Codecov Report

✅ All modified and coverable lines are covered by tests.
⚠️ Please upload report for BASE (develop@7eb11cb). Learn more about missing BASE report.

Additional details and impacted files

Impacted file tree graph

@@             Coverage Diff             @@
##             develop     #1337   +/-   ##
===========================================
  Coverage           ?   100.00%           
===========================================
  Files              ?         1           
  Lines              ?         5           
  Branches           ?         2           
===========================================
  Hits               ?         5           
  Misses             ?         0           
  Partials           ?         0           
Flag Coverage Δ
coverage_combine 100.00% <100.00%> (?)

Flags with carried forward coverage won't be shown. Click here to find out more.

Files with missing lines Coverage Δ
src/paddlefleet/transformer/transformer_config.py 100.00% <100.00%> (ø)
🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.

@liuhao2638 liuhao2638 left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

发现需要合入前处理的问题,主要代码细节已放在行内评论。

  • P3 优先级:P3
    非行级:PR 标题和描述不属于代码 diff,无法挂到行级。当前 Check PR Description 失败,日志显示缺少合法的 PR Category / PR Types,标题也未使用仓库要求的分类前缀。建议把标题改为类似 [Bug fixes] Set init_method_std default from hidden_size,并按模板补充 ### PR Category### PR Types### Description,同时说明这是默认初始化行为变更以及需要更新 loss baseline 的测试计划。
Powered by Nyanpasu with gpt-5.5 xhigh, please check the suggestions carefully.

if self.hidden_size == 0:
self.init_method_std = 0.02
else:
self.init_method_std = math.sqrt(0.3333 / self.hidden_size)

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P1 优先级:P1

这里把未显式传入的 init_method_std 改成 sqrt(0.3333 / hidden_size) 后,magic_init=False 的默认初始化语义也会变化。当前 CI 已经被这个新语义拦住:Unit test (single card)TestMagicInit::test_magic_init_false_uses_normal_init0.020832291640623696 == 0.020832291640623696,同时 H20/A100 集成测试的 GT loss 也按旧默认值对齐,初始化分布改变后出现 loss 漂移。

如果这是预期的新默认行为,请在同一个 PR 中同步更新 tests/single_card_tests/test_transformer_config.py 的断言,并重新生成/更新受影响的 H20/A100 GT loss 基线;如果不希望影响 magic_init=False,则需要把这个公式限制到对应分支。测试更新的最小形态应类似:

expected_sigma = math.sqrt(0.3333 / 768)
self.assertAlmostEqual(config.init_method_std, expected_sigma, places=6)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

6 participants