Skip to content

fix: exclude frozen parameters from DDP and improve cross-entropy reduction precision - #244

Open
chen2021673 wants to merge 2 commits into
masterfrom
fix/ddp-exclude-frozen-parameters
Open

chen2021673 wants to merge 2 commits into
masterfrom
fix/ddp-exclude-frozen-parameters

Conversation

@chen2021673

@chen2021673 chen2021673 commented Oct 8, 2026 •

Copy link
Copy Markdown
Contributor

背景

在 LoRA 等部分参数训练场景中,模型同时包含可训练参数和冻结参数。此前 DDP 初始化时会将全部参数传入 Reducer、梯度桶及反向 Hook,可能导致冻结参数被错误纳入梯度同步流程。

此外,CrossEntropy 在主机端使用 FP32 累加 batch loss,batch size 较大时可能产生较明显的数值误差。

修改内容

  • 在 DDP 初始化阶段统一筛选 requires_grad=true 的参数,仅为可训练参数执行以下操作:
    • 注册梯度同步 Hook;
    • 创建参数及梯度 Buffer;
    • 进行梯度分桶;
    • 构造 Reducer。
  • 当模型不存在可训练参数时提前报错,避免创建无意义的 DDP 实例。
  • 扩展 LoRA 测试配置,将 c_fc 加入目标模块,覆盖更多冻结参数与可训练参数混合的场景。
  • CrossEntropy 的 batch loss 改为 FP64 主机累加,计算均值后再转换为 FP32,降低累计误差。

影响

  • 冻结参数不再参与梯度通信,也不会注册不会触发的反向 Hook。
  • 全参数训练场景的行为保持不变。
  • 提升 CrossEntropy 在较大 batch 下的数值稳定性。
  • CrossEntropy 当前仍存在 D2H/H2D 数据传输,本次修改不涉及归约性能优化。

测试

精度测试:
image

性能测试:
image

@chen2021673 chen2021673 changed the title Fix/ddp exclude frozen parameters fix: exclude frozen parameters from DDP and improve cross-entropy reduction precision Oct 8, 2026
@chen2021673

Copy link
Copy Markdown
Contributor Author

与 pytorch lora baseline 对比:
image

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.

2 participants