部署深度学习APP的经历(docker,streamlit cloud,nuitka)

news2024/11/25 1:03:06

部署深度学习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。

顺利程度

基本顺利,没有遇到不明所以的问题。

总结,python打包多数途径都很靠谱。
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/714399.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

matlab将数据写入到excel中

第一种: 将数据转化为cell块,从A1单元格写起 % xlswrite(info_10*2.xls ,sheet1,B2:B4) clear; clc; a[1 2 3 4 5 6 ];%三组数据 b[11 22 33 44 55 66]; c[12 23 34 45 56 61]; data [a b c];%把数据保存到data中,其中a的表示转置 [m p]si…

PHP:提交表单之后出现本页面刷新的情况,导致路径参数消失

问题: 提交表单前 提交表单后 刷新之后,参数消失 解决办法 在提交表单的方法中写入代码携带参数的代码 样例: 实施 header(Location: table_detial.php?table_name.$table_name.);

Java Web JavaScript (2)23.7.2

5,BOM BOM:Browser Object Model 浏览器对象模型。也就是 JavaScript 将浏览器的各个组成部分封装为对象。 我们要操作浏览器的各个组成部分就可以通过操作 BOM 中的对象来实现。比如:我现在想将浏览器地址栏的地址改为 https://www.itheim…

m4a音频格式转换器:让音频轻松换装

大家有没有遇到这样的情况——你下载了一个很酷的音频文件,但是播放设备却说“不认识”这个格式?别担心!现在有个超级厉害的工具可以帮你解决这个问题,它就是m4a音频格式转换器!它能让你的音频文件变身,适应…

Java--基于Swing的登录界面

