Skip to content

dev muon sharding optimizer comm overlap#79428

Open
Hz188 wants to merge 1 commit into
PaddlePaddle:developfrom
Hz188:develop
Open

dev muon sharding optimizer comm overlap#79428
Hz188 wants to merge 1 commit into
PaddlePaddle:developfrom
Hz188:develop

Conversation

@Hz188

@Hz188 Hz188 commented Jul 7, 2026

Copy link
Copy Markdown
Contributor

PR Category

Performance Optimization

PR Types

New features

Description

开发muon支持stage1 overlap的功能

是否引起精度变化

PaddlePaddle-bot

This comment was marked as outdated.

@risemeup1111 risemeup1111 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.

发现两处需要先处理的兼容性问题,详情已放在行级评论里:主要是 Muon 的新 backward-hook overlap 路径缺少与 pipeline parallel 的互斥保护,以及 AMP GradScaler 仍按 _comm_buffers 等待 overlap 通信,当前 Muon 没有暴露这个集合。CI 目前仍有检查在运行中,建议修复后补充 Muon + comm_overlap 覆盖,尤其包含 GradScaler 场景。

Powered by Nyanpasu with gpt-5.5 xhigh, please check the suggestions carefully.

fires once all params of a buffer have checked in, and reduce /
reduce-scatter over the fused buffer are order-independent.
"""
overlap_buffers = []

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

新 hook 让 Muon 也走 sharding_configs.comm_overlap=True,但 distributed_scaler() 的 overlap 分支会先断言 hasattr(optimizer, "_comm_buffers"),并遍历 optimizer._comm_buffers 等待通信完成后再做 finite/unscale。HybridParallelOptimizer.__getattr__ 会把这个访问转发到内部的 MuonShardingOptimizer,而这里新建的只有 comm_buffer_2d_comm_buffer_list,没有 _comm_buffers;因此 Muon + comm_overlap + AMP GradScaler 在 scaler.step(optimizer) 时会直接断言失败,或即使绕过断言也无法等待新启动的 2D/1D 通信任务。

请把 Muon overlap 暴露成 scaler 期望的缓冲区集合,或同步更新 distributed_scaler 识别 Muon。一个局部修复形态可以是构建完 1D/2D buffer 后设置:

self._comm_buffers = []
if self._use_fuse_gradients and not self.use_group_call_opt:
    self._comm_buffers.extend(self.comm_buffer_2d)
self._comm_buffers.extend(self._comm_buffer_list)

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

这版已经补了 _comm_buffers,普通 overlap 路径的断言问题解决了;但 comm_group_call_opt=True 仍会漏掉 2D 梯度通信。现在 _comm_buffersuse_group_call_opt 时只包含 _comm_buffer_list,而 2D buffer 仍只在 reduce_gradients() 的 group-call 分支里同步 reduce。AMP distributed_scaler() 进入 sharding_configs.comm_overlap 分支后会先 buffer.scale_grads(),随后把 optimizer._sharding_enable = False,这样 HybridParallelOptimizer.step() 不再调用 reduce_gradients(),group-call 的 2D reduce 分支就完全不会执行,2D Muon 参数会用本 rank 未 reduce 的梯度更新。

建议不要只把 hook 驱动的 buffer 暴露给 scaler,而是确保 scaler 等待/触发了所有会被禁用的 sharding 通信。可以选择在 _comm_buffers 中也包含 comm_buffer_2d 并让 scaler 之后能完成 group-call 2D reduce,或在 distributed_scaler/Muon 中把 group-call 2D reduce 抽成可在 unscale 前调用的同步路径。例如修复形态需要覆盖:

# scaler disables optimizer-side reduce_gradients(), so group_call_opt 2D reduce
# must be completed before optimizer._sharding_enable is set False.
if self._use_fuse_gradients:
    self._comm_buffers.extend(self.comm_buffer_2d)
self._comm_buffers.extend(self._comm_buffer_list)
# and make group_call_opt 2D buffers use a scaler-safe wait/reduce path instead
# of relying solely on reduce_gradients().

@PaddlePaddle-bot

PaddlePaddle-bot commented Jul 7, 2026

Copy link
Copy Markdown

🤖 Paddle-CI-Agent | ci_status_monitor | 2026-07-10 00:31:39 UTC+08:00

CI报告基于以下代码生成(30分钟更新一次):
PR commit: 667a3c8 | Merge base: 7b741d6 (branch: develop)


1 Required任务 : 47/48 通过

总执行(rerun次数) 总任务 ✅ 通过 ❌ 失败 ⏳ 运行中 ⏸️ 等待中 跳过
171(91) 80 79 1 0 0 0
任务 错误类型 置信度 日志
Coverage test PR问题:Python Diff Coverage 未达标 Job

2 失败详情

🔴 Coverage test — PR问题:Python Diff Coverage 未达标(置信度: 高)

失败用例: Python Diff Coverage 门禁

用例 错误摘要
python/paddle/distributed/fleet/meta_optimizers/muon_sharding_optimizer.py Python diff coverage 低于 90% 门禁

关键日志:

Assert Python Diff Coverage
expected >= 90.0 %, actual 50.0 %, failed
Coverage check failed, unit tests have all passed, please do not rerun,
check whether the newly added code lines are fully covered by unit tests.
  • 根因摘要: 新增 muon sharding overlap 逻辑覆盖不足

PR 只修改了 python/paddle/distributed/fleet/meta_optimizers/muon_sharding_optimizer.py。Coverage job 从该文件提取 Python diff coverage,实际覆盖率为 50.0%,低于 90.0% 门禁;早期 test_enable_cinn_kernel_cache 曾失败但已在 rerun 后通过,最终失败 step 明确是覆盖率判定。

新增路径包括 PP+comm_overlap 禁用检查、_comm_buffers 暴露、overlap backward hook 注册/add_grad 回调,以及 reduce_gradients()comm_overlap=True 时跳过 2D 手动 _comm_grads(),这些新增行未被现有测试充分覆盖。

修复建议:

  1. MuonShardingOptimizer 增补单测,覆盖 pp_degree > 1comm_overlap=True 的断言路径(约第 208-212 行)。
  2. 覆盖 comm_overlap=True_comm_buffers 的 2D/1D buffer 组合,以及 _register_reduce_overlap_hook() / _create_backward_hook() 调用 buffer.add_grad(param, use_comm=True) 的行为(约第 351-363、712-744 行)。
  3. 覆盖 reduce_gradients()comm_overlap=True 时不重复调用 2D buffer _comm_grads() 的路径(约第 805-810 行)。

关联变更: python/paddle/distributed/fleet/meta_optimizers/muon_sharding_optimizer.py:208, python/paddle/distributed/fleet/meta_optimizers/muon_sharding_optimizer.py:351, python/paddle/distributed/fleet/meta_optimizers/muon_sharding_optimizer.py:712, python/paddle/distributed/fleet/meta_optimizers/muon_sharding_optimizer.py:805

@risemeup1111 risemeup1111 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.

复查了新提交:pipeline parallel 与 sharding comm_overlap 的互斥保护已经补上,这个问题看起来已解决。_comm_buffers 也已补充,但 AMP GradScaler 场景在 comm_group_call_opt=True 时仍可能跳过 2D Muon 梯度 reduce,我已在原有 scaler 线程里补充了新的证据和建议。

当前 CI 仍在运行中,尚未形成最终结果。

Powered by Nyanpasu with gpt-5.5 xhigh, please check the suggestions carefully.

@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-07-07 20:08:00

📋 Review 摘要

PR 概述:为 MuonShardingOptimizer 增加 sharding stage1 communication overlap hook,并暴露 comm buffer 以兼容 AMP GradScaler。
变更范围python/paddle/distributed/fleet/meta_optimizers/muon_sharding_optimizer.py
影响面 TagDistributed Strategy Communication Library Performance Optimization

问题

级别 文件 概述
🔴 Bug python/paddle/distributed/fleet/meta_optimizers/muon_sharding_optimizer.py:352 AMP GradScaler 会跳过仍依赖同步路径的 Muon 2D 梯度通信

📝 PR 规范检查

标题缺少 Paddle PR 模板要求的 [Tag];描述结构和精度变化字段符合规范。

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

  • [Performance Optimization] Support Muon sharding optimizer comm overlap

总体评价

本 PR 的 1D overlap hook 方向与 DygraphShardingOptimizerV2 逻辑基本一致,但当前 AMP GradScaler 兼容分支会把部分 2D 同步通信路径绕开,需要先补齐或禁用对应组合后再合入。

# the overlap hook drives. group_call_opt reduces 2D buffers
# synchronously in reduce_gradients, so they are excluded here.
self._comm_buffers = []
if self._use_fuse_gradients and not self.use_group_call_opt:

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

🔴 Bug 这里把 use_group_call_opt 下的 2D comm buffer 排除在 _comm_buffers 外,但 fleet.scaler.distributed_scaler()comm_overlap=True 时会先遍历 optimizer._comm_buffers 等待通信,然后把 HybridParallelOptimizer._sharding_enable 置为 False,导致后续 reduce_gradients() 整体被跳过。

因此在 AMP GradScaler + Muon comm overlap 下,只要 2D 梯度仍依赖 reduce_gradients() 的同步路径(例如 use_group_call_opt=True,以及 _use_fuse_gradients=False 时没有 2D buffer),这些 2D 参数不会执行 reduce 就进入 finite/unscale/step,各 sharding rank 会用未同步梯度更新。

建议修复方式:确保 scaler 关闭 _sharding_enable 前所有 Muon 2D 梯度也已完成通信。可选方案是对这类组合禁用/报错,或把 2D reduce 改成可由 _comm_buffers 驱动并在 scaler 中等待;不要让仍依赖 reduce_gradients() 的 2D 同步路径被 _sharding_enable=False 跳过。

@codecov-commenter

Copy link
Copy Markdown

Codecov Report

❌ Patch coverage is 50.00000% with 11 lines in your changes missing coverage. Please review.
⚠️ Please upload report for BASE (develop@7b741d6). Learn more about missing BASE report.

Files with missing lines Patch % Lines
...d/fleet/meta_optimizers/muon_sharding_optimizer.py 50.00% 11 Missing ⚠️

❌ Your patch status has failed because the patch coverage (50.00%) 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   #79428   +/-   ##
==========================================
  Coverage           ?   50.00%           
==========================================
  Files              ?        1           
  Lines              ?       22           
  Branches           ?        0           
==========================================
  Hits               ?       11           
  Misses             ?       11           
  Partials           ?        0           

☔ View full report in Codecov by Harness.
📢 Have feedback on the report? Share it here.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.

@Hz188

Hz188 commented Jul 8, 2026

Copy link
Copy Markdown
Contributor Author

/re-run all-failed

1 similar comment
@Hz188

Hz188 commented Jul 9, 2026

Copy link
Copy Markdown
Contributor Author

/re-run all-failed

@PaddlePaddle-bot

PaddlePaddle-bot commented Jul 13, 2026

Copy link
Copy Markdown

🤖 Paddle-CI-Agent | ci_status_monitor | 2026-07-16 12:10:03 UTC+08:00

CI报告基于以下代码生成(30分钟更新一次):
PR commit: 667a3c8 | Merge base: 7b741d6 (branch: develop)


1 Required任务 : 47/48 通过

总执行(rerun次数) 总任务 ✅ 通过 ❌ 失败 ⏳ 运行中 ⏸️ 等待中 跳过
171(91) 80 79 1 0 0 0
任务 错误类型 置信度 日志
Coverage test PR问题:Python Diff Coverage 未达标 Job

2 失败详情

🔴 Coverage test — PR问题:Python Diff Coverage 未达标(置信度: 高)

分析器: 通用分析(fallback)
失败用例: Python Diff Coverage 门禁

用例 错误摘要
python/paddle/distributed/fleet/meta_optimizers/muon_sharding_optimizer.py Python diff coverage 低于 90% 门禁

关键日志:

Assert Python Diff Coverage
expected >= 90.0 %, actual 50.0 %, failed
Coverage check failed, unit tests have all passed, please do not rerun,
check whether the newly added code lines are fully covered by unit tests.
  • 根因摘要: 新增 muon sharding overlap 逻辑覆盖不足

PR 只修改了 python/paddle/distributed/fleet/meta_optimizers/muon_sharding_optimizer.py。Coverage job 从该文件提取 Python diff coverage,实际覆盖率为 50.0%,低于 90.0% 门禁;早期 test_enable_cinn_kernel_cache 曾失败但已在 rerun 后通过,最终失败 step 明确是覆盖率判定。

新增路径包括 PP+comm_overlap 禁用检查、_comm_buffers 暴露、overlap backward hook 注册/add_grad 回调,以及 reduce_gradients()comm_overlap=True 时跳过 2D 手动 _comm_grads(),这些新增行未被现有测试充分覆盖。

修复建议:

  1. MuonShardingOptimizer 增补单测,覆盖 pp_degree > 1comm_overlap=True 的断言路径(约第 208-212 行)。
  2. 覆盖 comm_overlap=True_comm_buffers 的 2D/1D buffer 组合,以及 _register_reduce_overlap_hook() / _create_backward_hook() 调用 buffer.add_grad(param, use_comm=True) 的行为(约第 351-363、712-744 行)。
  3. 覆盖 reduce_gradients()comm_overlap=True 时不重复调用 2D buffer _comm_grads() 的路径(约第 805-810 行)。

关联变更: python/paddle/distributed/fleet/meta_optimizers/muon_sharding_optimizer.py:208, python/paddle/distributed/fleet/meta_optimizers/muon_sharding_optimizer.py:351, python/paddle/distributed/fleet/meta_optimizers/muon_sharding_optimizer.py:712, python/paddle/distributed/fleet/meta_optimizers/muon_sharding_optimizer.py:805

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.

4 participants