已合并
test: add test cases for torch.set_warn_always.The current test cases for torch.set_warn_always fail to cover all essential scenarios and must be completed. #43575
创建于 19 天前
test: add test cases for torch.set_warn_always.The current test cases for torch.set_warn_always fail to cover all essential scenarios and must be completed. #43575
已合并
创建于 19 天前
已删除 :test_set_warn_always_v2.7.1合入到Ascend/pytorchv2.7.1
19 天前

【合入来源】

请勿携带内部流程信息(需求链接、问题单、内部issue等)

issue分析报告:https://gitcode.com/Ascend/pytorch/issues/3619

【修改方案】

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

1. 新增测试用例

新增 test/npu/test_set_warn_always.py,在 TestSetWarnAlways 中提供 4 个测试方法:

测试方法 可核验行号 验证场景
test_state_switching_and_return_value 39 依次开启、关闭全量告警,检查返回值为 None,并通过查询接口确认状态。
test_warn_always_emits_repeated_warnings 48 开启全量告警后连续触发同一 TORCH_WARN_ONCE 来源,确认两次警告均被记录。
test_warn_once_behavior_when_disabled 64 在独立子进程中关闭全量告警,连续触发同一警告来源并确认只记录一次。
test_invalid_inputs_preserve_state 95 覆盖非布尔值、关键字参数、缺少参数和多余参数,确认抛出异常且原有开启状态不被破坏。

setUp 保存原始全局状态并注册清理函数,保证每个测试结束后恢复环境。重复告警场景使用只读 NumPy 数组转换作为稳定的 TORCH_WARN_ONCE 来源;该触发源不依赖 NPU 计算,符合目标 API 本身设备无关的语义。

测试内容: 测试直接调用 torch.set_warn_always,覆盖布尔状态切换、None 返回值、查询接口一致性、开启时重复发出警告、关闭时单次告警,以及非法调用不改变既有状态。测试文件在 torch-npu 环境中验证公共 C10 告警控制路径未受 NPU 扩展影响。

新增原因及必要性: 现有社区测试只在 Autograd 用例中通过上下文辅助函数间接启用全量告警,缺少对目标 API 独立契约和异常路径的直接覆盖。新增测试补齐 NPU 环境下的公共告警状态管理与 TORCH_WARN_ONCE 行为验证,可防止状态切换、参数校验或警告次数发生回归。

【资料变更】

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

结论:不涉及。

torch.set_warn_always 是公开的非计算类 API,现有 NPU 原生 API 资料已记录其原生文档链接、支持状态和设备限制,且未错误声明数据类型支持;完整变更范围仅新增测试文件,不需要更新对外资料。

【接口变更】

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

结论:不涉及。

完整变更范围仅新增 test/npu/test_set_warn_always.py,未修改目标 API 的实现、声明、注册、跨仓依赖或客户可见行为。

【功能验证】

master

执行命令:

python test/npu/test_set_warn_always.py -v

结果:

test_invalid_inputs_preserve_state (__main__.TestSetWarnAlways.test_invalid_inputs_preserve_state) ... ok
test_state_switching_and_return_value (__main__.TestSetWarnAlways.test_state_switching_and_return_value) ... ok
test_warn_always_emits_repeated_warnings (__main__.TestSetWarnAlways.test_warn_always_emits_repeated_warnings) ... ok
test_warn_once_behavior_when_disabled (__main__.TestSetWarnAlways.test_warn_once_behavior_when_disabled) ... ok

----------------------------------------------------------------------
Ran 4 tests in 7.480s

OK

v2.7.1

执行命令:

python test/npu/test_set_warn_always.py -v

结果:

test_invalid_inputs_preserve_state (__main__.TestSetWarnAlways.test_invalid_inputs_preserve_state) ... ok
test_state_switching_and_return_value (__main__.TestSetWarnAlways.test_state_switching_and_return_value) ... ok
test_warn_always_emits_repeated_warnings (__main__.TestSetWarnAlways.test_warn_always_emits_repeated_warnings) ... ok
test_warn_once_behavior_when_disabled (__main__.TestSetWarnAlways.test_warn_once_behavior_when_disabled) ... ok

----------------------------------------------------------------------
Ran 4 tests in 7.172s

OK

v2.11.0

执行命令:

python test/npu/test_set_warn_always.py -v

结果:

