onnxruntime安装与使用(附实践中发现的一些问题)
一、onnxruntime安装
(1)使用CPU
如果只用CPU进行推理,通过下面这个命令安装。【如果要用GPU推理,不要运行下面这个命令】
pip install onnxruntime
(2)使用GPU
安装命令为:
pip install onnxruntime-gpu
安装 onnxruntime-gpu 注意事项:
-
onnxruntime-gpu包含onnxruntime的大部分功能。如果已安装onnruntime要把onnruntime卸载掉。 安装时一定要注意与CUDA、cuDNN版本适配问题,具体适配列表参考:
安装好后验证onnxruntime是否用到GPU:
>>> import onnxruntime >>> onnxruntime.get_device() GPU #表示GPU可用 >>> onnxruntime.get_available_providers() [TensorrtExecutionProvider, CUDAExecutionProvider, CPUExecutionProvider]
如果GPU不可用,可以在 ~/.bashrc 中添加下面两行内容:
export PATH=/usr/local/cuda/bin:$PATH export LD_LIBRARY_PATH=/usr/local/cuda/lib64:$LD_LIBRARY_PATH
二、使用onnxruntime推理
推理过程示例如下:
import onnxruntime import numpy as np device_name = cuda:0 # or cpu print(onnxruntime.get_available) if device_name == cpu: providers = [CPUExecutionProvider] elif device_name == cuda:0: providers = [CUDAExecutionProvider, CPUExecutionProvider] # Create inference session onnx_model = onnxruntime.InferenceSession(slowfast.onnx, providers=providers) # Create the input(这里的输入对应slowfast的输入) data = np.random.rand(1, 1, 3, 32, 256, 256).astype(np.float32) # Inference onnx_input = { onnx_model.get_inputs()[0].name: data} outputs = onnx_model.run(None, onnx_input)
三、onnxruntime和Pytorch推理时间对比
此处参考其他博主的一篇文章:
个人实践过程中遇到的一些问题:
最近在开发一个行为识别的功能,用到的模型是slowfast。完成基本开发之后想用onnnruntime来提高模型的推理性能,导出onnx模型后,分别用torch和onnxruntime进行推理测试(显卡一张RTX3090),结果发现:(1)在仅使用CPU的情况下,onnxruntime和torch推理时间近乎相等;(2)在使用GPU的情况下,torch推理速度提升了10倍左右,但onnxruntime推理速度不升反降,慢了将近一半。
原因分析:
- 关于使用GPU后,onnxruntime推理速度不升反降,我在网上找到一个相关的解释: [来自:https://github.com/PaddlePaddle/PaddleOCR/issues/5445] “这与ONNX的执行策略有关,由于模型中存在大量shape和constant的操作,这几个op计算在onnx中必须执行在CPU上,为了避免数据拷贝,onnx把网络结构前后整块操作都放在了cpu上,导致识别模型预测速度很慢。” “需要onnx那边修改,暂时只能这样了” 以上解释未经过验证,仅供参考。也欢迎大佬们补充指正。
2022.3.18更新
后面我又继续学习TensorRT,尝试将onnx模型转为TensorRT进行推理加速。学习过程中发现,TensorTR在测试推理速度前会先进行一次推理,并将这个过程叫做Warming up,原因大概是第一次推理时要从缓存中加载模型。回过头来我给Pytorch和onnx的测试也加上Warming up过程后,再测试对比二者的推理速度,发现在GPU下onnx的推理速度比Pytorch略有提升,使用TensorRT则相比于前两者在模型推理速度上有大幅度的提升。 感兴趣的话可以参考我的博客:
上一篇:
JS实现多线程数据分片下载
下一篇:
企业实施CMMI中 常见的4大问题