Nuitka打包Python:Torch环境在CUDA下onnx模型推测

为什么选择Nuitka?

        Nuitka将Python代码编译为C,单凭这一点无论是效率、防反编译都是好的选择。但也不是十全十美,我在实战中有遇到如兼容性不太好、打包速度慢、文件臃肿等问题

记录打包过程

0、Python程序包含以下包:

  • opencv-python:4.10.0.84
  • numpy:1.24.3
  • torch:2.3.1
  • onnxruntime-gpu:1.18.1
  • pandas:2.2.2
  • time
  • win32con
  • win32gui
  • configparser

其他环境:Nuitka版本2.4.7、CUDA版本12.0

1、cmd进入anaconda环境

        我将Nuitka直接装在了推理环境中,所以得进入anaconda环境并切换目录到待打包的py文件目录下:

进入anaconda环境:
conda activate onnx

切换目录至待打包.py目录:
cd C:\hall\CarCV

2、 解释一下可能用到的参数

  1. --mingw64:(我的电脑是64位)使用MinGW-w64编译器来编译生成的C代码。自己装有并设置了环境变量可以,或第一次运行Nuitka帮你安装
  2. --standalone:main脚本生成exe,将所有依赖项(Python解释器、标准库、第三方库等)打包到一个独立的目录中
  3. --onefile:在--standalone的基础上,将所有东西汇聚到一个exe上。小项目可以,大项目十分不建议(后面提到)
  4. --remove-output:Nuitka打包后会生成build、dist目录,此参数会在打包后删除build临时目录,留下保存exe和环境的dist目录(加了--onefile的话那就全删,只留一个exe
  5. --follow-import-to=<module_name>:编译指定的模块或包,你知道项目中某个模块需要编译,但不想编译所有的外部依赖,可以使用这个参数
  6. --nofollow-imports:只编译main脚本,而导入的模块由Python解释器在运行时按需加载
  7. --show-progress:显示打包进度

3、建议

  1. 稍大的项目不建议加--onefile,因为编译出来exe动辄好几Gb,一运行就显示<此应用无法在你的电脑上运行>十分尴尬

  2.  --follow-import-to和--nofollow-imports可以配合使用,--follow-import-to填入你自己写的.py脚本。我自己测试不加这俩在i5 12代、32GB内存下打包花了一个多小时,加了之后半个多小时。

4、开始打包,你可以选择以下命令之一 

最朴素的:
nuitka --mingw64 --standalone --remove-output --show-progress onnx.py

带点自定义的:
nuitka --mingw64 --standalone --follow-import-to=<填模块名> --nofollow-imports --remove-output --show-progress onnx.py

5、拷贝模型到指定目录,进入dist目录并运行

        将你的onnx模型拷贝到你python里写的地方。需要注意:你python运行在哪个anaconda环境,就要从哪个环境cd进去,并且运行exe

切换目录
cd onnx.dist
运行exe文件
onnx

 6、如果没有报错,忽略以下

        出现报错如果你本身python运行没问题,基本就是缺少xxx模块,举个栗子:

        提示缺少fastrlock.rlock,那就到你安装的Anaconda目录->运行环境->包目录(参考我的C:\ProgramData\anaconda3\envs\onnx\Lib\site-packages)下找到这个包复制,然后粘贴到dist目录(onnx.exe在的onnx.dist目录)。以此反复直到可以运行

  • 21
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值