[教程]MindSpore Lite昇腾推理如何分析定位InferShape报错问题

报错日志与分析

“multi-batch” not support middle dynamic shape CurrentShape:[16,-1,512]. please check node in graph which cause dynamic shape.

一般出此类报错,是因为使用固定shape或者动态分档过程中,出现了过程动态的算子,导致后续shape无法推导,所以会出现报错,针对此类问题,首先需要找到出现过程动态shape的算子,并通过模型结构优化,等价替换掉过程动态的算子,如果无法替换,只能使用动态shape进行推理(但是使用动态shape推理,会导致模型性能不同程度劣化)。

定位流程

  • 获取昇腾后端日志,通过配置以下环境变量,可以获取昇腾日志,可以将日志重定向到文件中:

export ASCEND_GLOBAL_LOG_LEVEL=1

export ASCEND_SLOG_PRINT_TO_STDOUT=1

  • 在日志文件中,搜索 after_infer 关键字,搜索到的每行表示的是对应算子在infer shape之后的shape信息,其中包含输入以及对应的输出shape信息。在对应的shape中,如果输出shape中找到存在 -1的shape,则说明该节点为过程动态节点,需要通过算子中算子等价替换将对应的算子替换成其他算子,目前经验来看,主要存在于Slice, Gather 等类型算子中;