已合并
test(refs): add test cases for torch._refs._maybe_broadcast #42122
test(refs): add test cases for torch._refs._maybe_broadcast #42122
已合并
木路折创建于 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 中无需额外刷新资料。

【接口变更】

不涉及

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

【功能验证】

  • v2.7.1 本地 NPU 运行
    • 环境:Ubuntu 22.04 / Python 3.11.15 / PyTorch 2.7.1+cpu / Torch-NPU 2.7.1.post4 / CANN 9.0 / Ascend 910B3
    • 命令:TORCH_DEVICE_BACKEND_AUTOLOAD=0 python test/test_library_refs.py
    • 结果:Ran 8 tests in 0.771s, OK

【CheckList】

likedislike
Pull Request已成功合入, 合并人@ascend-robot
(感谢 木路折 的贡献)
木路折木路折
7月19日 创建了 pull request,commit 2562cf93
木路折木路折
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 覆盖了该辅助函数的核心广播行为(相同形状、兼容形状、不兼容形状)以及对 NumberNone、CPU scalar 张量、NPU scalar 张量等不同参数类型的处理逻辑,并验证了 preserve_cpu_scalar_tensors 参数的两种行为模式。非 scalar 张量均放置在 NPU 设备上以验证设备正确性。

主要改动

  • 新增 TestLibraryRefs 测试类:继承自 TestCase,封装了 _npu_device() 辅助方法用于获取默认 NPU 设备,所有测试方法均基于此设备运行。
  • 新增形状广播测试test_maybe_broadcast_same_shape_npu 验证相同形状张量直接返回原对象(assertIs),test_maybe_broadcast_different_shapes_npu 验证兼容形状张量被正确扩展到共同形状,test_maybe_broadcast_incompatible_shapes 验证不兼容形状抛出 RuntimeError
  • 新增非张量参数测试test_maybe_broadcast_numbertest_maybe_broadcast_none 验证 NumberNone 类型参数被原样返回,不被广播逻辑影响。
  • 新增 preserve_cpu_scalar_tensors 行为测试test_maybe_broadcast_cpu_scalar_preserved 验证参数为 True(默认)时 CPU scalar 张量保持原状;test_maybe_broadcast_cpu_scalar_expanded 验证参数为 False 时 CPU scalar 张量被展开到广播后的形状。
  • 新增 NPU scalar 张量测试test_maybe_broadcast_npu_scalar 验证 0 维 NPU scalar 张量与 CPU scalar 不同,会被广播到非 scalar 张量的共同形状。
likedislike
atomgit-bot
atomgit-bot
7月19日 评论:

代码审查

审查总结

  • P3(1 个)test_maybe_broadcast_cpu_scalar_preserved 未显式传递 preserve_cpu_scalar_tensors=True,依赖默认值,与对称测试不一致,存在测试脆弱性风险。
  • 总体风险评估:低风险。该文件是纯测试新增,所有 8 个测试用例逻辑正确,已在 NPU 环境验证通过(Ran 8 tests in 0.771s, OK)。发现的问题仅为测试健壮性改进建议,不影响功能正确性。

已审查文件

  • test/test_library_refs.py:已审查,发现 1 个 P3 问题。

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

likedislike
此处折叠了223条消息 查看更多
ascend-robot
ascend-robot成员
19 天前 评论:
流水线 PR-pipeline_pytorch#53253 [ commitID:eec592d6 ] 已完成
>>>代码风格自动修复执行成功(无修复内容)
阶段 任务名 状态 详情
编译构建 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#13579 [ commitID:eec592d6 ] 已完成
likedislike