已合并
test: add NPU tests for BroadcastingTorchSaveReader APIs #35057
zjucn创建于 5月8日
test: add NPU tests for BroadcastingTorchSaveReader APIs #35057
已合并
Pull Request已成功合入, 合并人@ascend-robot
(感谢 zjucn 的贡献)ascend-robot
5月8日 评论:
5月8日 评论:
ascend-robot
5月8日 评论:
5月8日 评论:
Thanks for your pull-request.
The full list of commands accepted by me can be found at here。
You can get sig-info at here
PR Approval Progress
✅ Congratulations! All modules have met the lgtm and approve requirements.
Module Approval Details
| module | lgtm status | approve status |
|---|---|---|
| test | ✅ 李伟, sunyu-xuan (2/2) | ✅ 李伟 (1/1) |
💡 Tip:
- Committer can comment
/approveor/lgtm- Commenting
/approveimplies both code review (lgtm) and intent to merge (approve)
CLA Signature Pass
zjucn, thanks for your pull request. All authors of the commits have signed the CLA. 👍


5月8日 添加了label:ascend-cla/yes
ascend-robot
5月8日 评论:
5月8日 评论:
当前仓库存在以下 保护分支 :
| Protected Branch | Version | Release |
|---|---|---|
| master | ||
| v2.11.0 | ||
| v2.7.1 | ||
| v2.10.0 | ||
| v2.9.0 |
评论 /sync <branch1> <branch2> ... 可将当前 PR 修改同步到其它分支(创建同步 PR):
a) 如果当前 PR 是 Open 状态,同步操作将延迟到 PR 被合并时执行
b) 如果当前 PR 已经 Merged,将立即执行同步操作
注意:
- /sync 命令可以指定同步到多个分支,仅最后一个 /sync 命令生效
- 如果创建的同步 PR 不正确,可通过向同步 PR 的源分支提交轻量级 PR 完善,或使用 /close 命令关闭


此处折叠了44条消息 查看更多
5月11日 添加了label:approved
sunyu-xuan
5月12日 评论:
5月12日 评论:
/lgtm


5月12日 添加了label:lgtm
ascend-robot
5月12日 评论:
5月12日 评论:
Review Guide
This pull-request passes review.
Committers who wrote a comment of /approve are: 李伟.
Reviewers who wrote a comment of /lgtm are: 李伟, sunyu-xuan.


