在模型运行时遇到报错“Inner Error xxxx”,但打印的堆栈报错信息与实际错误无关

问题描述

报错截图举例:

问题分析

由于NPU模型训练时默认算子异步执行,导致算子执行过程中出现报错时,打印的报错堆栈信息并不是实际的调用栈信息。如上图所示,调用栈打印ReadQueue()接口报错,但是实际是算子报错。如果需要获取到与实际错误相对应的堆栈报错信息,需要设置环境变量,强制NPU模型训练时使用算子同步执行,这样在算子执行报错时,能够打印正确的调用栈信息。

处理方法

可以选择如下方案来解决该问题,修改环境变量ASCEND_LAUNCH_BLOCKING为1:
export ASCEND_LAUNCH_BLOCKING=1

再次运行模型,即可得到与实际错误一致的堆栈报错信息。