运行结果: 代码: import javax.swing.*; import java.awt.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener;public class ljt2 {public static void main(String[] args) {// 创建窗体JFrame frame new JFrame("学生信息管理系统");f…

数据处理及评分成果

文章目录 test.py界面展示 pf.pyfpga.py test.py import subprocess import os from PySide2.QtWidgets import QApplication, QMainWindow, QPushButton, QPlainTextEdit, QWidget, QLabel import mysql.connector from PySide2.QtGui import QPixmap, QPalette, QColorconn …

spfa求负环

1.虫洞 Wormholes&#xff08;裸spfa判断负环问题&#xff09; 信息学奥赛一本通&#xff08;C版&#xff09;在线评测系统 (ssoier.cn)http://ybt.ssoier.cn:8088/problem_show.php?pid1507 #include<bits/stdc.h> using namespace std; const int N510,M5210; int d…

【花雕】全国青少年机器人技术一级考试试卷模拟题A组

随着科技的不断进步&#xff0c;机器人技术已经成为了一个重要的领域。在这个领域中&#xff0c;机械结构是机器人设计中至关重要的一部分&#xff0c;它决定了机器人的形态、运动方式和工作效率。对于青少年机器人爱好者来说&#xff0c;了解机械结构的基础知识&#xff0c;掌…

kafka入门,高效读写数据,页缓存+零拷贝技术(十七)

高效读写数据 1)kafka本身是分布式集群&#xff0c;可以采用集群技术&#xff0c;并行度高 2&#xff09;读写数据采用稀疏索引&#xff0c;可以快熟定位要消费的数据 3&#xff09;顺序写磁盘 kafka的producer生产数据&#xff0c;要写入到log文件中&#xff0c;写的过程一直…

一个电脑小工具一键转化文件格式《File Converter》

介绍 File Converter是一种软件或在线服务&#xff0c;用于将一个文件格式转换为另一个文件格式。它可以帮助用户在不同的应用程序之间进行文件转换&#xff0c;以便更好地兼容和使用不同的文件类型。 File Converter可以转换各种类型的文件&#xff0c;包括文档、图像、音频…

前端食堂技术周刊第 89 期:ES 2023、MDN Playground、TS 5.2 Beta、逆向分析 GitHub Copilot

美味值&#xff1a;&#x1f31f;&#x1f31f;&#x1f31f;&#x1f31f;&#x1f31f; 口味&#xff1a;糯米糍荔枝 食堂技术周刊仓库地址&#xff1a;https://github.com/Geekhyt/weekly 大家好&#xff0c;我是童欧巴。欢迎来到前端食堂技术周刊&#xff0c;我们先来看…

RIP实验

RIP实验 要求&#xff1a; 1、进行地址分配 R1&#xff1a; R2&#xff1a; R3&#xff1a; R4&#xff1a; R5&#xff1a; R6&#xff1a; R7&#xff1a; 2、RIP配置&#xff0c;启动进程&#xff0c;选择版本&#xff0c;宣告网段 R1&#xff1a; R2&#xff1a; R3&…

kubernetes 节点维护 cordon, drain, uncordon

1.这三个命令是正式release的1.2新加入的命令&#xff0c;三个命令一起介绍&#xff0c;是因为三个命令配合使用可以实现节点的维护。在1.2之前&#xff0c;因为没有相应的命令支持&#xff0c;如果要维护一个节点&#xff0c;只能stop该节点上的kubelet将该节点退出集群&#…

“物联网IOT”技术在智能化数据中心低压配电系统中的运用

物联网、区块链、云计算、人工智能等新技术的发展让人们能够用新的方式更方便地获取和管理信息&#xff0c;已成为数字化转型的主要推动力。所谓物联网&#xff08;The Internet of Things&#xff0c;简称IOT&#xff09;&#xff0c;是互联网基础上的延伸和扩展的网络&#x…

python接口自动化(十二)--https请求(SSL)(详解)

简介 本来最新的requests库V2.13.0是支持https请求的&#xff0c;但是一般写脚本时候&#xff0c;我们会用抓包工具fiddler&#xff0c;这时候会 报&#xff1a;requests.exceptions.SSLError: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:590) 小编…

Nginx(7)Nginx实现服务器端集群搭建

Nginx集群搭建 Nginx与Tomcat部署Nginx实现动静分离Nginx实现Tomcat集群搭建 Nginx高可用解决方案KeepalivedKeepalived配置文件keepalived之vrrp_script Nginx制作下载站点Nginx的用户认证模块 Nginx与Tomcat部署 前面课程已经将Nginx的大部分内容进行了讲解&#xff0c;我们…

css3 弹性布局flex

文章目录 flex弹性盒子flex-direction 决定主轴的方向flex-wrap 换行flex-flow flex-direction和flex-wrap的简写属性justify-content 定义了弹性子元素在主轴上的对齐方式align-items 定义弹性子元素在交叉轴上如何对齐align-content 定义了多根轴线的对齐方式order 定义弹性子…

网络安全合规-数据安全治理的重要性

数据安全治理能力评估框架将数据安全治理分为三大层次&#xff0c;即数据安全战略、数据全生命周期安全和基础安全[3]。数据安全战略指组织的数据安全顶层规划&#xff0c;起到为数据安全治理“搭框架”“配人手”的作用&#xff1b;数据全生命周期安全指组织在数据全生命周期的…

PDF转换成CAD怎么转换?分享几种快速转换方法

CAD 文件通常具有比 PDF 文件更高的精度。这是因为 CAD 文件是为设计和制造目的而创建的&#xff0c;而 PDF 文件则是为共享和打印目的而创建的。因此&#xff0c;将 PDF 转换成 CAD 可以提高设计的精度和准确性。CAD 文件可以通过精确的尺寸、角度、线型和曲线来描述物体。这使…

c++崩溃调试总结

个人博客地址: https://cxx001.gitee.io windows上程序崩溃调试 场景1 调用第三方dll崩溃 调试需求 需要第三方提供对应的pdb和源码。 调试步骤 把dll 、pdb和exe程序放同级目录。在调用dll崩溃的地方打上断点&#xff0c;F5运行&#xff0c;第一次调试需要选择dll对应源码…