已合并
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
已合并
从已删除 :test_fp16_compress_wrapper_v2.12.0合入到Ascend/pytorchv2.12.0
Pull Request已成功合入, 合并人@ascend-robot
(感谢 的贡献)7月26日 关联了issue:【社区任务】7月社区任务第三期-Ascend for PyTorch API 一致性开发(25),torch.distributed.algorithms.ddp_comm_hooks.default_hooks.fp16_compress_wrapper 分析报告
ascend-robot
7月26日 评论:
7月26日 评论:
atomgit-bot
7月26日 评论:
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_hook、powerSGD_hook 及自定义 Future hook 等包装场景,验证不同 gradient_as_bucket_view、static_graph、process_group 配置组合下的梯度正确性与数据类型契约。
主要改动
- 新增
TestFp16CompressWrapper测试类:包含 15 个测试方法,通过mp.spawn启动多进程分布式测试,使用hccl后端和torch.accelerator.current_accelerator()自动适配 NPU 设备。 - 新增 DDP 一致性验证方法
_run_ddp_parity:对比fp16_compress_wrapper包装后的模型与原生 DDP 模型的梯度结果,覆盖allreduce_hook/powerSGD_hook、gradient_as_bucket_view、static_graph、process_group=None等多种组合。 - 新增数据类型与状态契约测试
_run_future_dtype_and_state_contract:验证torch.float32、torch.float16、torch.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覆盖缺少必选参数、传入Nonehook、非 Future 返回值及内部异常抛出等错误路径。


不准确?
atomgit-bot
7月26日 评论:
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 |
无问题 |
⚠️ 已识别出整体风险,但无法提取行内评论,请参考整体评估。


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


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


xin0366
13 天前 评论:
13 天前 评论:
https://gitcode.com/Ascend/pytorch/issues/3133

由于此前账号资料调整,该任务由本人承接与完成,特此说明。


【合入来源】
社区issue任务地址:https://gitcode.com/Ascend/pytorch/issues/3133
issue分析报告地址:https://gitcode.com/Ascend/pytorch/issues/3367
【修改方案】
test/distributed/algorithms/ddp_comm_hooks/test_fp16_compress_wrapper.py独立测试文件和TestFp16CompressWrapper测试类。测试通过torch.accelerator.current_accelerator()获取设备类型,将参与运算的张量迁移到 NPU,并使用 HCCL、动态空闲端口和显式进程组清理完成分布式验证。torch.distributed.algorithms.ddp_comm_hooks.default_hooks.fp16_compress_wrapper包装allreduce_hook、powerSGD_hook和自定义 Future hook 时的行为,覆盖gradient_as_bucket_view、static_graph、两者组合、process_group=None、自定义子进程组和多 bucket 场景。torch.float32、torch.float16、torch.bfloat16输入下的 state 透传、内部 FP16 dtype、Future 类型、结果 shape、dtype、设备和最终梯度,并覆盖 FP16 溢出边界、单 NPU直接调用契约及缺少 hook、非法 bucket、非 Future 返回和内部异常等错误场景。_spawnhelper 应用skipIfUnsupportMultiNPU(WORLD_SIZE)。少于两张 NPU时跳过依赖双进程的 13 个测试,继续执行单 NPU契约和异常参数测试;具备至少两张 NPU时执行全部 15 个测试,避免 rank 1 使用非法设备索引。【资料变更】
不涉及。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结果:
v2.11.0
执行命令:
python test/distributed/algorithms/ddp_comm_hooks/test_fp16_compress_wrapper.py -v结果:
v2.12.0
执行命令:
python test/distributed/algorithms/ddp_comm_hooks/test_fp16_compress_wrapper.py -v结果:
master
执行命令:
python test/distributed/algorithms/ddp_comm_hooks/test_fp16_compress_wrapper.py -v结果:
【CheckList】