中文字幕在线观看,亚洲а∨天堂久久精品9966,亚洲成a人片在线观看你懂的,亚洲av成人片无码网站,亚洲国产精品无码久久久五月天

關(guān)于商業(yè)部署機(jī)器學(xué)習(xí),這有一篇詳盡指南

2018-07-13    來源:raincent

容器云強(qiáng)勢上線!快速搭建集群,上萬Linux鏡像隨意使用

 

有關(guān)深度學(xué)習(xí)或機(jī)器學(xué)習(xí)方面的文章層出不窮,涵蓋了數(shù)據(jù)收集,數(shù)據(jù)整理,網(wǎng)絡(luò)/算法選擇,訓(xùn)練,驗(yàn)證和評估等主題。

但是,當(dāng)今數(shù)據(jù)科學(xué)面臨的一個(gè)具有挑戰(zhàn)性的難題是在項(xiàng)目的商業(yè)化中部署訓(xùn)練模型,對于任何的以消費(fèi)者為中心的公司或想要使自己的解決方案擁有更多受眾的個(gè)人來說都是如此。

 

 

大多數(shù)時(shí)候,為達(dá)到預(yù)期結(jié)果,精力和資源會花在訓(xùn)練模型上。因此,分配額外的時(shí)間和精力來處理計(jì)算資源以構(gòu)建適當(dāng)?shù)幕A(chǔ)設(shè)施,再進(jìn)行模型復(fù)制,以便在不同的實(shí)際環(huán)境中大規(guī)模地實(shí)現(xiàn)類似的結(jié)果,將會是一項(xiàng)艱巨的任務(wù)。

這是一個(gè)漫長的過程,打從你決定使用深度學(xué)習(xí)來部署模型開始,可以輕易地占用掉數(shù)月的時(shí)間。

本文試圖從頭開始全面介紹整個(gè)部署過程。此外,也歡迎大家討論評論,以免遺漏了什么。

組成部分

 

 

工作流程圖

上述圖片描述了整個(gè)API的工作流程,讓我們把它分解一下,并理解每個(gè)組件。

客戶端:架構(gòu)中的客戶端可以是任何設(shè)備或第三方應(yīng)用程序,由它們向搭建有預(yù)測模型的服務(wù)器發(fā)出請求。打個(gè)比方,F(xiàn)acebook試圖在新上傳的圖片上標(biāo)記你的臉。

負(fù)載均衡器:負(fù)載均衡器嘗試在群集中的多個(gè)服務(wù)器或?qū)嵗g分配工作負(fù)載(請求)。負(fù)載均衡器的目標(biāo)是通過避免任何單個(gè)資源上的過載來最小化響應(yīng)時(shí)間并最大化輸出。在上圖中,負(fù)載均衡面向大眾開放,并將來自客戶端的所有請求分發(fā)到群集中的多個(gè)Ubuntu服務(wù)器。

Nginx:Nginx是一個(gè)開源的Web服務(wù)器,但也可以用作負(fù)載均衡器。Nginx以其高性能和小內(nèi)存占用而聞名。它可以在繁重的工作負(fù)載下通過開啟一個(gè)個(gè)新的工作進(jìn)程來達(dá)到目的,每個(gè)進(jìn)程都可以處理數(shù)千個(gè)連接。

在上述架構(gòu)圖中,nginx是一個(gè)服務(wù)器或?qū)嵗谋镜靥幚砥鳎糜谔幚韥碜怨藏?fù)載均衡器的所有請求。Nginx的一個(gè)替代服務(wù)器是Apache HTTP Server。

Gunicorn:它是一個(gè)Python WSGI HTTP Server,從Ruby的Unicorn項(xiàng)目移植而來。這是一個(gè)pre-fork worker模型,意味著一個(gè)主文件創(chuàng)建多個(gè)被稱作workers的復(fù)制文件來處理請求。

