已关闭
[RFC]: Pipeline Layout 与 Swap-Muon 单元测试增强及 UT 提效 #241
m0_50947149创建于 8月8日关闭于 9 天前
8月8日 添加了label:rfc
8月8日 修改了issue 的描述
8月8日 修改标题为 “[RFC]: Pipeline Layout 与 Swap-Muon 单元测试增强及 UT 提效”,原标题为“[RFC]: ut”
8月8日 修改了issue 的描述
8月8日 修改了issue 的描述
9 天前 添加了label:resolved
1. 概述
1.1 简介
本提案为 Pipeline Model Parallel Layout 和 Swap-Muon checkpoint 补充单元测试,并优化现有 Swap Optimizer UT 的执行效率。
提案同时修复 Swap-Muon 加载 checkpoint 后 optimizer state 缓存未刷新的问题,保证参数与 momentum 正确恢复。
1.2 动机
当前存在以下问题:
Optimizer.load_state_dict()会替换 state 字典,而_state_map仍可能指向旧 state,导致 momentum 恢复异常。若不补充测试,上述功能发生回归时可能只能在训练或 checkpoint 恢复阶段发现,定位和修复成本较高。
1.3 目标
目标:
非目标:
2. 用例分析
主要包含以下用例:
--run-all执行。DFX 要求:
3. 方案设计
3.1 总体方案
Pipeline Layout 采用单个参数化测试函数覆盖 10 个场景,通过 Mock parallel state 验证 PP/VPP 映射,不依赖 NPU。
Swap-Muon 采用实际生产路径完成 checkpoint 闭环:
加载 optimizer state 后,刷新
SwapOptimizerMixin._state_map中的 state 引用,再执行 swap-out,防止旧 momentum 覆盖新加载的数据。3.2 技术选型
考虑过以下方案:
state_dict/load_state_dict:多优化器场景中 state 可能为 list,与 LayerWise checkpoint 处理结构不一致,因此采用生产实际使用的文件保存和加载接口。3.3 功能与性能设计
Pipeline Layout UT 覆盖 3 类正常布局和 7 类异常或冲突布局,共 10 个 pytest 收集项。
Swap Optimizer 默认 UT 调整如下:
原 8 卡拓扑矩阵继续通过
slow/--run-all执行。默认 UT 耗时目标为降低 50% 以上,最终数据以相同 NPU 环境的 CI 结果为准。3.4 安全隐私与 DFX 设计
core_v0.12.1兼容。3.5 编程与调用设计
3.5.1 编程模型基本设计
开发环境:
core_v0.12.1。验收标准:
--run-all运行。3.5.2 接口定义与设计
本提案不增加或修改公开 API,测试使用现有接口:
Swap-Muon 仅在
load_state_dict内部刷新 state 缓存引用,不改变接口参数、返回值或调用方式。3.5.3 编程手册设计
本提案不需要新增用户编程手册。测试设计、执行命令、环境约束和性能对比记录在 RFC、PR 描述及关联 issue 中。
4. 测试设计
Pipeline Layout:
Swap-Muon checkpoint:
完整默认 optimizer UT:
完整 8 卡场景:
最终执行 MindSpeed 完整 UT、
pretrain_base.shST 及 pre-commit 门禁。5. 缺点和风险
6. 现有技术
本提案复用以下现有机制:
DistributedTest多进程测试框架。state_dict加载语义。与端到端训练测试相比,本方案使用最小模型和定向断言,在保留关键功能覆盖的同时降低 CI 成本。
7. 未解决问题
附录
mindspeed/core/optimizer/swap_muon/swap_muon.pytests_extend/unit_tests/features/optimizer/test_swap_optimizer.pytests_extend/unit_tests/features/pipeline_parallel/test_pipeline_model_parallel_layout.py欢迎加入社区,感谢您对社区的贡献 🎉!