已合并
test(refs): add test cases for torch._refs._maybe_broadcast #42126
test(refs): add test cases for torch._refs._maybe_broadcast #42126
已合并
木路折创建于 7月19日
木路折
木路折
7月19日

【合入来源】

  • 关联 issue: https://gitcode.com/Ascend/pytorch/issues/2911

  • 任务分类:1.3(PyTorch 官方缺少对 torch._refs._maybe_broadcast 的直接测试)

  • pytorch 社区没有针对 torch._refs._maybe_broadcast 的独立测试用例,故新增该测试文件,用于验证该 API 的正确性。

【修改方案】

一、API 功能说明

torch._refs._maybe_broadcast(*args, preserve_cpu_scalar_tensors=True) 是 PyTorch 内部辅助函数,用于将一组 TensorLike / Number / None 参数广播到共同形状。它计算各 Tensor 输入的公共广播形状,对兼容形状的张量调用 .expand(),对 CPU scalar 张量根据 preserve_cpu_scalar_tensors 决定是否保留,对不兼容形状抛出 RuntimeError。该 API 为 PyTorch 私有接口。

二、测试用例完备性说明

PyTorch 官方 test/ 目录中没有直接调用 torch._refs._maybe_broadcast 的测试用例,现有测试仅通过 elementwise_meta 等内部路径间接使用,无法验证广播行为、CPU scalar 保留/展开策略及异常路径。本次新增 test/test_library_refs.py,直接验证:

  • 相同形状 NPU Tensor 直接返回原张量;
  • 兼容形状 NPU Tensor 广播到共同形状;
  • Number 参数原样返回;
  • None 参数原样返回;
  • preserve_cpu_scalar_tensors=True 时 CPU scalar 张量被保留;
  • preserve_cpu_scalar_tensors=False 时 CPU scalar 张量被展开;
  • 0-dim scalar 张量在 preserve_cpu_scalar_tensors=False 时被广播到共同形状;
  • 不兼容形状抛出 RuntimeError

三、版本适用范围

torch._refs._maybe_broadcast 为 PyTorch 内部私有接口,在 PyTorch v2.7.1、v2.9.0、v2.10.0、v2.11.0、v2.12.0、master 各目标分支均存在且函数签名一致,因此本测试用例需提交到上述全部分支。

四、NPU 适配

测试涉及 Tensor 创建与广播,非 scalar 参与计算的 Tensor 均通过 device_type = acc.type if (acc := torch.accelerator.current_accelerator()) else "cpu" 迁移到 NPU;CPU scalar 张量仅在测试 preserve_cpu_scalar_tensors 行为时保留在 CPU,这是该参数的测试目的。

【资料变更】

不涉及

torch._refs._maybe_broadcast 为 PyTorch 私有接口,且 docs/zh/api/native_api 中无需额外刷新资料。

【接口变更】

不涉及

仅新增测试用例,未修改任何业务代码。

【功能验证】

  • 本地运行时验证:未进行
  • 原因:当前服务器环境未安装对应版本的 PyTorch/Torch-NPU
  • 已将测试分支 test-refs-maybe-broadcast-v2.12.0 推送到 fork,由 CI 进行运行时验证

【CheckList】

likedislike
Pull Request已成功合入, 合并人@ascend-robot
(感谢 木路折 的贡献)
木路折木路折
7月19日 创建了 pull request,commit cdf90ea4
木路折木路折
7月19日 关联了issue:【社区任务】7月社区任务第二期-Ascend for PyTorch API 一致性开发(8)
atomgit-bot
atomgit-bot
7月19日 评论:

变更摘要

本 PR 新增测试文件 test/test_library_refs.py,为 PyTorch 私有 API torch._refs._maybe_broadcast 补充官方缺失的直接测试用例。测试类 TestLibraryRefs 覆盖了该函数的 8 种核心广播行为,包括同形状返回、兼容形状广播、Number/None 参数透传、CPU scalar 张量的保留与展开、NPU scalar 张量的广播以及不兼容形状的异常抛出。非 scalar 参与计算的张量均放置在 NPU 设备上以验证设备正确性,CPU scalar 张量仅在测试 preserve_cpu_scalar_tensors 行为时保留在 CPU。