由于Python不是多線程的,因此我們嘗試創(chuàng)建多個(gè)gunicorn worker,其作為獨(dú)立進(jìn)程擁有自己的內(nèi)存分配,以此補(bǔ)償處理請求的并行性。Gunicorn適用于各種Python Web框架,還有一個(gè)眾所周知的替代方案是uWSGI。

Flask:這是一個(gè)用Python編寫的微型web框架。它可以幫助我們開發(fā)API或響應(yīng)請求的Web應(yīng)用。Flask的其他替代方案是Django,Pyramid和web2py。Flask-RESTful提供了Flask的一個(gè)擴(kuò)展,以支持快速構(gòu)建REST API。

Keras:這是一個(gè)用Python編寫的開源神經(jīng)網(wǎng)絡(luò)庫。它能夠在TensorFlow,CNTK,Theano或MXNet上運(yùn)行。Keras也有很多替代品:TensorFlow,Caffe2(Caffe),CNTK,PyTorch,MXNet,Chainer和Theano(已停止更新)。

云平臺:如果有一個(gè)與上述所有組件都關(guān)聯(lián)的平臺,那么它就是云。云是人工智能研究激增的主要催化劑之一,無論是在計(jì)算機(jī)視覺,自然語言處理,機(jī)器學(xué)習(xí),機(jī)器翻譯,機(jī)器人,還是在醫(yī)學(xué)成像方面,云以合理的成本為更廣泛的受眾提供了計(jì)算資源。

云Web服務(wù)的提供商很少,較為知名的是Amazon Web Services(AWS),Google Cloud和Microsoft Azure。

架構(gòu)設(shè)置

到目前為止,您應(yīng)該熟悉上一節(jié)中提到的組件。在下一節(jié)中,我們將從API的角度來理解架構(gòu)設(shè)置,因?yàn)樗矘?gòu)成了Web應(yīng)用程序的基礎(chǔ)。

注意:這個(gè)架構(gòu)設(shè)置將基于Python。

開發(fā)設(shè)置

訓(xùn)練模型:第一步是基于用例訓(xùn)練模型,可以使用Keras,TensorFlow或PyTorch。確保你在虛擬環(huán)境中執(zhí)行此操作,因?yàn)檫@有助于隔離多個(gè)Python環(huán)境,并且還能將所有必要的依賴打包到單獨(dú)的文件夾中。

構(gòu)建API:如果模型足夠好以至于可以開始構(gòu)建API的話,你可以使用Flask 或是Django來根據(jù)需求構(gòu)建它們。理想情況下,你必須構(gòu)建Restful API,因?yàn)樗兄诜蛛x客戶端和服務(wù)器,提高可視性、可靠性和可擴(kuò)展性,并且它是平臺無關(guān)的。你可以執(zhí)行一次徹底的測試,以確保模型根據(jù)API的正確預(yù)測做出響應(yīng)。

Web服務(wù)器:現(xiàn)在不妨測試一下你構(gòu)建好了的API的Web服務(wù)器。如果你是使用Flask構(gòu)建的,Gunicorn會是一個(gè)不錯(cuò)的選擇。運(yùn)行g(shù)unicorn web服務(wù)器的命令如下:

gunicorn --workers 1--timeout 300 --bind 0.0.0.0:8000 api:app- workers(INT): The number of worker processes for handling requests.- timeout (INT): Workers silent for more than this many seconds arekilled and restarted.- bind (ADDRESS): The socket to bind. [['127.0.0.1:8000']]- api: The main Python file containing the Flask application.- app: An instance of the Flask class in the main Python file 'api.py'.

負(fù)載平衡器:你可以通過配置nginx來處理gunicorn workers的測試請求,每個(gè)worker都有自己的DL模型API。請參閱給出的資源了解nginx和gunicorn的相關(guān)配置。

資源鏈接:

https://www.digitalocean.com/community/tutorials/how-to-serve-flask-applications-with-gunicorn-and-nginx-on-ubuntu-16-04

