[New features] Add truncated-normal initialization as default#1371
[New features] Add truncated-normal initialization as default#1371JiwenJ wants to merge 11 commits into
Conversation
- utils.py: add truncated_init_method_normal(sigma, truncate_factor) using paddle.nn.init.trunc_normal_ under fp32 default dtype guard - transformer_config.py: add use_truncate_norm / truncate_norm_factor fields; in __post_init__ set init_method with sigma=0.5/sqrt(hidden_size), taking precedence over magic_init; reuse for output/embedding init
|
jiangjiwen seems not to be a GitHub user. You need a GitHub account to be able to sign the CLA. If you have already a GitHub account, please add the email address used for this commit to your account. You have signed the CLA already but the status is still pending? Let us recheck it. |
00f9f04 to
58d464b
Compare
58d464b to
fdaf6cd
Compare
d88c1a6 to
c2f11f8
Compare
c2f11f8 to
7a9e85c
Compare
Codecov Report❌ Patch coverage is
❌ Your patch status has failed because the patch coverage (89.65%) is below the target coverage (90.00%). You can increase the patch coverage or adjust the target coverage. Additional details and impacted files@@ Coverage Diff @@
## develop #1371 +/- ##
==========================================
Coverage ? 84.12%
==========================================
Files ? 6
Lines ? 63
Branches ? 5
==========================================
Hits ? 53
Misses ? 10
Partials ? 0
Flags with carried forward coverage won't be shown. Click here to find out more.
🚀 New features to boost your workflow:
|
PaddleFleet Log Analysis
日志分析报告
失败的测试case: 根本原因分析: PR #1371 将默认权重初始化从 修复建议:
🔄 每次 Re-run 后自动更新 |
PaddlePaddle-bot
left a comment
There was a problem hiding this comment.
🤖 Paddle-CI-Agent | pr_review |
2026-07-02 23:34:42
📋 Review 摘要
PR 概述:将 Transformer 默认权重初始化切换为 truncated normal,并调整初始化相关单测/基线。
变更范围:src/paddlefleet/transformer/transformer_config.py、src/paddlefleet/utils.py、单/多卡模型初始化相关测试
影响面 Tag:TransformerConfig Models Tests
问题
未发现新增的非历史行级问题。PR 规范问题在下面章节报,不要在这里重复
历史 Findings 修复情况
| Finding | 问题 | 状态 |
|---|---|---|
| F1 | 显式 embedding_init_method_std 仍会被默认 embedding_init_method 提前覆盖 |
|
| F2 | init_method_std 默认语义变更和 magic_init 强制关闭的兼容性提醒 |
📝 PR 规范检查
符合规范。标题使用 [New features],描述包含 ### PR Category / ### PR Types / ### Description 且内容非空。
总体评价
本轮按风险优先审查了初始化默认逻辑、显式初始化配置保留分支,以及新增测试覆盖。没有发现新的独立行级问题,但历史 F1 的实现顺序问题仍在当前代码中,历史 F2 对应的默认语义变更也仍未见发布说明同步;因此本轮保持 Request Changes。
PR Category
User Experience
PR Types
New features
Description
将模型权重的默认初始化方式改为截断正态分布(truncated normal),无需任何开关,默认生效。
改动内容:
utils.py: 使用truncated_init_method_normal(sigma),基于paddle.nn.init.trunc_normal_实现截断正态初始化,并在初始化时使用 fp32 default dtype guard,避免低精度默认 dtype 下的数值问题。transformer_config.py: 在__post_init__中,当用户未显式传入init_method时,默认使用截断正态初始化:W ~ TruncNormal(0, sigma^2),截断区间为[-3*sigma, 3*sigma]sigma = 0.5 / sqrt(hidden_size),方差sigma^2 = 0.25 / hidden_sizeinit_method_std默认值由0.02改为None,用于区分「用户显式指定」与「使用默认值」:init_method_std时保留该值,不被默认逻辑覆盖hidden_size > 0时,使用0.5 / sqrt(hidden_size)hidden_size == 0时回退到0.02,保证仅构造 config 的轻量用例不受影响init_method/output_layer_init_method/embedding_init_method/embedding_init_method_std,默认逻辑不会覆盖这些自定义初始化方法。magic_init在__post_init__中被强制置为False,即当前统一走截断正态初始化,magic_init=True不再生效(分支代码保留,便于后续需要时恢复)。hidden_size=0回退、显式init_method_std/embedding_init_method_std保留、显式 output/embedding init 保留、magic_init被强制关闭。是否引起精度变化
是
对于未显式指定
init_method/init_method_std的模型,默认初始化分布由原来的普通正态(std=0.02)变为截断正态TruncNormal(0, (0.5/sqrt(hidden_size))^2),会改变权重初始化,进而可能影响训练初期 loss、收敛轨迹和最终精度。此外,原先依赖magic_init=True的模型现在会改走截断正态初始化,初始化分布也会随之变化。显式指定初始化方式的模型行为保持不变。