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

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

2018-07-13    來(lái)源:raincent

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

 

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

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

 

 

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

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

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

組成部分

 

 

工作流程圖

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

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

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

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

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

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

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

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

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

云平臺(tái):如果有一個(gè)與上述所有組件都關(guān)聯(lián)的平臺(tái),那么它就是云。云是人工智能研究激增的主要催化劑之一,無(wú)論是在計(jì)算機(jī)視覺(jué),自然語(yǔ)言處理,機(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的角度來(lái)理解架構(gòu)設(shè)置,因?yàn)樗矘?gòu)成了Web應(yīng)用程序的基礎(chǔ)。

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

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

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

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

Web服務(wù)器:現(xiàn)在不妨測(cè)試一下你構(gòu)建好了的API的Web服務(wù)器。如果你是使用Flask構(gòu)建的,Gunicorn會(huì)是一個(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ù)載平衡器:你可以通過(guò)配置nginx來(lái)處理gunicorn workers的測(cè)試請(qǐng)求,每個(gè)worker都有自己的DL模型API。請(qǐng)參閱給出的資源了解nginx和gunicorn的相關(guān)配置。

資源鏈接:

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

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

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

云平臺(tái):選擇好云服務(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ù)以及要加載所有模型來(lái)決定的)。

自定義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ù)載均衡器:接下來(lái)從云服務(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映像來(lái)啟動(dòng)一組實(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ù)載/性能測(cè)試:就像開(kāi)發(fā)中的負(fù)載/性能測(cè)試一樣,類似的過(guò)程在生產(chǎn)環(huán)境也可以進(jìn)行,但因?yàn)楝F(xiàn)在有數(shù)百萬(wàn)個(gè)請(qǐng)求,所以需要去嘗試打破架構(gòu),來(lái)檢查它的穩(wěn)定性和可靠性(并不一定總是有用的)。

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

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

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

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

應(yīng)用程序更新:更新應(yīng)用程序中的深度學(xué)習(xí)模型或其他功能都是需要時(shí)間的,但是如何能在不影響生產(chǎn)環(huán)境運(yùn)行的前提下,更新所有實(shí)例,這是個(gè)問(wèn)題。云服務(wù)就提供了一種可以用多種形式來(lái)執(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ā)布過(guò)程的構(gòu)建和單元測(cè)試階段。每個(gè)提交的修訂都會(huì)觸發(fā)自動(dòng)構(gòu)建和測(cè)試過(guò)程,用它可以將最新版本的模型部署到生產(chǎn)環(huán)境中。

 

 

其他平臺(tái)

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

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

官網(wǎng)鏈接:

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

 

 

來(lái)源: googleblog

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

資料鏈接:

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

 

 

來(lái)源:

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

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

 

 

來(lái)源:

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),請(qǐng)聯(lián)系:west999com@outlook.com
特別注意:本站所有轉(zhuǎn)載文章言論不代表本站觀點(diǎn)!
本站所提供的圖片等素材,版權(quán)歸原作者所有,如需使用,請(qǐng)與原作者聯(lián)系。

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

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