当前位置: 首页 > news >正文

PyInstaller问题解决 onnxruntime-gpu 使用GPU和CUDA加速模型推理

前言

在模型推理时,需要使用GPU加速,相关的CUDA和CUDNN安装好后,通过onnxruntime-gpu实现。

直接运行python程序是正常使用GPU的,如果使用PyInstaller将.py文件打包为.exe,发现只能使用CPU推理了。

本文分析这个问题和提供解决方案,供大家参考。

问题分析——找不到ONNX Runtime GPU 动态库

首先直接运行python程序是正常使用GPU的,说明CUDA和cuDNN版本和安装都没问题,程序能找到相关CUDA库。

使用PyInstaller将.py文件打包为.exe后,只能用CPU推理了,因为它检测不到 GPU 加速所需的库

这通常是因为打包时没有正确包含 onnxruntime 所需的 CUDA 库

  • onnxruntime_providers_cuda.dll
  • onnxruntime_providers_shared.dll

解决方案

在使用PyInstaller命令打包时,通过--add-binary 添加 ONNX Runtime GPU动态库就可以啦

其中,需要把onnxruntime_providers_cuda.dllonnxruntime_providers_shared.dll这两个库加进来

比如原来的打包命令:

pyinstaller  --onefile  server_v2.0.py

添加GPU动态库后的打包命令:

pyinstaller --add-binary "C:/Users/86775/anaconda3/envs/gRPC_python/Lib/site-packages/onnxruntime/capi/onnxruntime_providers_cuda.dll;./onnxruntime/capi" --add-binary "C:/Users/86775/anaconda3/envs/gRPC_python/Lib/site-packages/onnxruntime/capi/onnxruntime_providers_shared.dll;./onnxruntime/capi" --onefile  server_v2.0.py
  • onnxruntime_providers_cuda.dll,这个库可以用everying在电脑中搜索一下,找到文件所在的路径,填进来就可以了;
  • onnxruntime_providers_shared.dll,这个库可以也用everying在电脑中搜索一下,找到文件所在的路径,填进来就可以了;

如下图所示,能看到运行exe后能使用CUDAExecutionProvider,成功GPU和CUDA加速模型推理 :

session = ort.InferenceSession(weights, providers=['CUDAExecutionProvider'])

# 检查是否使用CUDA

providers = session.get_providers()

print(f"Available providers: {providers}")

分享完成~

http://www.lryc.cn/news/432682.html

相关文章:

  • Apache Pig
  • axios返回的是promise对象如何处理?
  • 归并排序/计数排序
  • etcdctl defrag 剔除、添加etcd节点
  • 计算机网络(二) —— 网络编程套接字
  • 二百五十九、Java——采集Kafka数据,解析成一条条数据,写入另一Kafka中(一般JSON)
  • Qt项目使用Inno Setup打包(关于打包中文乱码的解决)
  • HTML和HTML5有什么区别
  • Collections
  • fastreport打印trichedit分页问题的解决
  • 【MeterSphere】vnc连接不上selenium-chrome容器
  • mysql explain分析
  • [论文笔记]Circle Loss: A Unified Perspective of Pair Similarity Optimization
  • Windows .NET8 实现 远程一键部署,几秒完成发布,提高效率 - CICD
  • echarts 水平柱图 科技风
  • 标准IO与系统IO
  • 【conda】Conda 环境迁移指南:如何更改 envs_dirs 和 pkgs_dirs 以及跨盘迁移
  • 脏页写入磁盘的过程详解
  • 数据结构——单链表实现和注释浅解
  • 滑动窗口系列(同向双指针)/9.7
  • C# 窗体中Control以及Invalidate,Update,Refresh三种重绘方法的区别
  • 缓存类型以及读写策略
  • 自动驾驶---Motion Planning之轨迹拼接
  • 没资料的屏幕怎么点亮?思路分享
  • 通信工程学习:什么是FEC前向纠错
  • 【机器人工具箱Robotics Toolbox开发笔记(二十)】机器人工具箱SerialLink I类函数参数说明
  • 单调栈的实现
  • ffmpeg的安装和使用教程
  • 从计组中从重温C中浮点数表示及C程序翻译过程
  • MySQL常用函数(总结)详细版