我有一个大型机器学习/计算机视觉项目,它使用ONNX模型,使用python。该项目大约需要3秒(本地)才能加载模型+推断。
加载onnx模型所需的
时间: onnx推理所需的0.2702977657318115时间,onnx推理所需的1.673530101776123时间,onnx推理所需的时间0.7677013874053955。
在部署项目之后,这个加载时间总是在服务器上的每一个单独的点击时启动。
例如,如果4个用户一次请求,所有结果将花费大约30秒。当只有一个请求时,只需10秒左右。
问题,在初始化服务器时,是否有任何方法只加载onnx模型一次,而不是使用每个post请求?
我试过async.io
它帮助排队请求,但最后一个请求仍然需要等待30秒才能得到结果,尽管CPU使用率并不是100%。我不确定我的问题的解决方案是只加载onnx模型一次,或者多线程,或者我是否通过将async.io应用于我的项目来做最好的事情。
发布于 2022-11-21 16:05:19
您是否试图加载模型,然后在每次有请求时都进行推断?
您应该加载一次,并在整个推理过程的整个时间周期内保持会话。您还可以查看ONNXruntime附带的执行提供程序,以尝试加快推理时间,比如CUDA, tensorRT.
import onnxruntime as ort
def load_model(onnx_model_path):
inference_session = ort.InferenceSession(
onnx_model_path,
)
# get input and output names of model layers for inference placeholder
inputs = inference_session.get_inputs()[0].name
outputs = [
output.name for output in inference_session.get_outputs()
]
return inference_session, {"inputs": inputs, "outputs": outputs}
def main():
inf_session, input_output_dict = load_model("your/model.onnx")
while True:
inf_session.run(input_output_dict["outputs"], {
str(input_output_dict[inputs]): your_array_input})https://stackoverflow.com/questions/74252832
复制相似问题