7月15日,被《福布斯》雜志譽(yù)為“大數(shù)據(jù)運(yùn)動(dòng)的里程碑”的全球頂級(jí)大數(shù)據(jù)會(huì)議Strata Data Conference在京召開。第四范式先知平臺(tái)架構(gòu)師陳迪豪受邀出席大會(huì),并分享了云深度學(xué)習(xí)平臺(tái)的架構(gòu)與實(shí)踐經(jīng)驗(yàn)。
作為第四范式先知平臺(tái)架構(gòu)師,陳迪豪活躍于Open stack、Kubernetes、TensorFlow等開源社區(qū),實(shí)現(xiàn)了Cloud Machine Learning 云深度學(xué)習(xí)平臺(tái),對(duì)如何進(jìn)行云深度學(xué)習(xí)平臺(tái)架構(gòu)有著深厚積累。本次演講中,他介紹了什么是云深度學(xué)習(xí)?在經(jīng)過實(shí)踐后,應(yīng)該如何重新定義云深度學(xué)習(xí)?以及第四范式在這方面的應(yīng)用和實(shí)踐。以下文章按照現(xiàn)場(chǎng)演講實(shí)錄整理。
定義云深度學(xué)習(xí)平臺(tái)
什么是云深度學(xué)習(xí)?隨著機(jī)器學(xué)習(xí)的發(fā)展,單機(jī)運(yùn)行的機(jī)器學(xué)習(xí)任務(wù)存在缺少資源隔離、無法動(dòng)態(tài)伸縮等問題,因此要用到基于云計(jì)算的基礎(chǔ)架構(gòu)辦事。云機(jī)器學(xué)習(xí)平臺(tái)并不是一個(gè)全新的概念,Google、微軟、亞馬遜等都有相應(yīng)的辦事,這里列舉幾個(gè)比較典型的例子。
第一個(gè)是Google Cloud Machine Learning Engine,它底層托管在Google Cloud上,上層封裝了Training、Prediction、Model Service等機(jī)器學(xué)習(xí)應(yīng)用的抽象,再上層支持了Google官方的TensorFlow開源框架。亞馬遜也推出了Amzon machine learning平臺(tái),它基于AWS的Iaas架構(gòu),在Iaas上提供兩種差別的辦事,別離是可以運(yùn)行MXNet等框架的EC2虛擬機(jī)辦事,以及各種圖象、語音、自然語言處理的SaaS API。此外,微軟提供了Azure Machine Learning Studio辦事,底層也是基于本身可伸縮、可拓展的Microsoft Azure Cloud辦事,上層提供了拖拽式的更易用的Studio工具,再上面支持微軟官方的CNTK等框架,除此之外微軟還有各種感知辦事、圖象處理等SaaS API,這些辦事都是跑在Scalable的云基礎(chǔ)平臺(tái)上面。

以上這些都是業(yè)界比較成熟的云深度學(xué)習(xí)平臺(tái),而在真實(shí)的企業(yè)環(huán)境中,我們?yōu)槭裁催€需要實(shí)現(xiàn)Cloud Machine Learning辦事呢?首先國外的基礎(chǔ)設(shè)施并不必然是國內(nèi)企業(yè)可以直接使用的,而如果只是當(dāng)?shù)匕仓昧薚ensorFlow,那也只能在裸機(jī)上進(jìn)行訓(xùn)練,當(dāng)?shù)啬J(rèn)沒有資源隔離,如果同時(shí)跑兩個(gè)訓(xùn)練任務(wù)就需要本身去解決資源沖突的問題。因?yàn)闆]有資源隔離,所以也做不了資源共享,即使你有多節(jié)點(diǎn)的計(jì)算集群資源,也需要人工的約定才能保證任務(wù)不會(huì)沖突,無法充分利用資源共享帶來的便當(dāng)。此外,開源的機(jī)器學(xué)習(xí)框架沒有集群級(jí)另外編排功能,例如你想用分布式TensorFlow時(shí),需要手動(dòng)在多臺(tái)辦事器上啟動(dòng)進(jìn)程,沒有自動(dòng)的Failover和Scalling。因此,很多企業(yè)已經(jīng)有機(jī)器學(xué)習(xí)的業(yè)務(wù),但因?yàn)槿鄙貱loud Machine Learning平臺(tái),仍會(huì)有安排、辦理、集群調(diào)度等問題。

