已合并
test(utils): add data worker API coverage tests on NPU #37242
test(utils): add data worker API coverage tests on NPU #37242
已合并
Jinfan Liu创建于 5月30日
Jinfan Liu
Jinfan Liu
5月30日

【合入来源】

https://gitcode.com/Ascend/pytorch/issues/2027
请勿携带内部流程信息(需求链接、问题单、内部issue等)

[x] issue/工单

【修改方案】

一、API功能说明

本 PR 补充 torch.utils.data worker/control 弱覆盖 API 的直接验证用例:
- torch.utils.data.dataloader._MultiProcessingDataLoaderIter
- torch.utils.data.dataloader._InfiniteConstantSampler
- torch.utils.data._utils.worker.ManagerWatchdog
- torch.utils.data._utils.worker._IterableDatasetStopIteration
- torch.utils.data._utils.worker._ResumeIteration
- torch.utils.data._utils.signal_handling._set_worker_signal_handlers
- torch.utils.data._utils.signal_handling._remove_worker_pids

上述 API 属于 DataLoader 多进程 iterator、IterableDataset 采样控制、worker 存活检查、worker 控制消息以及 worker 信号/pid 管理逻辑。

二、测试用例完备性说明

PyTorch 官方社区 test/test_dataloader.py 已通过 DataLoader 多进程用例覆盖上述 API 的调用链,但缺少对部分内部对象和控制消息的直接行为断言。本 PR 按 1.3 类补充 torch-npu 自定义测试文件 test/test_utils_data_api.py。

1. torch.utils.data.dataloader._MultiProcessingDataLoaderIter 直接覆盖:
   - test_multiprocessing_dataloader_iter_type_and_shutdown 构造 num_workers=1 的 DataLoader,显式断言 iter(loader) 是 _MultiProcessingDataLoaderIter,并验证 next(iterator) 返回预期 batch,最后调用 _shutdown_workers() 覆盖正常关闭路径。

2. torch.utils.data.dataloader._InfiniteConstantSampler 直接覆盖:
   - test_infinite_constant_sampler_yields_none 直接实例化 _InfiniteConstantSampler,并断言连续 yield None,覆盖 IterableDataset 无限索引采样器的核心行为。

3. torch.utils.data._utils.worker.ManagerWatchdog 直接覆盖:
   - test_manager_watchdog_reports_parent_alive 直接构造 ManagerWatchdog,并断言正常父进程场景 is_alive() 为 True。

4. torch.utils.data._utils.worker._IterableDatasetStopIteration / torch.utils.data._utils.worker._ResumeIteration 直接覆盖:
   - test_worker_control_message_fields 直接构造两个 dataclass 控制消息,断言 worker_id、seed 字段和 repr 内容,覆盖 worker 耗尽通知与 persistent worker 恢复消息的对象行为。

5. torch.utils.data._utils.signal_handling._set_worker_signal_handlers / torch.utils.data._utils.signal_handling._remove_worker_pids 直接覆盖:
   - test_worker_signal_handlers_and_pid_cleanup 直接调用 _set_worker_signal_handlers,并通过 _set_worker_pids 注册当前 pid 后调用 _remove_worker_pids 清理,覆盖 C 侧 worker signal handler 初始化和 worker pid registry 清理入口的正常路径。

本文件验证的是 DataLoader worker/control 面 API。为避免把验证目标混入 NPU IPC 和 worker 子进程设备 Tensor 传输,本新增用例中的多进程 DataLoader 使用 Python 字符串 payload,不在 worker 子进程返回 NPU Tensor;原 DataLoader NPU Tensor payload 路径已由 test_upstream 中单进程 DataLoader/collate 用例覆盖。

三、NPU适配方案

1. API 源码无需修改:上述 API 是 torch.utils.data 的 Python/C++ 控制面入口,不新增 NPU kernel,不改变接口语义。
2. 测试新增路径:新增 test/test_utils_data_api.py,文件聚焦 worker/control API 直接行为,可后续扩展同模块 API。
3. 分支提交范围:新增测试文件提交到 2.7.1、2.9.0、2.10.0、2.11.0、2.12.0 以及 master。

四、变更文件

  • test/test_utils_data_api.py

【资料变更】

已检查资料支持情况,结论如下:

