pyinstaller导出pytorch深度学习模型

        项目要求将模型导出成exe可执行文件,于是就使用pyinstaller进行打包,在打包的过程中遇到了一些问题现在在这里记录一下。(可能文章中的方法不是解决问题的正确方法,但是碰巧都给我解决了)

        具体的步骤其他大佬的博客里写的挺详细的,大家想了解的话可以去看看。
python将资源文件一起打包进exe 讲解(有算例)
使用pyinstaller将训练好的目标检测算法(基于pytorch)打包成一个exe文件(完整过程)
这里也给出我的环境:
windows10
python3.7.0
torch1.8.1
cuda10.1
PyInstaller4.0.0
安装:
平常我是在anaconda的虚拟环境中运行的,所以打包也用虚拟环境了。
先安装pyinstaller

pip install pyinstaller==4.0.0

安装完成后用控制台进入需要打包的页面
在这里插入图片描述
在这里插入图片描述
第一遍跑完后会生成一个.SPEC的配置文件一个build文件和dist文件。
如果显示成功的话可以在dist文件夹中找到可执行的exe文件。没有意外的话就可以用辣。
没有成功的话,可能是一些组件没有添加进去,接下来打开.SPEC文件进行配置。
在这里插入图片描述
主要是修改这两处,在datas中我把我训练好的权重放进去,每个文件作为一个元组类型,最终放在一个列表中,如果不是元组的话会有一个报错(ValueError: too many values to unpack)。
元组的格式是(“模型路径”,".生成的文件夹名") !!生成的路径前面有个点。最终会在dist文件夹下生成一个“.文件夹名”的文件夹。
在这里插入图片描述
里面就是含有我们的模型权重文件。
当然在这里改了的话,在我们的推理脚本中调用权重的路径也要进行修改。替换成相应的路径。
在这里插入图片描述
第二处修改的地方是hiddenimports,这里把自己写的脚本文件添加进去(比如自己写的utils),通过pip安装的会自动打包这个不用操心。
都设置好了之后。控制台执行

pyinstaller  xxxxxx.SPEC

就可以生成.exe可执行文件了。

问题:

主要是出现过两个问题
1、在编译生成的过程中出现了

UnicodeDecodeError: 'utf-8' codec can't decode byte 0xd7 in position 75141:

这个和编码有关系。网上有一些解决方案。
https://blog.csdn.net/qq_35307209/article/details/80856921
https://blog.csdn.net/qq_35203425/article/details/80992870
有些朋友的问题得到了解决,但是我的没有TAT…
然后看到一个大佬(找不到链接了555)说要从源头解决问题,找到他报错的那一处位置再对应的改改。我的报错显示在PyInstaller中的一个文件(具体那里也忘了…当时没有截图)。然后既然是编码的问题,我就在对应的语句后面加上了.decode(“utf-16”),这个也是一个个试的,因为水平实在是有限 …然后值得庆幸的是可以编译!(这里仅给出一种思路,因为我更改了编码之后就出现了下面的问题,猜测可能和修改了编码有关)

但是当我双击点开exe文件时,他就闪退了。仔细一看是有个错误。(这个截图了)

TypeError: compiled module 'C:\\Users\\Administrator\\Desktop\\qqqq\\dist\\github_edition_m3_onnx_yolo5\\base_library.zip\\encodings\\__init__.pyc' is not a code object

在这里插入图片描述
然后就去找解决方案,但是找了一圈没找到啥方法(可能是搜索的关键字有问题)。于是就尝试着把最新的pyinstaller版本降低一下,重装了4.0.0版本,然后重新生成,这次运行了还挺久。生成完成之后去文件夹一看,东西比原本多多了,一些用到的库全打包在里面,我觉得可能之前就是因为没把一些库打包进来。
之前没有将这些库放进来
然后双击.exe就可以运行了!
3、当然这里还有些小问题
在这里插入图片描述
这个是之前还没把运行文件里加载模型的路径给改过来。
在这里插入图片描述
这个是之前还没把自己写的脚本复制进来。
在这里插入图片描述
直接复制到"dist/你的文件名字/"里面,和exe同目录。

所有的问题解决了之后再运行,就可以运行成功了…
在这里插入图片描述
也是不容易。
在其他机器上还没尝试过…不知道行不行。

4.10更新
尝试过了,同样的python环境、CUDA版本、PyTorch版本下能直接运行。

4.13更新
新加了PyQt5之后,重新编译过后发现无法编译,报以下错误。

flag, ord(typcd), nm + pad)) 
struct.error: argument out of range

百度/Google了一下是编译过后文件过大的问题??
https://github.com/pyinstaller/pyinstaller/issues/4495
看了大佬们的解决方案,加了–clean好像也没啥用。

(ten3) C:\Users\Administrator\Desktop\qqqq>pyinstaller --clean -F qt_m3_onnx_yolo5.py

根据大佬们另外的说法,说是大文件不要用-F命令,于是采用以下命令

pyinstaller --clean qt_m3_onnx_yolo5.py

之后,编译成功!

  • 2
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
对于使用PyInstaller打包PyTorch GPU代码的问题,有一些注意事项和解决办法。首先,确保你的环境中已经正确安装了PyTorch和CUDA,并且你的代码可以在GPU上正常运行。 一个常见的问题是PyInstaller无法正确处理PyTorch GPU相关的依赖项。为了解决这个问题,你可以尝试以下方法: 1. 使用PyInstaller的`--hidden-import`选项来显式地导入一些PyTorch GPU相关的模块。例如,你可以尝试导入`torch.cuda`、`torch.backends.cudnn`和`torch.backends.cuda`等模块。这样可以确保PyInstaller能够正确地处理这些依赖项。 2. 另一种方法是在打包之前,将PyTorch的GPU支持关闭,将代码切换到使用CPU进行推理。这样一来,PyInstaller就不会再涉及与GPU相关的问题。你可以在代码中添加一些逻辑,当检测到没有GPU时,切换到CPU推理模式。 3. 如果以上方法都无法解决问题,你还可以尝试使用其他的打包工具,比如PyOxidizer或Nuitka。这些工具可能对于打包PyTorch GPU代码更加友好。 总之,在打包PyTorch GPU代码时,需要注意PyInstaller对于GPU相关的依赖项的处理。通过显式导入相关模块、关闭GPU支持或尝试其他打包工具,你应该能够解决打包问题。记得在打包之前,进行充分的测试以确保代码在不同环境中的正常运行。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [Pyinstaller打包Pytorch框架](https://blog.csdn.net/qq_42811827/article/details/124035548)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *2* [windows pyinstaller打包pytorch程序到exe文件](https://blog.csdn.net/whunamikey/article/details/121286772)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值