报错日志与分析
“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等类型算子中;