負(fù)載/性能測試:嘗試使用Apache Jmeter,這是一個(gè)旨在加載測試和測量性能的開源應(yīng)用程序。它也有助于理解nginx的負(fù)載分配。另一個(gè)選擇是Locust。

生產(chǎn)設(shè)置

云平臺:選擇好云服務(wù)后,要從標(biāo)準(zhǔn)Ubuntu映像(最好是最新的LTS版本)中設(shè)置一種機(jī)器或?qū)嵗,而CPU的選擇實(shí)際上取決于深度學(xué)習(xí)模型和用例。機(jī)器可以運(yùn)行后,就可以設(shè)置nginx和Python虛擬環(huán)境,安裝所有的依賴項(xiàng)并復(fù)制API。最后就可以嘗試使用模型運(yùn)行API了(這需要一定的時(shí)間,因?yàn)檫@個(gè)是根據(jù)為gunicorn定義的工作組數(shù)以及要加載所有模型來決定的)。

自定義API映像:確保API運(yùn)行正常后,可以快照實(shí)例,創(chuàng)建一個(gè)包含API和模型的自定義圖像,它將保留應(yīng)用程序的所有設(shè)置。

參考資料:

AWS:

https://docs.aws.amazon.com/toolkit-for-visual-studio/latest/user-guide/tkv-create-ami-from-instance.html

Google:

https://cloud.google.com/compute/docs/images/create-delete-deprecate-private-images

Azure:

https://docs.microsoft.com/en-us/azure/virtual-machines/linux/tutorial-custom-images

負(fù)載均衡器:接下來從云服務(wù)創(chuàng)建負(fù)載均衡器,可以根據(jù)需要設(shè)置為公共的或私有的。

參考資料:

AWS:

https://docs.aws.amazon.com/elasticloadbalancing/latest/classic/elb-getting-started.html

Google:

https://cloud.google.com/load-balancing/

Azure:

https://docs.microsoft.com/en-us/azure/load-balancer/quickstart-create-basic-load-balancer-portal

一組實(shí)例:使用先前創(chuàng)建的自定義API映像來啟動一組實(shí)例。

參考資料:

AWS:

https://aws.amazon.com/premiumsupport/knowledge-center/launch-instance-custom-ami/

Google:

https://cloud.google.com/compute/docs/instances/creating-instance-with-custom-machine-type

Azure:

https://docs.microsoft.com/en-us/azure/virtual-machines/windows/create-vm-generalized-managed

集群的負(fù)載均衡器:現(xiàn)在可以將實(shí)例集群鏈接到負(fù)載均衡器,這將確保負(fù)載均衡器在所有實(shí)例之間平均分配工作。

參考資料:

AWS:

https://docs.aws.amazon.com/elasticloadbalancing/latest/classic/elb-deregister-register-instances.html

Google:

https://cloud.google.com/compute/docs/load-balancing/http/backend-service

Azure:

https://docs.microsoft.com/en-us/azure/load-balancer/quickstart-create-basic-load-balancer-portal

負(fù)載/性能測試:就像開發(fā)中的負(fù)載/性能測試一樣,類似的過程在生產(chǎn)環(huán)境也可以進(jìn)行,但因?yàn)楝F(xiàn)在有數(shù)百萬個(gè)請求,所以需要去嘗試打破架構(gòu),來檢查它的穩(wěn)定性和可靠性(并不一定總是有用的)。

總結(jié):現(xiàn)在,如果一切正常,你將能用你的第一個(gè)可以投入生產(chǎn)級別的深度學(xué)習(xí)架構(gòu)來處理數(shù)百萬個(gè)請求。

其他設(shè)置(附加組件)

除了通用設(shè)置外,還有其他一些事項(xiàng)需要注意,以確保我們搭建的環(huán)境能夠在長時(shí)間內(nèi)自我維護(hù)。

