功能问题定位
模型中存在不支持的算子会导致torchAir成图失败,具体支持算子清单可以参考:ATen API支持清单
1. dynamo成图python日志
开启方式:
import logging
torch._logging.set_logs(dynamo=logging.DEBUG, aot=logging.DEBUG, output_code=True, graph_code=True, recompiles=True)
主要用于原生dynamo报错时定位具体问题,主要看FX图guard信息,可以看到dynamo成FX图的具体流程,从而找到dynamo报错或者不支持的原因。
2. TorchAir python日志
开启方式:
import logging
torchair.logger.setLevel(logging.DEBUG)
当发生例如converter内部报错、TorchAir配置项报错等问题时,可以打印该日志查看TorchAir的converter转换流程或配置项等。
3. TorchAir C++日志
开启方式:
export TNG_LOG_lEVEL=0
主要用于定位Ascend IR图是否配置以及内存问题。在该日志中可以看到Ascend IR图是否编译成功以及传入的具体配置项,同时还能够看到输入/输出的内存申请。
精度问题定位
1. TorchAir python日志
开启方式:
import logging
torchair.logger.setLevel(logging.DEBUG)
除了converter内部报错、TorchAir配置项报错等问题,该日志还可以查看单个算子的输入/输出shape用于定位精度问题。
2. Tensor print
图模式下,图内中间节点的device输出结果无法直接print查看。可以通过npu_print API打印。使用方式如下:
import torch, torch_npu, torchair
class Model(nn.Module):
...
def forward(self, x):
...
y = x ** 2
torchair.ops.npu_print("y=", y, summarize_size=2)
...
model = Model()
model = torch.compile(model)
out = model(x)
API说明:def npu_print(*args, summarize_size=3)
- *args: 支持输入torch.Tensor和python基本类型 - str, bool, float, int
- summarize_size: 打印tensor时,每个轴首尾展示的数据量
接口约束:
- 入参args中至少包含一个Tensor类型输入
- summarize_size为大于0的正整数或者-1(全打印)
- 接口是异步打印,多个npu_print的输出顺序与被打印节点执行序一致