5月12日 合入了pull request
【合入来源】
本 PR 覆盖以下 API:
torch.distributed.checkpoint.format_utils.BroadcastingTorchSaveReadertorch.distributed.checkpoint.format_utils.BroadcastingTorchSaveReader.read_metadatatorch.distributed.checkpoint.format_utils.BroadcastingTorchSaveReader.prepare_local_plantorch.distributed.checkpoint.format_utils.BroadcastingTorchSaveReader.prepare_global_plantorch.distributed.checkpoint.format_utils.BroadcastingTorchSaveReader.read_data【修改方案】
一、解决方案
针对 issue 中提出的
BroadcastingTorchSaveReaderAPI 专项测试缺失问题,本 PR 新增test_broadcasting_reader_api.py,以“API 级行为验证 + NPU 分布式数据面验证”的方式补齐相关测试。本 PR 做如下修改:
test_broadcasting_reader_api.py,覆盖BroadcastingTorchSaveReader的 metadata、plan 透传、数据加载和错误边界行为。with_comms和skipIfUnsupportMultiNPU(2)验证read_data在 NPU/HCCL 分布式环境下的 broadcast 加载路径。DynamicMetaLoadPlanner覆盖普通 torch save 文件无 DCP metadata 时的推荐加载组合。新增测试文件:
二、用例完备性说明
本次新增 6 个测试用例,覆盖
BroadcastingTorchSaveReader的生命周期入口、计划透传、数据加载主路径和错误边界。1.
test_read_metadata_returns_empty_metadata覆盖 API:
read_metadata验证内容:
Metadata。state_dict_metadata为空字典。该用例证明
BroadcastingTorchSaveReader在 torch save 无 metadata 文件的情况下,能按设计返回空 metadata,并把 metadata 构造职责交给 planner。2.
test_prepare_local_plan_returns_input_plan覆盖 API:
prepare_local_plan验证内容:
storage_data和planner_data的LoadPlan。prepare_local_plan后返回值与输入对象是同一个对象。该用例证明 reader 不会修改本地 planner 结果,符合该 API 的 no-op 设计。
3.
test_prepare_global_plan_returns_input_plans覆盖 API:
prepare_global_plan验证内容:
LoadPlan列表。prepare_global_plan后返回值与输入列表是同一个列表。该用例证明 reader 在全局 planning 阶段不引入额外调度逻辑,保持 DCP 默认计划流转。
4.
test_read_data_rejects_byte_io_items覆盖 API:
read_data验证内容:
LoadItemType.BYTE_IO类型的ReadItem。read_data时断言抛出only supports loading Tensors。该用例覆盖官方端到端成功路径没有覆盖的错误边界,证明 reader 对非 tensor 对象的限制是显式、可预期的。
5.
test_read_data_loads_torch_save_tensor_to_npu_state_dict覆盖 API:
read_data验证内容:
torch.save保存普通 tensor checkpoint。with_comms启动 NPU/HCCL 分布式环境。dcp.load + DynamicMetaLoadPlanner + BroadcastingTorchSaveReader加载。该用例覆盖
read_data的核心成功路径,证明 torch save 文件可以经 coordinator 读取、broadcast 分发并写回 NPU state_dict。6.
test_read_data_handles_nested_state_dict覆盖 API:
read_data验证内容:
{"model": {"weight": ..., "bias": ...}}保存 torch save checkpoint。DynamicMetaLoadPlanner默认 flatten 行为加载。weight和bias均正确写回。该用例覆盖
read_data中flatten_state_dict为 True 时的关键路径,证明嵌套 state_dict 在 NPU 分布式加载场景下可用。覆盖关系总结
test_read_metadata_returns_empty_metadatatest_prepare_local_plan_returns_input_plantest_prepare_global_plan_returns_input_planstest_read_data_rejects_byte_io_itemstest_read_data_loads_torch_save_tensor_to_npu_state_dicttest_read_data_handles_nested_state_dict上述用例覆盖了 reader 生命周期中本 PR 涉及的全部 API,并将纯 Python 计划行为与真实 NPU 通信加载行为分开验证,便于定位问题。
三、NPU 适配说明
本次不修改 torch-npu 生产代码,仅新增测试用例。
适配验证策略:
state_dict,验证 reader 写回路径能落到 NPU 设备。with_comms和skipIfUnsupportMultiNPU(2)启动 HCCL 分布式环境,覆盖dist.broadcast的 NPU 通信路径。BroadcastingTorchSaveReader的 coordinator 读取模型。DynamicMetaLoadPlanner复现官方推荐组合,覆盖无 DCP metadata 的 torch save 加载场景。经检查,2.7.1、2.9.0、2.10.0、2.11.0、2.12.0 和 master 中本测试依赖的
BroadcastingTorchSaveReader核心语义、LoadPlan/ReadItem字段以及dcp.load调用方式保持兼容。高版本主要是类型标注和内部异常写法调整,不影响本用例验证的 metadata、plan 透传、BYTE_IO 错误边界和 tensor broadcast 加载路径,因此不同版本不需要拆分修改测试逻辑。为什么不需要修改 API:
read_metadata、prepare_local_plan、prepare_global_plan是 DCP storage reader 生命周期的通用 Python 接口,不依赖硬件后端。read_data中与硬件相关的部分是 tensor device 和dist.broadcast,这部分通过真实 NPU tensor 和 HCCL 进程组验证即可。【资料变更】
【接口变更】
【功能验证】
在 2.7.1、2.9.0、2.10.0、2.11.0、2.12.0, master版本上执行新增测试,均通过。
【CheckList】