Set init_method_std default to sqrt(0.3333/hidden_size)#1337
Set init_method_std default to sqrt(0.3333/hidden_size)#1337DanielSun11 wants to merge 2 commits into
Conversation
- 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)
There was a problem hiding this comment.
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的表述存在不一致(已在代码评论中指出)。
| if self.init_method_std is None: | ||
| self.init_method_std = math.sqrt(0.3333 / self.hidden_size) |
PaddleFleet Log Analysis
日志分析报告
失败的测试case: 根本原因分析: PR #1337 将
修复建议:
🔄 每次 Re-run 后自动更新 |
PaddlePaddle-bot
left a comment
There was a problem hiding this comment.
🤖 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
影响面 Tag:Models
问题
| 级别 | 文件 | 概述 |
|---|---|---|
| 🟡 建议 | 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 单测预期,避免新默认行为被旧测试断言拦住。
Codecov Report✅ All modified and coverable lines are covered by tests. Additional details and impacted files@@ Coverage Diff @@
## develop #1337 +/- ##
===========================================
Coverage ? 100.00%
===========================================
Files ? 1
Lines ? 5
Branches ? 2
===========================================
Hits ? 5
Misses ? 0
Partials ? 0
Flags with carried forward coverage won't be shown. Click here to find out more.
🚀 New features to boost your workflow:
|
liuhao2638
left a comment
There was a problem hiding this comment.
发现需要合入前处理的问题,主要代码细节已放在行内评论。
优先级: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 的测试计划。
| if self.hidden_size == 0: | ||
| self.init_method_std = 0.02 | ||
| else: | ||
| self.init_method_std = math.sqrt(0.3333 / self.hidden_size) |
There was a problem hiding this comment.
这里把未显式传入的 init_method_std 改成 sqrt(0.3333 / hidden_size) 后,magic_init=False 的默认初始化语义也会变化。当前 CI 已经被这个新语义拦住:Unit test (single card) 中 TestMagicInit::test_magic_init_false_uses_normal_init 报 0.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)
Change
init_method_stddefault from0.02toNone. InTransformerConfig.__post_init__, wheninit_method_stdorembedding_init_method_stdisNone, set it tomath.sqrt(0.3333 / hidden_size).