使用MindSpore Lite推理,报错RuntimeError: data size not equal! Numpy size: 6144000, Tensor size: 0

1 系统环境

硬件环境(Ascend/GPU/CPU): Ascend/GPU/CPU
MindSpore版本: mindspore lite=2.3.1
执行模式(PyNative/ Graph):不限
Python版本: Python=3.8
操作系统平台: linux

2 报错信息

2.1问题描述

使用如下脚本进行推理出现报错

2.2脚本信息

inputs = self.ms_model.get_inputs()

inputs[1].set_data_from_numpy(xa.astype(np.float32))
inputs[2].set_data_from_numpy(kv_cache.astype(np.float32))
inputs[3].set_data_from_numpy(np.array([offset],dtype=np.int32))
inputs[0].set_data_from_numpy(x.astype(np.int32))

对应tensor信息如下:

name: kv_cache,
dtype: DataType.FLOAT32,
shape: [48, -1, 1024, -1],
format: Format.NCHW,
element_num: 0,
data_size: 0.
device: None:-1.

2.3 报错信息

RuntimeError: data size not equal! Numpy size: 6144000, Tensor size: 0

3 根因分析

调用get_inputs然后进行set_data_from_numpy是lite云测推理的方法。

查看如下文档:

其中kv_cache的shape是[48, -1, 1024, -1]

是动态shape,因此需要调用resize接口

inputs = model.get_inputs()  

model.resize(inputs, [四个输入的shape])

4 解决方案

在get_inputs后调用resize接口

inputs = self.ms_model.get_inputs()  
self.ms_model.resize(inputs, [四个输入的shape])  
inputs[1].set_data_from_numpy(xa.astype(np.float32))  
inputs[2].set_data_from_numpy(kv_cache.astype(np.float32))  
inputs[3].set_data_from_numpy(np.array([offset],dtype=np.int32))  
inputs[0].set_data_from_numpy(x.astype(np.int32))