ONNX Runtime 是一个跨平台的机器学习模型加速器,具有灵活的接口来集成特定于硬件的库。ONNX 运行时可以与 PyTorch、PaddlePaddle、Tensorflow/Keras、TFLite、scikit-learn 和其他框架中的模型一起使用。
最近研究使用onnxruntime推理PaddleOCR模型,为了使用显卡加速,使用onnxruntime-gpu版本。技术研究,什么都爱搞最新版本的,于是就下载了CUDA的12.1版本并安装。CUDA Toolkit Archive | NVIDIA Developer,onnxruntime下载了最新版Microsoft.ML.OnnxRuntime.Gpu.Windows的1.18.1版本
通过移植本人项目https://gitee.com/raoyutian/PaddleOCRSharp的PaddleOCR的C++代码并顺利编译完成。经过测试,GPU推理速度明显比Paddle框架的GPU版本还快。
于是找一台4090显卡的机器进行测试,同样安装CUDA的12.1版本,以及与开发环境一样CUDNN版本。期待也能顺利使用显卡加速。居然在测试机器上,无法使用GPU加速!!!于是使用依赖工具检测,居然缺少依赖。
于是本机同样依赖工具检测,虽然不缺依赖dll,但发现有几个依赖项居然指向了11.8版本的CUDA(本机有安装各种版本)。测试机器仅安装了CUDA的12.1版本。所以无法使用GPU加速。坑死人了!!!
经过检查CUDA的安装目录下的bin目录文件,发现缺少的几个文件是存在的,只是文件名不一样。引用对不上
根据onnxruntime的官方文档NVIDIA - CUDA onnxruntime1.18.1版本是支持CUDA的12.X版本,Onnxruntime居然依赖文件名是错误的。坑死宝宝了!!!
安装CUDA12.5版本,发现也不行。
最终使用onnxruntime-gpu的1.18.0版本,
完美解决!哈哈哈哈
不是最新版本就一定好,有多少坑,坑有多深,慢慢摸索吧。
最后附上onnxruntime-gpu使用PaddleOCR的模型推理效果:
PaddleOCR.dll封装后支持go\python\rust\c# C++等语言调用。