部署深度学习APP的经历
最近,接到一个部署深度学习APP的需求,这个APP使用torch、monai和pydicom等库构建了一个识别CT图像中皮下脂肪、内脏脂肪和骨骼肌,输入是CT图像,输出是识别的图像和相关数据。接手的时候,核心的算法已经制作完成,仅是需要我构建GUI并将其部署到某种途径上,实现其应用。
一、Docker
背景知识:
Docker是一种容器化技术,其中最核心的概念是Docker镜像(Docker image)和Docker容器(Docker container)。Docker镜像是一个只读的模板,它包括了软件运行所需要的所有文件和配置。可以把Docker镜像理解为一个“应用程序的代码库”,它可以被用来创建多个Docker容器。Docker镜像使用“分层”的方式构建,每个分层都是一个文件系统的修改,因此Docker镜像的构建和推送可以大大加速。Docker容器是Docker镜像的运行实例,也就是容器化的应用程序。每个Docker容器包含了一个完整的运行时环境,包括应用程序、运行时库、系统工具和系统环境变量等。Docker容器可以被创建、启动、停止、删除等,它的生命周期跟随着应用程序的需要而改变。Docker容器中的文件系统是“可写”的,所以应用程序可以在容器内进行修改和保存数据。总的来说,Docker镜像是应用程序的静态部分,而Docker容器是应用程序的动态部分。Docker镜像可以被共享、推送、拉取,而Docker容器是可以运行、停止和删除的。
Docker 的分享应该不是问题,但是用户的机器上需要安装docker等支持软件,还是比软件复杂一些。
部署过程:
1.使用的是pysimplegui 来构建的用户界面。输入是图片的路径,输出是标记的图片和计算的指标(数字)。
2. 安装并设置X11 图形服务器,windows的是xming和VcXsrv,后者是免费的,下载安装即可,设置上情况保持默认即可,有一个需要注意的地方是需要勾选“Disable access control”,允许其他软件连接。
3. 安装docker并制作image:撰写Dockerfile (没有后缀),requirements.txt 将需要安装的python库都安装到里面, 然后就能打包。
4. 运行image,运行的时候需要额外的参数,以便使docker 于X11连接,实现图形显示。
部署结果:
软件可以运行,中文显示为乱码,尺寸较大8G,运行流畅。
顺利程度:
非常顺利
二、streamlit cloud
背景知识:
Streamlit是一个基于Python的开源框架,可以帮助数据科学家快速地搭建数据应用程序。Streamlit不需要编写HTML、CSS或JavaScript,因为它提供了一个Python库,可以让用户通过编写Python代码来构建数据应用程序。Streamlit还提供了一个简单易用的Web界面,可以让数据科学家直接在浏览器中查看和使用他们的应用程序。
Streamlit可以用于快速原型设计或生成交互式仪表板。它的特点是易于学习、易于使用、快速调试和交互式应用开发。Streamlit的应用范围非常广泛,可以用于构建数据分析、机器学习、自然语言处理、计算机视觉等各种类型的应用程序。
部署过程
对照官网的说明文档,建立github文件夹,添加requirements.txt写明需要导入的库,因为之前有一些基础(曾经部署过一个简单的APP),几乎没有遇见什么问题,编译过程也非常快,期间落了一个itk库,仅修改了requirements.txt,重新打开APP即可,最终成功在本地运行并部署到streamlit cloud上。
部署结果
运行速度可以,编译迅速,容易维护修改,也便于传播。
顺利程度
非常顺利
三、打包成本地运行的软件
1. pyinstaller
背景知识
PyInstaller是一个用于将Python应用程序打包成单个可执行文件的工具。它可以自动检测应用程序所依赖的库和模块,并将它们全部打包进可执行文件中,从而使得应用程序在不同的机器上运行时不需要再安装依赖项。PyInstaller支持Windows、Linux和Mac OS X等平台,并支持各种Python版本(包括Python 2和Python 3)。
使用PyInstaller可以轻松地将Python编写的应用程序打包成单个可执行文件,这使得应用程序的部署和分发变得更加方便。另外,PyInstaller还支持各种高级功能,如加密、压缩、自定义图标、自定义启动脚本等。因此,在开发和分发Python应用程序时,PyInstaller是一个非常有用的工具。
部署过程
pyinstaller 是最先接触的一个python打包软件,之前也有过成功打包的经验。使用conda新建立一个新的虚拟环境,安装必要的库并保证程序在本地可运行。打包。
部署结果
打包过程虽然可以完成,但是库导入的问题,软件不能启动,连个影都没有,可以通过concole来观察哪里报错,编译时间较长,最后遇到一个不能解决的问题。
顺利程度
未完成,已经放弃
2. nuitka
背景知识
Nuitka是一种用于Python的优化编译器,它将Python代码转换为本地C代码,并通过C编译器将其编译为本地可执行文件。这使得Python程序的性能得到大幅提升,通常可以比原始Python代码快3到5倍。而且,由于生成的代码是本地C语言,因此它可以与任何C/C++库集成,并且可以通过静态链接或动态链接库的方式进行部署。
除了增强Python程序的性能和可扩展性之外,Nuitka还提供了对Python 2.6,2.7,3.2,3.3,3.4,3.5,3.6,3.7和3.8的完全支持。此外,它还支持Python的标准库和第三方库,可以与其它Python工具和框架无缝集成,如Django,Flask,NumPy等。由于其高性能和易用性,Nuitka正成为越来越多Python开发者的选择。
部署过程
类似于pyinstaller,命令行中几个需要注意添加的参数, 导入外部文件的命令,像图片,模型,自己编写的库(.py);导入某些库的命令,可以根据错误提示进行; tk-inter plugin,这里使用pysimple构建的GUI,需要导入这个。
部署结果
成功打包软件,大小约4G。
顺利程度
基本顺利,没有遇到不明所以的问题。文章来源:https://www.toymoban.com/news/detail-531703.html
总结,python打包多数途径都很靠谱。
文章来源地址https://www.toymoban.com/news/detail-531703.html
到了这里,关于部署深度学习APP的经历(docker,streamlit cloud,nuitka)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!