部署深度學(xué)習(xí)APP的經(jīng)歷
最近,接到一個部署深度學(xué)習(xí)APP的需求,這個APP使用torch、monai和pydicom等庫構(gòu)建了一個識別CT圖像中皮下脂肪、內(nèi)臟脂肪和骨骼肌,輸入是CT圖像,輸出是識別的圖像和相關(guān)數(shù)據(jù)。接手的時候,核心的算法已經(jīng)制作完成,僅是需要我構(gòu)建GUI并將其部署到某種途徑上,實(shí)現(xiàn)其應(yīng)用。
一、Docker
背景知識:
Docker是一種容器化技術(shù),其中最核心的概念是Docker鏡像(Docker image)和Docker容器(Docker container)。Docker鏡像是一個只讀的模板,它包括了軟件運(yùn)行所需要的所有文件和配置??梢园袲ocker鏡像理解為一個“應(yīng)用程序的代碼庫”,它可以被用來創(chuàng)建多個Docker容器。Docker鏡像使用“分層”的方式構(gòu)建,每個分層都是一個文件系統(tǒng)的修改,因此Docker鏡像的構(gòu)建和推送可以大大加速。Docker容器是Docker鏡像的運(yùn)行實(shí)例,也就是容器化的應(yīng)用程序。每個Docker容器包含了一個完整的運(yùn)行時環(huán)境,包括應(yīng)用程序、運(yùn)行時庫、系統(tǒng)工具和系統(tǒng)環(huán)境變量等。Docker容器可以被創(chuàng)建、啟動、停止、刪除等,它的生命周期跟隨著應(yīng)用程序的需要而改變。Docker容器中的文件系統(tǒng)是“可寫”的,所以應(yīng)用程序可以在容器內(nèi)進(jìn)行修改和保存數(shù)據(jù)??偟膩碚f,Docker鏡像是應(yīng)用程序的靜態(tài)部分,而Docker容器是應(yīng)用程序的動態(tài)部分。Docker鏡像可以被共享、推送、拉取,而Docker容器是可以運(yùn)行、停止和刪除的。
Docker 的分享應(yīng)該不是問題,但是用戶的機(jī)器上需要安裝docker等支持軟件,還是比軟件復(fù)雜一些。
部署過程:
1.使用的是pysimplegui 來構(gòu)建的用戶界面。輸入是圖片的路徑,輸出是標(biāo)記的圖片和計(jì)算的指標(biāo)(數(shù)字)。
2. 安裝并設(shè)置X11 圖形服務(wù)器,windows的是xming和VcXsrv,后者是免費(fèi)的,下載安裝即可,設(shè)置上情況保持默認(rèn)即可,有一個需要注意的地方是需要勾選“Disable access control”,允許其他軟件連接。
3. 安裝docker并制作image:撰寫Dockerfile (沒有后綴),requirements.txt 將需要安裝的python庫都安裝到里面, 然后就能打包。
4. 運(yùn)行image,運(yùn)行的時候需要額外的參數(shù),以便使docker 于X11連接,實(shí)現(xiàn)圖形顯示。
部署結(jié)果:
軟件可以運(yùn)行,中文顯示為亂碼,尺寸較大8G,運(yùn)行流暢。
順利程度:
非常順利
二、streamlit cloud
背景知識:
Streamlit是一個基于Python的開源框架,可以幫助數(shù)據(jù)科學(xué)家快速地搭建數(shù)據(jù)應(yīng)用程序。Streamlit不需要編寫HTML、CSS或JavaScript,因?yàn)樗峁┝艘粋€Python庫,可以讓用戶通過編寫Python代碼來構(gòu)建數(shù)據(jù)應(yīng)用程序。Streamlit還提供了一個簡單易用的Web界面,可以讓數(shù)據(jù)科學(xué)家直接在瀏覽器中查看和使用他們的應(yīng)用程序。
Streamlit可以用于快速原型設(shè)計(jì)或生成交互式儀表板。它的特點(diǎn)是易于學(xué)習(xí)、易于使用、快速調(diào)試和交互式應(yīng)用開發(fā)。Streamlit的應(yīng)用范圍非常廣泛,可以用于構(gòu)建數(shù)據(jù)分析、機(jī)器學(xué)習(xí)、自然語言處理、計(jì)算機(jī)視覺等各種類型的應(yīng)用程序。
部署過程
對照官網(wǎng)的說明文檔,建立github文件夾,添加requirements.txt寫明需要導(dǎo)入的庫,因?yàn)橹坝幸恍┗A(chǔ)(曾經(jīng)部署過一個簡單的APP),幾乎沒有遇見什么問題,編譯過程也非???,期間落了一個itk庫,僅修改了requirements.txt,重新打開APP即可,最終成功在本地運(yùn)行并部署到streamlit cloud上。
部署結(jié)果
運(yùn)行速度可以,編譯迅速,容易維護(hù)修改,也便于傳播。
順利程度
非常順利
三、打包成本地運(yùn)行的軟件
1. pyinstaller
背景知識
PyInstaller是一個用于將Python應(yīng)用程序打包成單個可執(zhí)行文件的工具。它可以自動檢測應(yīng)用程序所依賴的庫和模塊,并將它們?nèi)看虬M(jìn)可執(zhí)行文件中,從而使得應(yīng)用程序在不同的機(jī)器上運(yùn)行時不需要再安裝依賴項(xiàng)。PyInstaller支持Windows、Linux和Mac OS X等平臺,并支持各種Python版本(包括Python 2和Python 3)。
使用PyInstaller可以輕松地將Python編寫的應(yīng)用程序打包成單個可執(zhí)行文件,這使得應(yīng)用程序的部署和分發(fā)變得更加方便。另外,PyInstaller還支持各種高級功能,如加密、壓縮、自定義圖標(biāo)、自定義啟動腳本等。因此,在開發(fā)和分發(fā)Python應(yīng)用程序時,PyInstaller是一個非常有用的工具。
部署過程
pyinstaller 是最先接觸的一個python打包軟件,之前也有過成功打包的經(jīng)驗(yàn)。使用conda新建立一個新的虛擬環(huán)境,安裝必要的庫并保證程序在本地可運(yùn)行。打包。
部署結(jié)果
打包過程雖然可以完成,但是庫導(dǎo)入的問題,軟件不能啟動,連個影都沒有,可以通過concole來觀察哪里報(bào)錯,編譯時間較長,最后遇到一個不能解決的問題。
順利程度
未完成,已經(jīng)放棄
2. nuitka
背景知識
Nuitka是一種用于Python的優(yōu)化編譯器,它將Python代碼轉(zhuǎn)換為本地C代碼,并通過C編譯器將其編譯為本地可執(zhí)行文件。這使得Python程序的性能得到大幅提升,通??梢员仍糚ython代碼快3到5倍。而且,由于生成的代碼是本地C語言,因此它可以與任何C/C++庫集成,并且可以通過靜態(tài)鏈接或動態(tài)鏈接庫的方式進(jìn)行部署。
除了增強(qiáng)Python程序的性能和可擴(kuò)展性之外,Nuitka還提供了對Python 2.6,2.7,3.2,3.3,3.4,3.5,3.6,3.7和3.8的完全支持。此外,它還支持Python的標(biāo)準(zhǔn)庫和第三方庫,可以與其它Python工具和框架無縫集成,如Django,F(xiàn)lask,NumPy等。由于其高性能和易用性,Nuitka正成為越來越多Python開發(fā)者的選擇。
部署過程
類似于pyinstaller,命令行中幾個需要注意添加的參數(shù), 導(dǎo)入外部文件的命令,像圖片,模型,自己編寫的庫(.py);導(dǎo)入某些庫的命令,可以根據(jù)錯誤提示進(jìn)行; tk-inter plugin,這里使用pysimple構(gòu)建的GUI,需要導(dǎo)入這個。
部署結(jié)果
成功打包軟件,大小約4G。
順利程度
基本順利,沒有遇到不明所以的問題。文章來源:http://www.zghlxwxcb.cn/news/detail-531703.html
總結(jié),python打包多數(shù)途徑都很靠譜。文章來源地址http://www.zghlxwxcb.cn/news/detail-531703.html
到了這里,關(guān)于部署深度學(xué)習(xí)APP的經(jīng)歷(docker,streamlit cloud,nuitka)的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!