已合并
test: Add test cases for torch.distributed.algorithms.ddp_comm_hooks.default_hooks.fp16_compress_wrapper to cover all scenarios. #42840
创建于 7月26日
test: Add test cases for torch.distributed.algorithms.ddp_comm_hooks.default_hooks.fp16_compress_wrapper to cover all scenarios. #42840
已合并
创建于 7月26日
已删除 :test_fp16_compress_wrapper_v2.12.0合入到Ascend/pytorchv2.12.0
7月26日

【合入来源】

如有社区issue,请关联issue链接
请勿携带内部流程信息(需求链接、问题单、内部issue等)

社区issue任务地址:https://gitcode.com/Ascend/pytorch/issues/3133
issue分析报告地址:https://gitcode.com/Ascend/pytorch/issues/3367

【修改方案】

请描述修改内容的具体实现,涉及哪些组件之间进行交互,可以用1、2、3、...进行罗列
如果是需求或者重构类的PR,需要补充详细设计文档(说明上下游组件关系、时序图、类图、DFX能力等内容)

  1. 新增 test/distributed/algorithms/ddp_comm_hooks/test_fp16_compress_wrapper.py 独立测试文件和 TestFp16CompressWrapper 测试类。测试通过 torch.accelerator.current_accelerator() 获取设备类型,将参与运算的张量迁移到 NPU,并使用 HCCL、动态空闲端口和显式进程组清理完成分布式验证。
  2. 新增 15 个测试方法,验证 torch.distributed.algorithms.ddp_comm_hooks.default_hooks.fp16_compress_wrapper 包装 allreduce_hookpowerSGD_hook 和自定义 Future hook 时的行为,覆盖 gradient_as_bucket_viewstatic_graph、两者组合、process_group=None、自定义子进程组和多 bucket 场景。
  3. 验证 torch.float32torch.float16torch.bfloat16 输入下的 state 透传、内部 FP16 dtype、Future 类型、结果 shape、dtype、设备和最终梯度,并覆盖 FP16 溢出边界、单 NPU直接调用契约及缺少 hook、非法 bucket、非 Future 返回和内部异常等错误场景。
  4. 对统一启动双进程测试的 _spawn helper 应用 skipIfUnsupportMultiNPU(WORLD_SIZE)。少于两张 NPU时跳过依赖双进程的 13 个测试,继续执行单 NPU契约和异常参数测试;具备至少两张 NPU时执行全部 15 个测试,避免 rank 1 使用非法设备索引。
  5. PyTorch 社区相关测试依赖 CUDA/NCCL,主要覆盖 all-reduce、PowerSGD 和 bucket view。新增独立测试用于补齐 HCCL/NPU 下的组合配置、dtype/Future/state 契约、边界值、异常参数和单设备执行覆盖,为该 API 的 NPU行为提供回归保护。

【资料变更】

请确认是否涉及资料变更。如涉及,需要在PR中体现,并简要说明修改内容。如不涉及,需填写“不涉及”

不涉及。API 本身已经适配,master/docs/zh/api/native_api 目录文档已经记录,无需资料变更。

【接口变更】

请确认是否涉及跨代码仓或者客户面可见的接口变更。如涉及,需要详细说明接口以及对应的变更内容,同时需要在资料中体现。如不涉及,需填写“不涉及”

不涉及。本次仅新增测试用例,不调整 torch.distributed.algorithms.ddp_comm_hooks.default_hooks.fp16_compress_wrapper 的实现或对外接口。

【功能验证】

v2.7.1

执行命令:

python test/distributed/algorithms/ddp_comm_hooks/test_fp16_compress_wrapper.py -v

结果:

test_fp16_compress_wrapper_allreduce ... ok
test_fp16_compress_wrapper_allreduce_grad_is_view ... ok
test_fp16_compress_wrapper_allreduce_grad_is_view_static_graph ... ok
test_fp16_compress_wrapper_allreduce_none_pg ... ok
test_fp16_compress_wrapper_allreduce_static_graph ... ok
test_fp16_compress_wrapper_custom_subgroup ... ok
test_fp16_compress_wrapper_future_dtype_and_state ... ok
test_fp16_compress_wrapper_invalid_arguments ... ok
test_fp16_compress_wrapper_multiple_buckets ... ok
test_fp16_compress_wrapper_predivide_overflow_boundary ... ok
test_fp16_compress_wrapper_powersgd ... ok
test_fp16_compress_wrapper_powersgd_grad_is_view ... ok
test_fp16_compress_wrapper_powersgd_grad_is_view_static_graph ... ok
test_fp16_compress_wrapper_powersgd_static_graph ... ok
test_fp16_compress_wrapper_single_npu_contract ... ok