主要改动

  • 新增 TestLibraryRefs 测试类:在 test/test_library_refs.py 中定义继承自 TestCase 的测试类,并提供 _npu_device 辅助方法获取默认 NPU 设备。
  • 新增同形状与兼容形状广播测试test_maybe_broadcast_same_shape_npu 验证相同形状 NPU Tensor 直接返回原对象,test_maybe_broadcast_different_shapes_npu 验证兼容形状 Tensor 被 expand 到共同形状。
  • 新增非张量类型参数测试test_maybe_broadcast_numbertest_maybe_broadcast_none 分别验证 NumberNone 类型参数被原样返回,不参与广播。
  • 新增 preserve_cpu_scalar_tensors 行为测试test_maybe_broadcast_cpu_scalar_preservedtest_maybe_broadcast_cpu_scalar_expanded 分别验证该参数为 True 时 CPU scalar 张量被保留、为 False 时被展开到共同形状。
  • 新增 NPU scalar 与不兼容形状测试test_maybe_broadcast_npu_scalar 验证 0 维 NPU scalar 张量被广播到共同形状,test_maybe_broadcast_incompatible_shapes 验证不兼容形状抛出 RuntimeError
likedislike
atomgit-bot
atomgit-bot
7月19日 评论:

代码审查

✅ 未发现问题

likedislike
此处折叠了190条消息 查看更多
ascend-robot
ascend-robot成员
19 天前 评论:
流水线 PR-pipeline_pytorch#53255 [ commitID:0fa87746 ] 已完成
>>>代码风格自动修复执行成功(无修复内容)
阶段 任务名 状态 详情
编译构建 Build_X86 >>>
Build_ARM >>>
Build_LibTorch_x86 >>>
Build_LibTorch_ARM >>>
Build_X86_torchair 🛑 >>>
Build_ARM_torchair 🛑 >>>
patch_test 🛑 >>>
恶意代码检查 Antipoison >>>
编码安全与规范检查 codecheck_pre-commit >>>
check_error >>>
lintrunner >>>
开源片段检查 SCA >>>
开发者测试 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 🛑 >>>
UT_ARM_A2_Select_Part_01 >>>
UT_ARM_A2_Select_Part_02 >>>
流水线 PR-pipeline_pytorch >>>
此流水线已支持下列评论快捷指令,仅PR创建者和白名单成员[wujinyuan1, huangjingwei, liangsongwei, yashi999, culechan, Dring, wuyouqi1, L1919_snow, qq_52711437, WhiteNight12, nomiz, xiu_21, ffmh, wanglijun55, hss-shuai, husichao, smallsilly, lanshaozuishuai, jimmyisme1, lzy0920232, alpha-junh, Sunshine_Youngster, wei_zhuoyi, zhangyihuiben, zyw-hw, zzzkeke, rmch, yangch0324, LucciC, AACAES, renyujin, wjlflyer, senzhen-town, pengjingyou, qsc97, limuan, yule100, xiaoqi-zhou, kuhn7, chenxingying, hanye02, zichun_ye, anyrenwei, kkjocker, wangzili121, Lu_G, yvjc, puddingfjz, HandsoemLemon, bigprestigee1, huawuyi, zhenyu10, dairenjie, du-jin-hang, zou-jieyu, adelaideliu, TrHan, wanlinan, Windwindzzz, pengqihw, kisnwang, yuheng_wang, honghao_wang, jizewei, zhangguoguang, sunyu-xuan, chenrayray, hbhu_bin, liujunzhu, c_34, LiNuoh, maoyuanpeng1, zzhongmin, zhaoyu65, bellatan, jiabaolin, zhuofanshen, wencaiwen, lu_zhuge, caoshuyang, molly12, lyx324521, LQ1206, gitcode-chenjiao, cai-weiwei1989, CHDong, ogqin, yuanlipingGit, xuqinglin1, lqz2, zouwei1, chaoluoa, paradox325, jackzhang1116, yaoyao, akh, yujiacheng, dengjie0116, Hubert11111, Shine_Ws, wslhj555, longqiand, OYtao666, JiaqingQiang, luyyyy, Kingbelial, zhanghaiyu0101, wenxp1018, yanliu-luoluo, ksun_sekiro, liyong328, wgzheng, tangky, vivi_is_coding, aoiaoisola, weixin_44494597, wangmengmengwang65667, hid57809721, qq_35468730, comeonup, C547032, gcw_m5OQChA4, yao_yao_ling_xian, cnnbwcy, szqfes_12, cora_19, cann_lilin, can, shawnylee233, fanglanyue0916, hhz0, LiNuohang, taohuoquan, Jesse]评论有效
  • compile、compile_inductor、compile_torchair : 运行流水线
  • retry : 重试流水线所有失败子任务
  • retry <任务名> : 仅重试指定失败子任务
  • stop : 停止流水线
likedislike
li_jing_hw成员
17 天前 评论:

/approve

likedislike
ascend-robotascend-robot成员
17 天前 添加了label:approvedlgtm
ascend-robotascend-robot成员
17 天前 合入了pull request
ascend-robot
ascend-robot成员
17 天前 评论:
流水线 pytorch_gitcode_PR_multiVersion#13581 [ commitID:0fa87746 ] 已完成
likedislike