test_invalid_inputs_preserve_state (__main__.TestSetWarnAlways.test_invalid_inputs_preserve_state) ... ok
test_state_switching_and_return_value (__main__.TestSetWarnAlways.test_state_switching_and_return_value) ... ok
test_warn_always_emits_repeated_warnings (__main__.TestSetWarnAlways.test_warn_always_emits_repeated_warnings) ... ok
test_warn_once_behavior_when_disabled (__main__.TestSetWarnAlways.test_warn_once_behavior_when_disabled) ... ok

----------------------------------------------------------------------
Ran 4 tests in 7.220s

OK

v2.12.0

执行命令:

python test/npu/test_set_warn_always.py -v

结果:

test_invalid_inputs_preserve_state (__main__.TestSetWarnAlways.test_invalid_inputs_preserve_state) ... ok
test_state_switching_and_return_value (__main__.TestSetWarnAlways.test_state_switching_and_return_value) ... ok
test_warn_always_emits_repeated_warnings (__main__.TestSetWarnAlways.test_warn_always_emits_repeated_warnings) ... ok
test_warn_once_behavior_when_disabled (__main__.TestSetWarnAlways.test_warn_once_behavior_when_disabled) ... ok

----------------------------------------------------------------------
Ran 4 tests in 7.511s

OK

【CheckList】

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

likedislike
Pull Request已成功合入, 合并人@ascend-robot
(感谢 的贡献)
-此账号已注销
19 天前 创建了 pull request,commit 6655d074
-此账号已注销
19 天前 关联了issue:torch.set_warn_always API一致性分析报告
atomgit-bot
atomgit-bot
19 天前 评论:

变更摘要

本 PR 为 torch.set_warn_always 补充缺失的测试用例,新增 test/npu/test_set_warn_always.py 文件,在 TestSetWarnAlways 测试类中覆盖状态切换、重复告警行为、子进程中的单次告警行为以及非法输入等场景;setUp 中保存原始全局状态并通过 addCleanup 注册清理函数,确保每个测试结束后恢复环境。

主要改动

  • 状态切换与返回值测试test_state_switching_and_return_value): 依次调用 torch.set_warn_always(True)torch.set_warn_always(False),断言返回值均为 None,并通过 torch.is_warn_always_enabled() 确认开关状态正确切换。
  • 开启全量告警后的重复告警测试test_warn_always_emits_repeated_warnings): 以只读 NumPy 数组调用 torch.from_numpy 作为稳定触发源,在 warnings.catch_warnings 下连续触发两次同一 TORCH_WARN_ONCE 来源,断言两条警告均被记录。
  • 关闭全量告警后的单次告警测试test_warn_once_behavior_when_disabled): 通过 subprocess.run 在独立子进程中关闭全量告警后连续触发同一警告来源,以进程返回码断言警告仅被记录一次。
  • 非法输入与状态保持测试test_invalid_inputs_preserve_state): 覆盖非布尔值(如 10None、字符串、对象)、关键字参数、缺少参数及多余参数等非法调用,断言抛出 RuntimeError/TypeError 异常,且预先开启的告警状态不被破坏。
  • 测试环境恢复setUpaddCleanup): 测试前保存 torch.is_warn_always_enabled() 的原始状态,并注册清理函数在每个用例结束后恢复全局状态,避免用例间相互影响。
likedislike
atomgit-bot
atomgit-bot
19 天前 评论:

代码审查

✅ 未发现问题

likedislike
此处折叠了49条消息 查看更多
ascend-robot
ascend-robot成员
10 天前 评论:
流水线 PR-pipeline_pytorch#59508 [ commitID:cbea4137 ] 已完成
>>>代码风格自动修复执行成功(无修复内容)
阶段 任务名 状态 详情
编译构建 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, WSs_321]评论有效
  • compile、compile_inductor、compile_torchair : 运行流水线
  • retry : 重试流水线所有失败子任务
  • retry <任务名> : 仅重试指定失败子任务
  • stop : 停止流水线
likedislike
Jingwei Huang
Jingwei Huang成员
10 天前 评论:

/lgtm

likedislike
ascend-robotascend-robot成员
10 天前 添加了label:lgtm
ascend-robotascend-robot成员
10 天前 合入了pull request
ascend-robot
ascend-robot成员
10 天前 评论:
流水线 pytorch_gitcode_PR_multiVersion#13886 [ commitID:cbea4137 ] 运行失败
likedislike