Pyinstaller打包pytorch代码

736 阅读2分钟

引言

第一次尝试用 Pyinstaller 打包 pytorch 代码,碰见了很多问题,也耗费了许多时间!想把这个过程中碰到的问题与解决方法记录一下,方便后来者

一、开箱使用

1.1 基本流程

windows 平台上,打包 pytorch 代码的基本流程如下:

  • 环境配置与测试
  • 打包与本地调试
  • 生产环境部署与测试

1.2 环境配置与测试

Pycharm 打开项目,点击 Terminal,输入命令 pip install pyinstaller,安装打包框架Pyinstaller,后编写测试文件 hello.py:

if  __name__ == '__main__':
    print("Hello World!")
    while True:
        pass

需确保 Terminal 路径为项目根目录,执行 pyinstaller -F hello.py 开始打包!在文件夹 dist 中找到 hello.exe 程序,若运行通过,说明环境配置成功

1.3 打包与本地调试

实际的项目一般是多文件,打包过程较复杂,需把握两个核心要素:

  • spec文件的配置
  • 依赖项补齐

1.3.1 spec文件的配置

关于.spec文件配置详见参考资料 [1],本文不赘述

1.3.2 依赖项补齐

在测试阶段,应使用-D模式打包,方便分析缺失的依赖项。运行打包后的程序,常报如下错误: 1.png 以上的输出信息表明缺少 caffe2_nvrtc.dll 或对应的 依赖项,补齐过程如下:

  • 判断输出信息路径中 caffe2_nvrtc.dll 是否存在
  • 若不存在,直接在 Anaconda 环境搜索 caffe2_nvrtc.dll,粘贴到 根目录
  • 若存在,说明是缺少依赖项,使用 Dependencies 工具分析 caffe2_nvrtc.dll 所需要的依赖项,后补齐到根目录

Dependencies 是一个分析依赖项的工具,可在参考资料 [2] 中安装,使用时直接将 dll文件 拖进去。这里以 torch_python.dll 举例

2.png 可以发现,缺少若干个dll文件,补齐即可。重复迭代上述补齐操作,基本可解决dll报错的问题

1.4 生产环境部署与测试

博主使用的是pytorch的GPU版本,故在生产环境上需配置cuda。建议pytorch程序显式提供cpu推理功能,以便在测试时可排除cuda环境造成的问题。最后,祝大家好运,打包成功那一刻是蛮喜悦的!

参考资料

[1] spec文件配置
[2] Dependencies的安装
[3] python项目(非单一.py文件)用Pyinstaller打包发布成exe,在windos上运行程序
[4] 嘗試使用Pyinstaller打包yolov5中detect.py文件(含pytorch框架)所遇到的問題
[5] pyinstaller打包经验分享以及一些错误解决方法