----------------------------------------------------------------------
Ran 15 tests in 215.079s

OK

v2.11.0

执行命令:

python test/distributed/algorithms/ddp_comm_hooks/test_fp16_compress_wrapper.py -v

结果:

test_fp16_compress_wrapper_allreduce ... ok
test_fp16_compress_wrapper_allreduce_grad_is_view ... ok
test_fp16_compress_wrapper_allreduce_grad_is_view_static_graph ... ok
test_fp16_compress_wrapper_allreduce_none_pg ... ok
test_fp16_compress_wrapper_allreduce_static_graph ... ok
test_fp16_compress_wrapper_custom_subgroup ... ok
test_fp16_compress_wrapper_future_dtype_and_state ... ok
test_fp16_compress_wrapper_invalid_arguments ... ok
test_fp16_compress_wrapper_multiple_buckets ... ok
test_fp16_compress_wrapper_predivide_overflow_boundary ... ok
test_fp16_compress_wrapper_powersgd ... ok
test_fp16_compress_wrapper_powersgd_grad_is_view ... ok
test_fp16_compress_wrapper_powersgd_grad_is_view_static_graph ... ok
test_fp16_compress_wrapper_powersgd_static_graph ... ok
test_fp16_compress_wrapper_single_npu_contract ... ok

----------------------------------------------------------------------
Ran 15 tests in 209.623s

OK

v2.12.0

执行命令:

python test/distributed/algorithms/ddp_comm_hooks/test_fp16_compress_wrapper.py -v

结果:

test_fp16_compress_wrapper_allreduce ... ok
test_fp16_compress_wrapper_allreduce_grad_is_view ... ok
test_fp16_compress_wrapper_allreduce_grad_is_view_static_graph ... ok
test_fp16_compress_wrapper_allreduce_none_pg ... ok
test_fp16_compress_wrapper_allreduce_static_graph ... ok
test_fp16_compress_wrapper_custom_subgroup ... ok
test_fp16_compress_wrapper_future_dtype_and_state ... ok
test_fp16_compress_wrapper_invalid_arguments ... ok
test_fp16_compress_wrapper_multiple_buckets ... ok
test_fp16_compress_wrapper_predivide_overflow_boundary ... ok
test_fp16_compress_wrapper_powersgd ... ok
test_fp16_compress_wrapper_powersgd_grad_is_view ... ok
test_fp16_compress_wrapper_powersgd_grad_is_view_static_graph ... ok
test_fp16_compress_wrapper_powersgd_static_graph ... ok
test_fp16_compress_wrapper_single_npu_contract ... ok

----------------------------------------------------------------------
Ran 15 tests in 214.918s

OK

master

执行命令:

python test/distributed/algorithms/ddp_comm_hooks/test_fp16_compress_wrapper.py -v

结果:

test_fp16_compress_wrapper_allreduce ... ok
test_fp16_compress_wrapper_allreduce_grad_is_view ... ok
test_fp16_compress_wrapper_allreduce_grad_is_view_static_graph ... ok
test_fp16_compress_wrapper_allreduce_none_pg ... ok
test_fp16_compress_wrapper_allreduce_static_graph ... ok
test_fp16_compress_wrapper_custom_subgroup ... ok
test_fp16_compress_wrapper_future_dtype_and_state ... ok
test_fp16_compress_wrapper_invalid_arguments ... ok
test_fp16_compress_wrapper_multiple_buckets ... ok
test_fp16_compress_wrapper_predivide_overflow_boundary ... ok
test_fp16_compress_wrapper_powersgd ... ok
test_fp16_compress_wrapper_powersgd_grad_is_view ... ok
test_fp16_compress_wrapper_powersgd_grad_is_view_static_graph ... ok
test_fp16_compress_wrapper_powersgd_static_graph ... ok
test_fp16_compress_wrapper_single_npu_contract ... ok

----------------------------------------------------------------------
Ran 15 tests in 189.099s

OK

【CheckList】

PR提交人对以下CheckList自检项进行全量自检,自检通过或不涉及,均修改 [ ] 为 [x]