dataloader:

  • 公开 API,在文档中记录:torch.utils.data.DataLoader、torch.utils.data._utils.collate.collate。对应资料 PR:https://gitcode.com/Ascend/pytorch/merge_requests/36233
  • 内部函数/类,不在文档中记录:DataLoader iterator、worker、signal handling、persistent worker 相关内部对象。

【接口变更】

不涉及。API 源码无修改,不新增、删除或变更对外接口。

【功能验证】

已在 2.7.1 对应 torch-npu 环境执行新增用例,结果如下;master 使用 2.12.0 验证环境执行。

验证环境

  • 操作系统:Ubuntu / Linux aarch64
  • 昇腾硬件:910B2
  • CANN 软件版本:8.3.RC1
  • 验证环境:
    • 2.7.1:torch 2.7.1+cpu / torch-npu 2.7.1.post3
    • 2.9.0:torch 2.9.0+cpu / torch-npu 2.9.0.post1
    • 2.10.0:torch 2.10.0+cpu / torch-npu 2.10.0rc3
    • 2.11.0:torch 2.11.0+cpu / torch-npu 2.11.0rc1
    • 2.12.0 / master 验证:torch 2.12.0+cpu / torch-npu 2.12.0.rc1

运行命令与结果

python test/test_utils_data_api.py
Ran 5 tests in 1.691s
OK

【CheckList】

  • 代码注释完备,正确记录错误日志
  • 代码实现进行了返回值、空指针等校验
  • PR标题正确使用类型标签,如:feat、fix、refactor、docs、test等
  • PR持续集成流水线(CI)执行通过,代码检查无异常
likedislike
Pull Request已成功合入, 合并人@ascend-robot
(感谢 Jinfan Liu 的贡献)
Jinfan LiuJinfan Liu
5月30日 创建了 pull request,commit 6332b688
Jinfan LiuJinfan Liu
5月30日 关联了issue:[Usage]: API一致性说明:torch.utils.data DataLoader / collate / worker 相关 API NPU 测试适配
ascend-robotascend-robot成员
5月30日 添加了label:ascend-cla/yes
ascend-robot
ascend-robot成员
5月30日 评论:

CLA Signature Pass

JfanLiu, thanks for your pull request. All authors of the commits have signed the CLA. 👍

likedislike
ascend-robot
ascend-robot成员
5月30日 评论:

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 /approve or /lgtm
  • Commenting /approve implies both code review (lgtm) and intent to merge (approve)
likedislike
ascend-robot
ascend-robot成员
5月30日 评论:

当前仓库存在以下 保护分支

Protected Branch Version Release
master
v2.7.1
v2.9.0
v2.10.0
v2.11.0
sync-pr28113--to-v2.9.0
v2.12.0

评论 /sync <branch1> <branch2> ... 可将当前 PR 修改同步到其它分支(创建同步 PR):
a) 如果当前 PR 是 Open 状态,同步操作将延迟到 PR 被合并时执行
b) 如果当前 PR 已经 Merged,将立即执行同步操作

注意:

  1. /sync 命令可以指定同步到多个分支,仅最后一个 /sync 命令生效
  2. 如果创建的同步 PR 不正确,可通过向同步 PR 的源分支提交轻量级 PR 完善,或使用 /close 命令关闭
likedislike
Jinfan Liu
Jinfan Liu
5月30日 评论:

compile

likedislike
ascend-robotascend-robot成员
5月30日 添加了label:ci-pipeline-running
ascend-robotascend-robot成员
5月30日 删除了label:ci-pipeline-running
ascend-robotascend-robot成员
5月30日 添加了label:ci-pipeline-passed
ascend-robot
ascend-robot成员
5月30日 评论:
流水线 PR-pipeline_pytorch#28361 已完成
阶段 任务名 状态 详情
编译构建 Build_X86 >>>
Build_ARM >>>
Build_LibTorch_x86 >>>
Build_LibTorch_ARM >>>
Build_X86_torchair 🛑 >>>
Build_ARM_torchair 🛑 >>>
patch_test 🛑 >>>
恶意代码检查 Antipoison >>>
编码安全与规范检查 CodeCheck >>>
check_error >>>
CodeCheck_lintrunner >>>
开源片段检查 SCA >>>
开发者测试 UT_X86_Part_01 >>>
UT_X86_Part_02 >>>
UT_ARM_A3_Part_01 >>>
UT_ARM_A3_Part_02 >>>
UT_ARM_A2_Part_01 >>>
UT_ARM_A2_Part_02 >>>
UT_ARM_A2_Part_03 >>>
UT_inductor_Part_01 🛑 >>>
UT_inductor_Part_02 🛑 >>>
UT_inductor_Part_03 🛑 >>>
UT_inductor_Part_04 🛑 >>>
UT_DIST_ARM_Part_01 🛑 >>>
UT_DIST_ARM_Part_02 🛑 >>>
UT_DIST_ARM_Part_03 🛑 >>>
UT_DIST_ARM_Part_04 🛑 >>>
流水线 PR-pipeline_pytorch >>>
likedislike
ascend-robot
ascend-robot成员
5月30日 评论:

Ascend docs pipeline is running...

likedislike
ascend-robotascend-robot成员
5月30日 添加了label:docs-ci-pipeline-running
ascend-robot
ascend-robot成员
5月30日 评论:

✅ 跳过 docs ci 检查,没有需要检查的文档文件

likedislike
ascend-robotascend-robot成员
5月30日 删除了label:docs-ci-pipeline-running
ascend-robotascend-robot成员
5月30日 添加了label:docs-ci-pipeline-success
Jinfan Liu
Jinfan Liu
6月4日 评论:

compile

likedislike
ascend-robotascend-robot成员
6月4日 删除了label:ci-pipeline-passed
ascend-robotascend-robot成员
6月4日 添加了label:ci-pipeline-running
ascend-robot
ascend-robot成员
6月4日 评论:

Ascend docs pipeline is running...

likedislike
ascend-robotascend-robot成员
6月4日 删除了label:docs-ci-pipeline-success
ascend-robotascend-robot成员
6月4日 添加了label:docs-ci-pipeline-running
ascend-robot
ascend-robot成员
6月4日 评论:

✅ 跳过 docs ci 检查,没有需要检查的文档文件

likedislike
ascend-robotascend-robot成员
6月4日 删除了label:docs-ci-pipeline-running
ascend-robotascend-robot成员
6月4日 添加了label:docs-ci-pipeline-success
ascend-robotascend-robot成员
6月4日 删除了label:ci-pipeline-running
ascend-robotascend-robot成员
6月4日 添加了label:ci-pipeline-passed
ascend-robot
ascend-robot成员
6月4日 评论:
流水线 PR-pipeline_pytorch#29643 已完成
阶段 任务名 状态 详情
编译构建 Build_X86 >>>
Build_ARM >>>
Build_LibTorch_x86 >>>
Build_LibTorch_ARM >>>
Build_X86_torchair 🛑 >>>
Build_ARM_torchair 🛑 >>>
patch_test 🛑 >>>
恶意代码检查 Antipoison >>>
编码安全与规范检查 CodeCheck >>>
check_error >>>
CodeCheck_lintrunner >>>
开源片段检查 SCA >>>
开发者测试 UT_X86_Part_01 >>>
UT_X86_Part_02 >>>
UT_ARM_A3_Part_01 >>>
UT_ARM_A3_Part_02 >>>
UT_ARM_A2_Part_01 >>>
UT_ARM_A2_Part_02 >>>
UT_ARM_A2_Part_03 >>>
UT_inductor_Part_01 🛑 >>>
UT_inductor_Part_02 🛑 >>>
UT_inductor_Part_03 🛑 >>>
UT_inductor_Part_04 🛑 >>>
UT_DIST_ARM_Part_01 🛑 >>>
UT_DIST_ARM_Part_02 🛑 >>>
UT_DIST_ARM_Part_03 🛑 >>>
UT_DIST_ARM_Part_04 🛑 >>>
流水线 PR-pipeline_pytorch >>>
likedislike
liwei386成员
6月4日 评论:

/approve

likedislike
ascend-robotascend-robot成员
6月4日 添加了label:approved
Jinfan LiuJinfan Liu
6月5日 修改了pull request 的描述
sunyu-xuan成员
6月5日 评论:

/lgtm

likedislike
ascend-robotascend-robot成员
6月5日 添加了label:lgtm
ascend-robotascend-robot成员
6月5日 合入了pull request
ascend-robot
ascend-robot成员
6月5日 评论:
流水线 pytorch_gitcode_PR_multiVersion#10054 [ commitID:821634ab ] 已完成
likedislike