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))