已关闭
【26.2.0众测】NPUGraphs/NPUGraph_EX 输入非 batch 维 shape 变化时报底层 fake-tensor 错误,未提示“图捕获需静态形状” #5105
程康博创建于  9月25日关闭于  19 天前
程康博
程康博
9月25日 创建

环境

Atlas 800T A2 / 910B3 / CANN 9.1.0 / Python 3.12 aarch64;torch 2.7.1+torch_npu 2.7.1.post8(tf32 项在 2.7.1/2.9.0 均复现)

问题描述

NPU Graph 捕获要求输入形状静态。backend="npugraphs"(npugraph_ex 同样)下,仅 batch 维变化可以运行,但特征维 / 维度数变化时直接抛出底层 FakeTensor 的内部错误,信息对用户不友好:

TorchRuntimeError: Dynamo failed to run FX node with fake tensors: call_function <built-in function linear>(*(FakeTensor(..., device='npu:0', size=(s0, s1)), Parameter(...)))
RuntimeError: a and b must have same reduction dim, but got [s0, s1] X [128, 256].

用户无法从该堆栈判断根因是“NPU Graph 不支持特征维变化”,也得不到“请固定形状/改用非图后端/重新捕获”的指引。

最小复现

import torch, torch_npu, torch.nn as nn
torch.npu.set_device(0)
m = nn.Sequential(nn.Linear(128,64), nn.ReLU(), nn.Linear(64,10)).npu().eval()
cf = torch.compile(m, backend="npugraphs")
with torch.no_grad():
    x = torch.randn(4,128,device="npu"); cf(x)          # 首次捕获
    cf(torch.randn(8,128,device="npu"))                 # batch 维变化:OK
    cf(torch.randn(4,64, device="npu"))                 # 特征维 128->64:抛底层错误

期望

  1. 该场景抛出语义明确的异常(如“NPU Graph 已按固定形状捕获,输入特征维变化不支持,请固定形状或重新捕获/使用非图后端”),而不是 FakeTensor/linear reduction dim 的内部报错;
  2. 文档明确 NPUGraphs/NPUGraph_EX 对动态 shape 的支持边界(哪些维度可变、变化后是自动重捕获还是报错)。
likedislike
TorchNPU-BotTorchNPU-Bot成员
9月25日 添加了label:help-wantedbot-triaged
TorchNPU-Bot
TorchNPU-Bot成员
9月25日 评论:

检测到社区任务相关 issue,自动添加标签:help-wanted

likedislike
程康博
程康博
9月25日 评论:

复现脚本与 NPUGraphs/NPUGraph_EX 实测见众测 PR(跨仓完整链接):
https://gitcode.com/Ascend/pytorch-ecosystem/merge_requests/39

likedislike
ascend-robotascend-robot成员
19 天前 关闭了 issue
ascend-robotascend-robot成员
19 天前 issue状态由 TODO 改变为 DONE
ascend-robotascend-robot成员
19 天前 添加了label:resolved