那么如何實(shí)現(xiàn)Cloud Machine Learning平臺(tái)呢?我們對(duì)云深度學(xué)習(xí)辦事做了一個(gè)分層,第一層是平臺(tái)層,類似于Google cloud、Azure、AWS這樣的IaaS層,企業(yè)內(nèi)部也可以使用一些開源的方案,如容器編排工具Kubernetes或者虛擬機(jī)辦理工具OpenStack。有了這層之后,我們還需要支持機(jī)器學(xué)習(xí)相關(guān)的功能,例如Training、Prediction、模型上線、模型迭代更新等,我們?cè)贛achine Learning Layer層對(duì)這些功能進(jìn)行抽象,實(shí)現(xiàn)了對(duì)應(yīng)的API接口。最上面是模型應(yīng)用層,就可以基于一些開源的機(jī)器學(xué)習(xí)類庫,如TensorFlow、MXNet等。

整個(gè)Cloud Machine learning運(yùn)行在可伸縮的云辦事上,包行了模型開發(fā)、模型訓(xùn)練,以及模型辦事等功能,形成一個(gè)完整的機(jī)器學(xué)習(xí)工作流。但這并不是一個(gè)閉環(huán),我們?cè)趯?shí)踐中發(fā)現(xiàn),線上的機(jī)器學(xué)習(xí)模型是有時(shí)效性的,例如新聞保舉模型就需要及時(shí)更新熱點(diǎn)新聞的樣本特征,這時(shí)就需要把閉環(huán)打通,把線上的預(yù)測(cè)結(jié)果加入到線下的訓(xùn)練任務(wù)里,然后通過在線學(xué)習(xí)或者模型升級(jí),實(shí)現(xiàn)完整的機(jī)器學(xué)習(xí)閉環(huán),這些都是單機(jī)版的機(jī)器學(xué)習(xí)平臺(tái)所不能實(shí)現(xiàn)的。

打造云深度學(xué)習(xí)平臺(tái)主要包羅以下幾個(gè)組件:首先是客戶端拜候的API Service,作為辦事提供方,我們需要提供尺度的RESTful API辦事,后端可以對(duì)接一個(gè)Kubernetes集群、OpenStack集群、甚至是自研的資源辦理系統(tǒng)。客戶端請(qǐng)求到API辦事后,平臺(tái)需要解析機(jī)器學(xué)習(xí)任務(wù)的參數(shù),通過Kubernetes或者OpenStack來創(chuàng)建任務(wù),調(diào)度到后端真正執(zhí)行運(yùn)算的集群資源中。如果是訓(xùn)練任務(wù),可以通過起一個(gè)訓(xùn)練任務(wù)的Container,里面預(yù)裝了TensorFlow或MXNet運(yùn)行環(huán)境,通過這幾層抽象就可以將單機(jī)版的TensorFlow訓(xùn)練任務(wù)提交到由Kubernetes辦理的計(jì)算集群中運(yùn)行。在模型訓(xùn)練結(jié)束后,系統(tǒng)可以導(dǎo)出模型對(duì)應(yīng)的文件,通過請(qǐng)求云深度學(xué)習(xí)平臺(tái)的API辦事,最終翻譯成Kubernetes可以理解的資源配置請(qǐng)求,在集群中啟動(dòng)TensorFlow Serving等辦事。除此之外,,在Google Cloud-ML最新的API里多了一個(gè)Prediction功能,預(yù)測(cè)時(shí)既可以啟動(dòng)在線Service,也可以啟動(dòng)離線的Prediction的任務(wù),平臺(tái)只需要?jiǎng)?chuàng)建對(duì)應(yīng)的Prediction的容器來做Inference和生存預(yù)測(cè)結(jié)果即可 。通過這種簡(jiǎn)單的封裝,就可以實(shí)現(xiàn)類似Google Cloud-ML的基礎(chǔ)架構(gòu)了。