likedislike
Pull Request已成功合入, 合并人@ascend-robot
(感谢 的贡献)
-此账号已注销
7月26日 创建了 pull request,commit df98a2c4
-此账号已注销
7月26日 关联了issue:【社区任务】7月社区任务第三期-Ascend for PyTorch API 一致性开发(25),torch.distributed.algorithms.ddp_comm_hooks.default_hooks.fp16_compress_wrapper 分析报告
atomgit-bot
atomgit-bot
7月26日 评论:

变更摘要

此 PR 新增了独立测试文件 test/distributed/algorithms/ddp_comm_hooks/test_fp16_compress_wrapper.py,为 torch.distributed.algorithms.ddp_comm_hooks.default_hooks.fp16_compress_wrapper 提供全面的 NPU/HCCL 场景验证。测试覆盖 allreduce_hookpowerSGD_hook 及自定义 Future hook 等包装场景,验证不同 gradient_as_bucket_viewstatic_graphprocess_group 配置组合下的梯度正确性与数据类型契约。

主要改动

  • 新增 TestFp16CompressWrapper 测试类:包含 15 个测试方法,通过 mp.spawn 启动多进程分布式测试,使用 hccl 后端和 torch.accelerator.current_accelerator() 自动适配 NPU 设备。
  • 新增 DDP 一致性验证方法 _run_ddp_parity:对比 fp16_compress_wrapper 包装后的模型与原生 DDP 模型的梯度结果,覆盖 allreduce_hook/powerSGD_hookgradient_as_bucket_viewstatic_graphprocess_group=None 等多种组合。
  • 新增数据类型与状态契约测试 _run_future_dtype_and_state_contract:验证 torch.float32torch.float16torch.bfloat16 输入下,wrapper 内部将梯度转为 torch.float16 进行通信,且 state 正确透传、Future 返回值 shape 和 device 一致。
  • 新增自定义子进程组与多 bucket 测试_run_custom_subgroup 验证每个 rank 使用独立子进程组时的行为;_run_multiple_buckets 通过 bucket_cap_mb 触发多 bucket 分桶,确认 wrapper 对每个 bucket 均正确调用内部 hook。
  • 新增边界与异常输入测试_run_overflow_boundary 验证 FP16 上界附近的数值安全性;test_fp16_compress_wrapper_invalid_arguments 覆盖缺少必选参数、传入 None hook、非 Future 返回值及内部异常抛出等错误路径。
likedislike
不准确?
atomgit-bot
atomgit-bot
7月26日 评论:

代码审查

经过对 test/distributed/algorithms/ddp_comm_hooks/test_fp16_compress_wrapper.py 的全面审查,我逐行分析了所有 433 行代码,包括:

  • 模块级常量、辅助类和钩子函数
  • 15 个测试方法及其对应的 _run_* 类方法
  • 资源管理(进程组创建/销毁)
  • 边界值处理(FP16 溢出、多 bucket、子进程组等)
  • 异常测试覆盖
  • 装饰器 skipIfUnsupportMultiNPU 的语义
  • 回调链和 Future 契约验证逻辑
  • _compressed_average 的数值精度

代码逻辑正确,没有发现安全性、可靠性或正确性问题。测试覆盖全面,资源管理得当,异常场景验证充分。

Closing Summary

  • 审查文件数:1
  • 发现问题数:0
  • 总体风险:低。这是一个新增的 NPU 适配测试文件,代码质量良好,覆盖了 fp16_compress_wrapper 的 15 个测试场景,包括正常路径、异常路径、边界值和多种 DDP 配置组合。未发现任何需要修复的问题。
文件 审查结果
test/distributed/algorithms/ddp_comm_hooks/test_fp16_compress_wrapper.py 无问题

⚠️ 已识别出整体风险,但无法提取行内评论,请参考整体评估。

likedislike
不准确?
此处折叠了45条消息 查看更多
Jingwei Huang
Jingwei Huang成员
8月5日 评论:

/lgtm

likedislike
ascend-robotascend-robot成员
8月5日 添加了label:lgtm
ascend-robotascend-robot成员
8月5日 合入了pull request
ascend-robot
ascend-robot成员
8月5日 评论:
流水线 pytorch_gitcode_PR_multiVersion#13640 [ commitID:9cafeb4b ] 已完成
likedislike
xin0366
13 天前 评论:

https://gitcode.com/Ascend/pytorch/issues/3133
image.png
由于此前账号资料调整,该任务由本人承接与完成,特此说明。

likedislike