onnxruntime 多batchsize推理
时间: 2023-07-29 13:09:23 浏览: 582
使用ONNX Runtime推理模型.pdf
onnxruntime 支持多 batchsize 推理,即可以同时推理多个输入数据。这在一些应用中非常有用,比如批量处理多个数据。
使用 onnxruntime 进行多 batchsize 推理需要在创建 Session 时设置 batch_size,然后在调用 Session.run() 方法时传入多个输入数据。
示例代码如下:
```python
import numpy as np
import onnxruntime as ort
# 创建 SessionOptions 对象
options = ort.SessionOptions()
options.enable_dynamic_shape = True
# 创建 Session,设置 batch_size
batch_size = 3
session = ort.InferenceSession("model.onnx", options)
session.set_providers(['CPUExecutionProvider'])
session.set_providers(['CUDAExecutionProvider'])
session.set_providers(['TensorrtExecutionProvider'])
session.set_providers(['DnnlExecutionProvider'])
session.set_providers(['OpenVINOExecutionProvider'])
session.set_providers(['NupharExecutionProvider'])
session.set_providers(['NnapiExecutionProvider'])
session.set_providers(['ArmNNExecutionProvider'])
session.set_providers(['VitisAIExecutionProvider'])
session.set_providers(['TensorFlowExecutionProvider'], [{'device_id': '0'}])
session.set_providers(['TensorFlowExecutionProvider'], [{'device_id': '1'}])
session.set_providers(['TensorFlowExecutionProvider'], [{'device_id': '2'}])
session.set_providers(['TensorFlowExecutionProvider'], [{'device_id': '3'}])
session.set_providers(['TensorFlowExecutionProvider'], [{'device_id': '4'}])
session.set_providers(['TensorFlowExecutionProvider'], [{'device_id': '5'}])
session.set_providers(['TensorFlowExecutionProvider'], [{'device_id': '6'}])
session.set_providers(['TensorFlowExecutionProvider'], [{'device_id': '7'}])
session.set_providers(['TensorFlowExecutionProvider'], [{'device_id': '8'}])
session.set_providers(['TensorFlowExecutionProvider'], [{'device_id': '9'}])
input_name = session.get_inputs()[0].name
shape = session.get_inputs()[0].shape
shape[0] = batch_size
session.set_input_shape({input_name: shape})
# 多个输入数据
input_data_1 = np.random.rand(batch_size, 3, 224, 224).astype(np.float32)
input_data_2 = np.random.rand(batch_size, 3, 224, 224).astype(np.float32)
# 推理
output = session.run(None, {input_name: input_data_1})
output = session.run(None, {input_name: input_data_2})
```
在上面的示例代码中,先创建了一个 SessionOptions 对象,并将 enable_dynamic_shape 设置为 true。然后创建 Session 时设置 batch_size。在推理之前,先创建多个输入张量,然后调用 session.run() 方法分别进行推理。
阅读全文