问题说明:
使用onnxruntime-gpu完成了深度学习模型部署,但在打包时发生了报错:找不到CUDA
具体问题描述:
RuntimeError: D:\a\_work\1\s\onnxruntime\python\onnxruntime_pybind_state.cc:857 onnxruntime::python::CreateExecutionProviderInstance CUDA_PATH is set but CUDA wasnt able to be loaded. Please install the correct version of CUDA andcuDNN as mentioned in the GPU requirements page (https://onnxruntime.ai/docs/execution-providers/CUDA-ExecutionProvider.html#requirements), make sure they're in the PATH, and that your GPU is supported
前提:
1、确保你的 GPU 受 CUDA 支持,并且驱动程序已正确安装
2、电脑上已经安装与onnxruntime-gpu对应版本的cuda和cudnn,并加入了环境变量
3、打包之前可以正常运行
解决方案
onnxruntime-gpu
依赖于一些动态链接库,这些库可能不会被 pyinstaller
自动检测到。你可以创建一个自定义的 hook-onnxruntime.py
文件来帮助 pyinstaller
正确识别 onnxruntime-gpu
的依赖项。在项目目录下,创建一个hook-onnxruntime.py文件,并加入以下代码:
from PyInstaller.utils.hooks import collect_dynamic_libs
hiddenimports = ['onnxruntime', 'onnxruntime.capi', 'onnxruntime.capi.onnxruntime_pybind11_state']
binaries = collect_dynamic_libs('onnxruntime')
然后在pyinstaller命令中,使用:
pyinstaller --onefile --additional-hooks-dir=. -w main.py
--onefile:将所有的文件和依赖打包成一个单独的可执行文件
--additional-hooks-dir=.:指定一个额外的目录,pyinstaller
会在这个目录中查找自定义的钩子(hooks)文件。钩子文件用于在打包过程中处理一些特殊的依赖或行为。.
表示当前目录,即在当前目录中查找钩子文件
-w main.py:指定需要打包的py文件,不带控制台窗口打包
pyinstaller常用命令参数
基本参数
-F or --onefile:
将所有内容打包成一个单独的可执行文件-D or --onedir:
将所有内容打包成一个目录-w or --windowed or --noconsole:
对于 Windows 和 Mac OS X,不带控制台窗口打包
添加数据文件
--add-data:
添加额外的数据文件到打包的应用程序中;在 Windows 上使用 ;分隔,在 Unix 上使用:
分隔,例如:pyinstaller --add-data "data/file.txt;data"--add-binary:
添加二进制文件到打包的应用程序中,例:pyinstaller --add-binary "/path/to/binary;bin"--icon:
设置可执行文件的图标--version:
添加版本信息文件--hidden-import:
指定在脚本中没有直接导入的模块--exclude-module:
排除指定的模块
其他参数
-n or --name:
指定生成的可执行文件的名称--clean:
在构建之前清理 PyInstaller 缓存和临时文件--key:
使用指定的密钥对 Python 字节码进行加密