已开启
[Usage]: 【API一致性任务】:torch.autograd.gradcheck 与 torch.autograd.profiler.emit_itt 在 NPU 环境下的验证说明 #4029
Yhw050920创建于  8月15日
Yhw050920
Yhw050920
8月15日 创建

关联任务 Issue:


环境信息

操作系统:openEuler 24.03 LTS-SP2 (aarch64)
昇腾硬件信息:910B3
CANN软件版本:8.5.0
安装的对应软件版本:torch 2.7.1+cpu / torch_npu 2.7.1

使用场景及问题

torch-npu 相比 pytorch,torch.autograd.gradcheck、torch.autograd.gradgradcheck 与 torch.autograd.profiler.emit_itt 在 NPU 环境下的验证说明。三个 API 均为纯 Python 接口,按新验收标准 1.2 ① 无需新增用例,提交 issue 说明 + 运行截图 + 支持情况验证。


一、torch.autograd.gradcheck / torch.autograd.gradgradcheck

API 功能

  • torch.autograd.gradcheck:通过小有限差分计算数值梯度并与分析梯度比较,验证自动微分实现的正确性。是 PyTorch 官方提供的梯度验证工具函数。
  • torch.autograd.gradgradcheck:gradcheck 的二阶版本,用于验证二阶梯度。
  • 核心特性 - 纯 Python 接口,本身不涉及硬件算子,仅调用 autograd 引擎和数值计算。

支持情况验证

Ascend NPU 不支持 float64 的 linalg.vector_norm、dot、mm、relu 等算子,因此:

  • fast_mode=True 无法在 NPU 上运行(内部 linalg.vector_norm 不支持 float64)
  • slow_mode=False 在 NPU 上支持 float64 的 mul、sin/cos、exp、sum、线性函数等运算

验证命令:

import torch
from torch.autograd import gradcheck, gradgradcheck

def f(x): return x.mul(5)
x = torch.rand(10, dtype=torch.float64, device="npu", requires_grad=True)
gradcheck(f, x, fast_mode=False)      # True
gradgradcheck(f, x, fast_mode=False)  # True

gradcheck验证结果

API 适配

gradcheck / gradgradcheck 均为纯 Python 接口,不涉及硬件算子。slow_mode 在 NPU 上对支持 float64 的运算可直接运行,无需代码适配。fast_mode 因 NPU float64 限制暂不支持,属硬件能力限制,非 API 实现问题。


二、torch.autograd.profiler.emit_itt

API 功能

  • torch.autograd.profiler.emit_itt:上下文管理器,使每个 autograd 操作发出 ITT (Instrumentation and Tracing Technology) 范围标注,用于 Intel VTune Profiler 性能分析。
  • 核心特性 - 纯 Python 接口,Intel ITT 软件插桩,与 NPU 硬件完全解耦。

支持情况验证

Ascend NPU 上 torch.profiler.itt.is_available() 返回 False,即 ITT 不可用:

  • emit_itt(enabled=False) 作为 no-op 正常工作
  • emit_itt(enabled=True) 因 ITT 不可用抛出 RuntimeError: Can't use ITT profiler - PyTorch was compiled without ITT

验证命令:

import torch
from torch.autograd.profiler import emit_itt
print(torch.profiler.itt.is_available())  # False
a = torch.tensor([1, 2, 3], dtype=torch.float32, device="npu")
with emit_itt(enabled=False):
    a.add(1.0)  # no-op 正常工作

emit_itt验证结果

API 适配

emit_itt 为纯 Python 接口,Intel ITT 软件插桩,不涉及 NPU 硬件。NPU 环境下 ITT 不可用(PyTorch 未编译 ITT),enabled=False 作为 no-op 可用,enabled=True 需 ITT 支持,属编译配置限制,非 API 实现问题。

likedislike
Yhw050920Yhw050920
8月15日 关联了看板:FrameworkPTAdapter 版本issue看板
TorchNPU-BotTorchNPU-Bot成员
8月15日 添加了label:event: api-consistencybot-triaged
ascend-robotascend-robot成员
8月15日 添加了label:usage
TorchNPU-Bot
TorchNPU-Bot成员
8月15日 评论:

检测到社区任务相关 issue,自动添加标签:event: api-consistency

likedislike
Yhw050920Yhw050920
8月15日 修改标题为 “[Usage]: 【API一致性任务】:torch.autograd.gradcheck 与 torch.autograd.profiler.emit_itt 在 NPU 环境下的验证说明”,原标题为“[Usage]: API一致性说明:torch.autograd.gradcheck 与 torch.autograd.profiler.emit_itt 在 NPU 环境下的验证说明”
Yhw050920Yhw050920
8月15日 修改了issue 的描述