機(jī)器學(xué)習(xí)與人工智能,相信大家已經(jīng)耳熟能詳,隨著大規(guī)模標(biāo)記數(shù)據(jù)的積累、神經(jīng)網(wǎng)絡(luò)算法的成熟以及高性能通用GPU的推廣,深度學(xué)習(xí)逐漸成為計算機(jī)專家以及大數(shù)據(jù)科學(xué)家的研究重點。近年來,無論是圖像的分類、識別和檢測,還是語音生成、自然語言處理,甚至是AI下圍棋或者打游戲都基于深度學(xué)習(xí)有了很大的突破。而隨著TensorFlow、Caffe等開源框架的發(fā)展,深度學(xué)習(xí)的門檻變得越來越低,甚至初中生都可以輕易實現(xiàn)一個圖像分類或者自動駕駛的神經(jīng)網(wǎng)絡(luò)模型,但目前前沿的成果主要還是出自Google、微軟等巨頭企業(yè)。
Google不僅擁有的人才儲備和大數(shù)據(jù)資源,其得天獨厚的基礎(chǔ)架構(gòu)也極大推動了AI業(yè)務(wù)的發(fā)展,得益于內(nèi)部的大規(guī)模集群調(diào)度系統(tǒng)Borg,開發(fā)者可以快速申請大量GPU資源進(jìn)行模型訓(xùn)練和上線模型服務(wù),并且通過資源共享和自動調(diào)度保證整體資源利用率也很高。Google開源了TensorFlow深度學(xué)習(xí)框架,讓開發(fā)者可以在本地輕易地組合MLP、CNN和RNN等模塊實現(xiàn)復(fù)雜的神經(jīng)網(wǎng)絡(luò)模型,但TensorFlow只是一個數(shù)值計算庫,并不能解決資源隔離、任務(wù)調(diào)度等問題,將深度學(xué)習(xí)框架集成到基于云計算的基礎(chǔ)架構(gòu)上將是下一個關(guān)鍵任務(wù)。
除了Google、微軟,國內(nèi)的百度也開源了PaddlePaddle分布式計算框架,并且官方集成了Kubernetes等容器調(diào)度系統(tǒng),用戶可以基于PaddlePaddle框架實現(xiàn)神經(jīng)網(wǎng)絡(luò)模型,同時利用容器的隔離性和Kubernetes的資源共享、自動調(diào)度、故障恢復(fù)等特性,但平臺不能支持更多深度學(xué)習(xí)框架接口。而亞馬遜和騰訊云相繼推出了面向開發(fā)者的公有云服務(wù),可以同時支持多種主流的開源深度學(xué)習(xí)框架,阿里、金山和小米也即將推出基于GPU的云深度學(xué)習(xí)服務(wù),還有無數(shù)企業(yè)在默默地研發(fā)內(nèi)部的機(jī)器學(xué)習(xí)平臺和大數(shù)據(jù)服務(wù)。
面對如此眼花繚亂的云服務(wù)和開源技術(shù),架構(gòu)師該如何考慮其中的技術(shù)細(xì)節(jié),從用戶的角度又該如何選擇這些平臺或者服務(wù)呢。我將介紹小米云深度學(xué)習(xí)平臺的架構(gòu)設(shè)計與實現(xiàn)細(xì)節(jié),希望能給AI領(lǐng)域的研發(fā)人員提供一些思考和啟示。
云深度學(xué)習(xí)平臺,我定義為Cloud Machine Learning,就是基于云計算的機(jī)器學(xué)習(xí)和深度學(xué)習(xí)平臺。首先TensorFlow、MXNet是深度學(xué)習(xí)框架或者深度學(xué)習(xí)平臺,但并不是云深度學(xué)習(xí)平臺,它們雖然可以組成一個分布式計算集群進(jìn)行模型訓(xùn)練,但需要用戶在計算服務(wù)器上手動啟動和管理進(jìn)程,并沒有云計算中任務(wù)隔離、資源共享、自動調(diào)度、故障恢復(fù)以及按需計費等功能。因此我們需要區(qū)分深度學(xué)習(xí)類庫以及深度學(xué)習(xí)平臺之間的關(guān)系,而這些類庫實現(xiàn)的隨機(jī)梯度下降和反向傳播等算法卻是深度學(xué)習(xí)應(yīng)用所必須的,這是一種全新的編程范式,需要我們已有的基礎(chǔ)架構(gòu)去支持。
云計算和大數(shù)據(jù)發(fā)展超過了整整十年,在業(yè)界催生非常多的開源工具,如實現(xiàn)了類似AWS IaaS功能的OpenStack項目,還有Hadoop、Spark、Hive等大數(shù)據(jù)存儲和處理框架,以及近年很火的Docker、Kubernetes等容器項目,這些都是構(gòu)建現(xiàn)代云計算服務(wù)的基石。這些云服務(wù)有共同的特點,例如我們使用HDFS進(jìn)行數(shù)據(jù)存儲,用戶不需要手動申請物理資源就可以做到開箱即用,用戶數(shù)據(jù)保存在幾乎無限制的公共資源池中,并且通過租戶隔離保證數(shù)據(jù)安全,集群在節(jié)點故障或者水平擴(kuò)容時自動觸發(fā)Failover且不會影響用戶業(yè)務(wù)。雖然Spark通過MLib接口提供部分機(jī)器學(xué)習(xí)算法功能,但絕不能替代TensorFlow、Caffe等深度學(xué)習(xí)框架的作用,因此我們?nèi)孕枰獙崿F(xiàn)Cloud Machine Learning服務(wù),并且確保實現(xiàn)云服務(wù)的基本特性——我將其總結(jié)為下面幾條:
相比于MapReduce或者Spark任務(wù),深度學(xué)習(xí)的模型訓(xùn)練時間周期長,而且需要調(diào)優(yōu)的超參數(shù)更多,平臺設(shè)計還需要考慮以下幾點:
這是我個人對云深度學(xué)習(xí)平臺的需求理解,也是小米在實現(xiàn)cloud-ml服務(wù)時的基本設(shè)計原則。雖然涉及到高可用、分布式等頗具實現(xiàn)難度的問題,但借助目前比較成熟的云計算框架和開源技術(shù),我們的架構(gòu)和實現(xiàn)基本滿足了前面所有的需求,當(dāng)然如果有更多需求和想法歡迎隨時交流。
遵循前面的平臺設(shè)計原則,我們的系統(tǒng)架構(gòu)也愈加清晰明了,為了滿足小米內(nèi)部的所有深度學(xué)習(xí)和機(jī)器學(xué)習(xí)需求,需要有一個多租戶、任務(wù)隔離、資源共享、支持多框架和GPU的通用服務(wù)平臺。通過實現(xiàn)經(jīng)典的MLP、CNN或RNN算法并不能滿足業(yè)務(wù)快速發(fā)展的需求,因此我們需要支持TensorFlow等用戶自定義的模型結(jié)構(gòu),并且支持高性能GPU和分布式訓(xùn)練是這個云深度學(xué)習(xí)平臺的必須功能,不僅僅是模型訓(xùn)練,我們還希望集成模型服務(wù)等功能來大化用戶的使用效益。
計算機(jī)領(lǐng)域有句名言“任何計算機(jī)問題都可以通過增加一個中間層來解決”。無論是AWS、OpenStack、Hadoop、Spark還是TCP/IP都是這樣做的,通過增加一個抽象層來屏蔽底層資源,對上層提供更易用或者更可靠的訪問接口。小米的cloud-ml平臺也需要實現(xiàn)對底層物理資源的屏蔽,尤其是對GPU資源的抽象和調(diào)度,但我們不需要重新實現(xiàn),因為社區(qū)已經(jīng)有了很多成熟的分布式解決方案,如OpenStack、Yarn和Kubernetes。目前OpenStack和Yarn對GPU調(diào)度支持有所欠缺,虛擬機(jī)也存在啟動速度慢、性能overhead較大等問題,而容器方案中的Kubernetes和Mesos發(fā)展迅速,支持GPU調(diào)度等功能,是目前值得推薦的架構(gòu)選型之一。
目前小米cloud-ml平臺的任務(wù)調(diào)度和物理機(jī)管理基于多節(jié)點的分布式Kubernetes集群,對于OpenStack、Yarn和Mesos我們也保留了實現(xiàn)接口,可以通過實現(xiàn)Mesos后端讓用戶的任務(wù)調(diào)度到Mesos集群進(jìn)行訓(xùn)練,終返回給用戶一致的使用接口。目前Kubernetes新穩(wěn)定版是1.6,已經(jīng)支持Nvidia GPU的調(diào)度和訪問,對于其他廠商GPU暫不支持但基本能滿足企業(yè)內(nèi)部的需求,而且Pod、Deployment、Job、StatefulSet等功能日趨穩(wěn)定,加上Docker、Prometheus、Harbor等生態(tài)項目的成熟,已經(jīng)在大量生產(chǎn)環(huán)境驗證過,可以滿足通用PaaS或者Cloud Machine learning等定制服務(wù)平臺的需求。
使用Kubernetes管理用戶的Docker容器,還解決了資源隔離的問題,保證不同深度學(xué)習(xí)訓(xùn)練任務(wù)間的環(huán)境不會沖突,并且可以針對訓(xùn)練任務(wù)和模型服務(wù)使用Job和Deployment等不同的接口,充分利用分布式容器編排系統(tǒng)的重調(diào)度和負(fù)載均衡功能。但是,Kubernetes并沒有完善的多租戶和Quota管理功能,難以與企業(yè)內(nèi)部的權(quán)限管理系統(tǒng)對接,這要求我們對Kubernetes API進(jìn)行再一次“抽象”。我們通過API Server實現(xiàn)了內(nèi)部的AKSK簽名和認(rèn)證授權(quán)機(jī)制,在處理用戶請求時加入多租戶和Quota配額功能,并且對外提供簡單易用的RESTful API,進(jìn)一步簡化了整個云深度學(xué)習(xí)平臺的使用流程,整體架構(gòu)設(shè)計如圖1。
通過實現(xiàn)API Server,我們對外提供了API、SDK、命令行以及Web控制臺多種訪問方式,大程度上滿足了用戶復(fù)雜多變的使用環(huán)境。集群內(nèi)置了Docker鏡像倉庫服務(wù),托管了我們支持的17個深度學(xué)習(xí)框架的容器鏡像,讓用戶不需要任何初始化命令就可以一鍵創(chuàng)建各框架的開發(fā)環(huán)境、訓(xùn)練任務(wù)以及模型服務(wù)。多副本的API Server和Etcd集群,保證了整個集群所有組件的高可用,和Hadoop或者Spark一樣,我們的cloud-ml服務(wù)在任意一臺服務(wù)器經(jīng)歷斷網(wǎng)、宕機(jī)、磁盤故障等暴力測試下都能自動Failover保證業(yè)務(wù)不受任何影響。
前面提到,我們通過抽象層定義了云深度學(xué)習(xí)平臺的接口,無論后端使用Kubernetes、Mesos、Yarn甚至是OpenStack、AWS都可以支持。通過容器的抽象可以定義任務(wù)的運(yùn)行環(huán)境,目前已經(jīng)支持17個主流的深度學(xué)習(xí)框架,用戶甚至可以在不改任何一行代碼的情況下定義自己的運(yùn)行環(huán)境或者使用自己實現(xiàn)的深度學(xué)習(xí)框架。在靈活的架構(gòu)下,我們還實現(xiàn)了分布式訓(xùn)練、超參數(shù)自動調(diào)優(yōu)、前置命令、NodeSelector、Bring Your Own Image和FUSE集成等功能,將在下面逐一介紹。
前面提到我們后端使用Kubernetes編排系統(tǒng),通過API Server實現(xiàn)授權(quán)認(rèn)證和Quota配額功能。由于云深度學(xué)習(xí)服務(wù)是一個計算服務(wù),和我以前做過的分布式存儲服務(wù)有著本質(zhì)的區(qū)別,計算服務(wù)離線運(yùn)算時間較長,客戶端請求延時要求較低而且吞吐很小,因此我們的API服務(wù)在易用性和高性能上可以選擇前者,目前主流的Web服務(wù)器都可以滿足需求。基于Web服務(wù)器我們可以實現(xiàn)集成內(nèi)部權(quán)限管理系統(tǒng)的業(yè)務(wù)邏輯,小米生態(tài)云提供了類似AWS的AKSK簽名認(rèn)證機(jī)制,用戶注冊登錄后可以自行創(chuàng)建Access key和Secret key,請求時在客戶端進(jìn)行AKSK的簽名后發(fā)送,這樣用戶不需要把賬號密碼或密鑰加到請求中,即使密鑰泄露也可以由用戶來禁用,請求時即使簽名被嗅探也只能重放當(dāng)前的請求內(nèi)容,是非常可靠的安全機(jī)制。除此之外,我們參考OpenStack項目的體系架構(gòu),實現(xiàn)了多租戶和Quota功能,通過認(rèn)證和授權(quán)的請求需要經(jīng)過Quota配額檢查,在高可用數(shù)據(jù)庫中持久化相應(yīng)的數(shù)據(jù),這樣平臺管理員就可以動態(tài)修改每個租戶的Quota,而且用戶可以隨時查看自身的審計信息。
小米cloud-ml服務(wù)實現(xiàn)了深度學(xué)習(xí)模型的開發(fā)、訓(xùn)練、調(diào)優(yōu)、測試、部署和預(yù)測等完整功能,都是通過提交到后端的Kubernetes集群來實現(xiàn),完整的功能介紹可以查看官方文檔http://docs.api.xiaomi.com/cloud-ml/ 。Kubernetes對外提供了RESTful API訪問接口,通過YAML或者JSON來描述不同的任務(wù)類型,不同編程語言實現(xiàn)的系統(tǒng)也可以使用社區(qū)開發(fā)的SDK來訪問。對于我們支持的多個深度學(xué)習(xí)框架,還有開發(fā)環(huán)境、訓(xùn)練任務(wù)、模型服務(wù)等功能,都需要定制Docker鏡像,提交到Kubernetes時指定使用的容器鏡像、啟動命令等參數(shù)。通過對Kubernetes API的封裝,我們可以簡化Kubernetes的使用細(xì)節(jié),保證了對Mesos、Yarn等后端支持的兼容性,同時避免了直接暴露Kubernetes API帶來的授權(quán)問題以及安全隱患。
除了可以啟動單個容器執(zhí)行用戶的訓(xùn)練代碼,小米cloud-ml平臺也支持TensorFlow的分布式訓(xùn)練,使用時只需要傳入ps和worker個數(shù)即可。考慮到對TensorFlow原生API的兼容性,我們并沒有定制修改TensorFlow代碼,用戶甚至可以在本地安裝開源的TensorFlow測試后再提交,同樣可以運(yùn)行在云平臺上。但本地運(yùn)行分布式TensorFlow需要在多臺服務(wù)器上手動起進(jìn)程,同時要避免進(jìn)程使用的端口與其他服務(wù)沖突,而且要考慮系統(tǒng)環(huán)境、內(nèi)存不足、磁盤空間等問題,代碼更新和運(yùn)維壓力成倍增加,Cloud Machine Learning下的分布式TensorFlow只需要在提交任務(wù)時多加兩個參數(shù)即可。有人覺得手動啟動分布式TensorFlow非常繁瑣,在云端實現(xiàn)邏輯是否更加復(fù)雜?其實并不是,通過云服務(wù)的控制節(jié)點,我們在啟動任務(wù)前就可以分配不會沖突的端口資源,啟動時通過容器隔離環(huán)境資源,而用戶不需要傳入Cluster spec等繁瑣的參數(shù),我們遵循Google CloudML標(biāo)準(zhǔn),會自動生成Cluster spec等信息通過環(huán)境變量加入到容器的啟動任務(wù)中。這樣無論是單機(jī)版訓(xùn)練任務(wù),還是幾個節(jié)點的分布式任務(wù),甚至是上百節(jié)點的分布式訓(xùn)練任務(wù),cloud-ml平臺都可以通過相同的鏡像和代碼來運(yùn)行,只是啟動時傳入的環(huán)境變量不同,在不改變?nèi)魏瓮獠恳蕾嚨那闆r下優(yōu)雅地實現(xiàn)了看似復(fù)雜的分布式訓(xùn)練功能。
看到這里大家可能認(rèn)為,小米的cloud-ml平臺和Google的CloudML服務(wù),都有點類似之前很火的PaaS(Platform as a Service)或者CaaS(Container as a Service)服務(wù)。確實如此,基于Kubernetes或者M(jìn)esos我們可以很容易實現(xiàn)一個通用的CaaS,用戶上傳應(yīng)用代碼和Docker鏡像,由平臺調(diào)度和運(yùn)行,但不同的是Cloud Machine Learning簡化了與機(jī)器學(xué)習(xí)無關(guān)的功能。我們不需要用戶了解PaaS的所有功能,也不需要支持所有編程語言的運(yùn)行環(huán)境,暴露提交任務(wù)、查看任務(wù)、刪除任務(wù)等更簡單的使用接口即可,而要支持不同規(guī)模的TensorFlow應(yīng)用代碼,用戶需要以標(biāo)準(zhǔn)的Python打包方式上傳代碼。Python的標(biāo)準(zhǔn)打包方式獨立于TensorFlow或者小米cloud-ml平臺,幸運(yùn)的是目前Google CloudML也支持Python的標(biāo)準(zhǔn)打包方式,通過這種標(biāo)準(zhǔn)接口,我們甚至發(fā)現(xiàn)Google CloudML打包好的samples代碼甚至可以直接提交到小米cloud-ml平臺上訓(xùn)練。這是非常有意思的嘗試,意味著用戶可以使用原生的TensorFlow接口來實現(xiàn)自己的模型,在本地計算資源不充足的情況下可以提交到Google CloudML服務(wù)上訓(xùn)練,同時可以一行代碼不用改直接提交到小米或者其他云服務(wù)廠商中的云平臺上訓(xùn)練。如果大家在實現(xiàn)內(nèi)部的云深度學(xué)習(xí)平臺,不妨也參考下標(biāo)準(zhǔn)的Python打包方式,這樣用戶同一份代碼就可以兼容所有云平臺,避免廠商綁定。
除了訓(xùn)練任務(wù),Cloud Machine Learning平臺好也能集成模型服務(wù)、開發(fā)環(huán)境等功能。對于模型服務(wù),TensorFlow社區(qū)開源了TensorFlow Serving項目,可以加載任意TensorFlow模型并且提供統(tǒng)一的訪問接口,而Caffe社區(qū)也提供了Web demo項目方便用戶使用。目前Kubernetes和Mesos都實現(xiàn)了類似Deployment的功能,通過制作TensorFlow Serving等服務(wù)的容器鏡像,我們可以很方便地為用戶快速啟動對應(yīng)的模型服務(wù)。通過對Kubernetes API的封裝,我們在暴露給用戶API時也提供了replicas等參數(shù),這樣用戶就可以直接通過Kubernetes API來創(chuàng)建多副本的Deployment實例,并且由Kubernetes來實現(xiàn)負(fù)載均衡等功能。除此之外,TensorFlow Serving本身還支持在線模型升級和同時加載多個模型版本等功能,我們在保證TensorFlow Serving容器正常運(yùn)行的情況下,允許用戶更新分布式對象存儲中的模型文件就可以輕易地支持在線模型升級的功能。
對于比較小眾但有特定使用場景的深度學(xué)習(xí)框架,Cloud Macine Learning的開發(fā)環(huán)境、訓(xùn)練任務(wù)和模型服務(wù)都支持Bring Your Own Image功能,也就是說用戶可以定制自己的Docker鏡像并在提交任務(wù)時指定使用。這種靈活的設(shè)置極大地降低了平臺管理者的維護(hù)成本,我們不需要根據(jù)每個用戶的需求定制通用的Golden image,事實上也不可能有完美的鏡像可以滿足所有需求,用戶不同的模型可能有任意的Python或者非Python依賴,甚至是自己實現(xiàn)的私有深度學(xué)習(xí)框架也可以直接提交到Cloud Machine Learning平臺上訓(xùn)練。內(nèi)測BYOI功能時,我們還驚喜地發(fā)現(xiàn)這個功能對于我們開發(fā)新的深度學(xué)習(xí)框架支持,以及提前測試鏡像升級有非常大的幫助,同時用戶自己實現(xiàn)的Caffe模型服務(wù)和XGBoost模型服務(wù)也可以完美支持。
當(dāng)然Cloud Machine Learning平臺還可以實現(xiàn)很多有意思的功能,例如通過對線上不同GPU機(jī)型打label,通過NodeSelector功能可以允許用戶選擇具體的GPU型號進(jìn)行更細(xì)粒度的調(diào)度,這需要我們暴露更底層Kubernetes API實現(xiàn),這在集群測試中也是非常有用的功能。而無論是基于GPU的訓(xùn)練任務(wù)還是模型服務(wù),我們都制作了對應(yīng)的CUDA容器鏡像,通過Kubernetes調(diào)度到對應(yīng)的GPU計算節(jié)點就可以訪問本地圖像處理硬件進(jìn)行高性能運(yùn)算了。小米cloud-ml還開放了前置命令和后置命令功能,允許用戶在啟動訓(xùn)練任務(wù)前和訓(xùn)練任務(wù)結(jié)束后執(zhí)行自定義命令,對于不支持分布式存儲的深度學(xué)習(xí)框架,可以在前置命令中掛載S3 fuse和FDS fuse到本地目錄,或者初始化HDFS的Kerberos賬號,靈活的接口可以實現(xiàn)更多用戶自定義的功能。還有超參數(shù)自動調(diào)優(yōu)功能,與Google CloudML類似,用戶可以提交時指定多組超參數(shù)配置,云平臺可以自動分配資源起多實例并行計算,為了支持讀取用戶自定義的指標(biāo)數(shù)據(jù),我們實現(xiàn)了類似TensorBoard的Python接口直接訪問TensorFlow event file數(shù)據(jù),并通過命令行返回給用戶優(yōu)的超參數(shù)組合。后還有TensorFlow Application Template功能,在Cloud Machine Learning平臺上用戶可以將自己的模型代碼公開或者使用官方維護(hù)的開源TensorFlow應(yīng)用,用戶提交任務(wù)時可以直接指定這些開源模板進(jìn)行訓(xùn)練,模板已經(jīng)實現(xiàn)了MLP、CNN、RNN和LR等經(jīng)典神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu),還可以通過超參數(shù)來配置神經(jīng)網(wǎng)絡(luò)每一層的節(jié)點數(shù)和層數(shù),而且可以支持任意稠密和稀疏的數(shù)據(jù)集,這樣不需要編寫代碼就可以在云平臺上訓(xùn)練自己的數(shù)據(jù)快速生成AI模型了。
在前面的平臺設(shè)計和平臺架構(gòu)后,要實現(xiàn)完整的云深度學(xué)習(xí)服務(wù)并不困難,尤其是集成了Docker、Etcd、Kubernetes、TensorFlow等開源項目,組件間通過API松耦合地交互,需要的重復(fù)工作主要是打通企業(yè)內(nèi)部權(quán)限系統(tǒng)和將用戶請求轉(zhuǎn)化成Kubernetes等后端請求而已,而支持標(biāo)準(zhǔn)的打包方式還可以讓業(yè)務(wù)代碼在任意云平臺上無縫遷移。
目前小米云深度學(xué)習(xí)平臺已經(jīng)在內(nèi)部各業(yè)務(wù)部門推廣使用,相比于直接使用物理機(jī),云服務(wù)擁有超高的資源利用率、快速的啟動時間、近乎“無限”的計算資源、自動的故障遷移、支持分布式訓(xùn)練和超參數(shù)自動調(diào)優(yōu)等優(yōu)點,相信可以得到更好的推廣和應(yīng)用。
除了完成上述的功能,我們在實踐時也聽取了用戶反饋進(jìn)行改進(jìn)。例如有內(nèi)部用戶反饋,在云端訓(xùn)練的TensorFlow應(yīng)用把event file也導(dǎo)出到分布式存儲中,使用TensorBoard需要先下載文件再從本地起服務(wù)相對麻煩,因此我們在原有基礎(chǔ)架構(gòu)實現(xiàn)了TensorboardService功能,可以一鍵啟動TensorBoard服務(wù),用戶只需要用瀏覽器就可以打開使用。
管理GPU資源和排查GPU調(diào)度問題也是相當(dāng)繁瑣的,尤其是需要管理不同GPU設(shè)備和不同CUDA版本的異構(gòu)集群,我們統(tǒng)一規(guī)范了CUDA的安裝方式,保證Kubernetes調(diào)度的容器可以正常訪問宿主機(jī)的GPU設(shè)備。當(dāng)然對于GPU資源的調(diào)度和釋放,我們有完善的測試文檔可以保證每一個GPU都可以正常使用,根據(jù)測試需求實現(xiàn)的NodeSelector功能也幫忙我們更快地定位問題。
由于已經(jīng)支持幾十個功能和十幾個深度學(xué)習(xí)框架,每次升級都可能影響已有服務(wù)的功能,因此我們會在多節(jié)點的分布式staging集群進(jìn)行上線演習(xí)和測試,并且實現(xiàn)smoke test腳本進(jìn)行完整的功能性測試。服務(wù)升級需要更新代碼,但是為了保證不影響線上業(yè)務(wù),無論是Kubernetes還是我們實現(xiàn)的API Server都有多副本提供服務(wù),通過高可用技術(shù)先遷移服務(wù)進(jìn)行滾動升級,對于一些單機(jī)運(yùn)行的腳本也通過Etcd實現(xiàn)了高可用的搶主機(jī)制,保證所有組件沒有單點故障。
本文介紹了實現(xiàn)企業(yè)級云深度學(xué)習(xí)平臺需要的概念和知識,基于小米cloud-ml服務(wù)探討了云平臺的設(shè)計、架構(gòu)、實現(xiàn)以及實踐這四方面的內(nèi)容,希望大家看完有所收獲。
本站文章版權(quán)歸原作者及原出處所有 。內(nèi)容為作者個人觀點, 并不代表本站贊同其觀點和對其真實性負(fù)責(zé),本站只提供參考并不構(gòu)成任何投資及應(yīng)用建議。本站是一個個人學(xué)習(xí)交流的平臺,網(wǎng)站上部分文章為轉(zhuǎn)載,并不用于任何商業(yè)目的,我們已經(jīng)盡可能的對作者和來源進(jìn)行了通告,但是能力有限或疏忽,造成漏登,請及時聯(lián)系我們,我們將根據(jù)著作權(quán)人的要求,立即更正或者刪除有關(guān)內(nèi)容。本站擁有對此聲明的最終解釋權(quán)。