自動縮放:這是云服務(wù)中的一項(xiàng)功能,它可以根據(jù)收到的請求數(shù)量來幫助擴(kuò)展應(yīng)用程序中的實(shí)例。我們可以在請求激增時(shí)進(jìn)行橫向擴(kuò)展,在請求減少時(shí)進(jìn)行iLocustn擴(kuò)展。

應(yīng)用程序更新:更新應(yīng)用程序中的深度學(xué)習(xí)模型或其他功能都是需要時(shí)間的,但是如何能在不影響生產(chǎn)環(huán)境運(yùn)行的前提下,更新所有實(shí)例,這是個(gè)問題。云服務(wù)就提供了一種可以用多種形式來執(zhí)行此任務(wù)的方式,而且具體的云服務(wù)提供商可以提供具體的定制服務(wù)。

參考資料:

AWS:

https://aws.amazon.com/premiumsupport/knowledge-center/auto-scaling-group-rolling-updates/

Google:

https://cloud.google.com/compute/docs/instance-groups/updating-managed-instance-groups

Azure:

https://azure.microsoft.com/en-in/updates/auto-os-upgrades/

持續(xù)集成:它指的是軟件發(fā)布過程的構(gòu)建和單元測試階段。每個(gè)提交的修訂都會觸發(fā)自動構(gòu)建和測試過程,用它可以將最新版本的模型部署到生產(chǎn)環(huán)境中。

 

 

其他平臺

還有一些其他的系統(tǒng),可以提供一種結(jié)構(gòu)化的方式在生產(chǎn)環(huán)境中部署和設(shè)置模型,以下是幾個(gè)其他類型系統(tǒng)的介紹:

TensorFlow服務(wù):它是一個(gè)開源平臺軟件庫,服務(wù)于機(jī)器學(xué)習(xí)模型;跈C(jī)器學(xué)習(xí)的推測作用,它的主要目標(biāo)是接收訓(xùn)練后的模型,并管控模型的整個(gè)生命周期,它為TensorFlow模型提供了直接可以使用的支持。

官網(wǎng)鏈接:

https://www.tensorflow.org/serving/

 

 

來源: googleblog

Docker:它是一種容器虛擬化技術(shù),其行為與輕量級虛擬機(jī)類似。它提供了一種簡潔的方法來把應(yīng)用程序從其依賴項(xiàng)中隔離,以便應(yīng)用程序在不同操作系統(tǒng)中都可以使用。我們可以在不用共享資源的情況下,在同一個(gè)實(shí)例上運(yùn)行多個(gè)不同應(yīng)用程序的docker鏡像。

資料鏈接:

https://github.com/floydhub/dl-docker

 

 

來源:

https://codingpackets.com/virtualization/docker/

Michelangelo:它是Uber的機(jī)器學(xué)習(xí)平臺,其包括在Uber所分析的數(shù)據(jù)的數(shù)量及范圍內(nèi)建設(shè)、部署和運(yùn)營機(jī)器學(xué)習(xí)解決方案。

 

 

來源:

https://eng.uber.com/michelangelo/

相關(guān)報(bào)道:

https://medium.com/@maheshkkumar/a-guide-to-deploying-machine-deep-learning-model-s-in-production-e497fd4b734a

標(biāo)簽: Google linux web服務(wù)器 服務(wù)器 網(wǎng)絡(luò) 云服務(wù)

版權(quán)申明:本站文章部分自網(wǎng)絡(luò),如有侵權(quán),請聯(lián)系:west999com@outlook.com
特別注意:本站所有轉(zhuǎn)載文章言論不代表本站觀點(diǎn)!
本站所提供的圖片等素材,版權(quán)歸原作者所有,如需使用,請與原作者聯(lián)系。

上一篇:數(shù)據(jù)大盜:小米與拼多多的電商數(shù)據(jù)是如何被賣到華爾街的?

下一篇:美國眾議院致函蘋果谷歌:就隱私和數(shù)據(jù)問題提出質(zhì)疑