云計(jì)算深度學(xué)習(xí)平臺架構(gòu)與實(shí)踐的必經(jīng)之路
定義云深度學(xué)習(xí)平臺什么是云深度學(xué)習(xí)?隨著機(jī)器學(xué)習(xí)的發(fā)展,單機(jī)運(yùn)行的機(jī)器學(xué)習(xí)任務(wù)存在缺少資源隔離、無法動態(tài)伸縮等問題,因此要用到基于云計(jì)算的基礎(chǔ)架構(gòu)服務(wù)。云機(jī)器學(xué)習(xí)平臺并不是一個全新的概念,Google、微軟、亞馬遜等都有相應(yīng)的服務(wù),這里列舉幾個比較典型的例子。
第一個是Google Cloud Machine Learning Engine,它底層托管在Google Cloud上,上層封裝了Training、Prediction、Model Service等機(jī)器學(xué)習(xí)應(yīng)用的抽象,再上層支持了Google官方的TensorFlow開源框架。
亞馬遜也推出了Amzon machine learning平臺,它基于AWS的Iaas架構(gòu),在Iaas上提供兩種不同的服務(wù),分別是可以運(yùn)行MXNet等框架的EC2虛擬機(jī)服務(wù),以及各種圖象、語音、自然語言處理的SaaS API。
此外,微軟提供了Azure Machine Learning Studio服務(wù),底層也是基于自己可伸縮、可拓展的Microsoft Azure Cloud服務(wù),上層提供了拖拽式的更易用的Studio工具,再上面支持微軟官方的CNTK等框架,除此之外微軟還有各種感知服務(wù)、圖象處理等SaaS API,這些服務(wù)都是跑在Scalable的云基礎(chǔ)平臺上面。
基于卷積神經(jīng)網(wǎng)絡(luò)在手機(jī)端實(shí)現(xiàn)文檔檢測 阿里巴巴集團(tuán)千億級別店鋪系統(tǒng)架構(gòu)平臺化技術(shù)實(shí)踐 攜程第四代架構(gòu)之軟負(fù)載 SLB 實(shí)踐之路 解讀百度PB級數(shù)據(jù)倉庫Palo開源架構(gòu) 相關(guān)贊助商
與100+國內(nèi)外技術(shù)專家探索2017前瞻熱點(diǎn)技術(shù)
以上這些都是業(yè)界比較成熟的云深度學(xué)習(xí)平臺,而在真實(shí)的企業(yè)環(huán)境中,我們?yōu)槭裁催€需要實(shí)現(xiàn)Cloud Machine Learning服務(wù)呢?
首先國外的基礎(chǔ)設(shè)施并不一定是國內(nèi)企業(yè)可以直接使用的,而如果只是本地安裝了TensorFlow,那也只能在裸機(jī)上進(jìn)行訓(xùn)練,本地默認(rèn)沒有資源隔離,如果同時跑兩個訓(xùn)練任務(wù)就需要自己去解決資源沖突的問題。因?yàn)闆]有資源隔離,所以也做不了資源共享,即使你有多節(jié)點(diǎn)的計(jì)算集群資源,也需要人工的約定才能保證任務(wù)不會沖突,無法充分利用資源共享帶來的便利。此外,開源的機(jī)器學(xué)習(xí)框架沒有集群級別的編排功能,例如你想用分布式TensorFlow時,需要手動在多臺服務(wù)器上啟動進(jìn)程,沒有自動的Failover和Scaling。因此,很多企業(yè)已經(jīng)有機(jī)器學(xué)習(xí)的業(yè)務(wù),但因?yàn)槿鄙貱loud Machine Learning平臺,仍會有部署、管理、集群調(diào)度等問題。
那么如何實(shí)現(xiàn)Cloud Machine Learning平臺呢?
我們對云深度學(xué)習(xí)服務(wù)做了一個分層,第一層是平臺層,類似于Google cloud、Azure、AWS這樣的IaaS層,企業(yè)內(nèi)部也可以使用一些開源的方案,如容器編排工具Kubernetes或者虛擬機(jī)管理工具OpenStack。有了這層之后,我們還需要支持機(jī)器學(xué)習(xí)相關(guān)的功能,例如Training、Prediction、模型上線、模型迭代更新等,我們在Machine Learning Layer層對這些功能進(jìn)行抽象,實(shí)現(xiàn)了對應(yīng)的API接口。最上面是模型應(yīng)用層,就可以基于一些開源的機(jī)器學(xué)習(xí)類庫,如TensorFlow、MXNet等。
整個Cloud Machine learning運(yùn)行在可伸縮的云服務(wù)上,包行了模型開發(fā)、模型訓(xùn)練,以及模型服務(wù)等功能,形成一個完整的機(jī)器學(xué)習(xí)工作流。但這并不是一個閉環(huán),我們在實(shí)踐中發(fā)現(xiàn),線上的機(jī)器學(xué)習(xí)模型是有時效性的,例如新聞推薦模型就需要及時更新熱點(diǎn)新聞的樣本特征,這時就需要把閉環(huán)打通,把線上的預(yù)測結(jié)果加入到線下的訓(xùn)練任務(wù)里,然后通過在線學(xué)習(xí)或者模型升級,實(shí)現(xiàn)完整的機(jī)器學(xué)習(xí)閉環(huán),這些都是單機(jī)版的機(jī)器學(xué)習(xí)平臺所不能實(shí)現(xiàn)的。
打造云深度學(xué)習(xí)平臺主要包含以下幾個組件:首先是客戶端訪問的API Service,作為服務(wù)提供方,我們需要提供標(biāo)準(zhǔn)的RESTful API服務(wù),后端可以對接一個Kubernetes集群、OpenStack集群、甚至是自研的資源管理系統(tǒng)??蛻舳苏埱蟮紸PI服務(wù)后,平臺需要解析機(jī)器學(xué)習(xí)任務(wù)的參數(shù),通過Kubernetes或者OpenStack來創(chuàng)建任務(wù),調(diào)度到后端真正執(zhí)行運(yùn)算的集群資源中。如果是訓(xùn)練任務(wù),可以通過起一個訓(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)出模型對應(yīng)的文件,通過請求云深度學(xué)習(xí)平臺的API服務(wù),最終翻譯成Kubernetes可以理解的資源配置請求,在集群中啟動TensorFlow Serving等服務(wù)。除此之外,在Google Cloud-ML最新的API里多了一個Prediction功能,預(yù)測時既可以啟動在線Service,也可以啟動離線的Prediction的任務(wù),平臺只需要創(chuàng)建對應(yīng)的Prediction的容器來做Inference和保存預(yù)測結(jié)果即可 。通過這種簡單的封裝,就可以實(shí)現(xiàn)類似Google Cloud-ML的基礎(chǔ)架構(gòu)了。
架構(gòu)上進(jìn)行了分層抽象,實(shí)現(xiàn)上也只需要三步。
第一步是創(chuàng)建一個Docker鏡像,下面的Dockerfile例子是從TensorFlow項(xiàng)目中截取出來的,官方已經(jīng)提供了一個可以運(yùn)行的Docker鏡像,通過加入定制的啟動腳本就可以實(shí)現(xiàn)開發(fā)環(huán)境、模型訓(xùn)練以及模型服務(wù)等功能。
第二步是實(shí)現(xiàn)一個標(biāo)準(zhǔn)的API服務(wù),下面是一個Python實(shí)現(xiàn)的實(shí)例,用戶發(fā)送一個啟動訓(xùn)練任務(wù)的請求,服務(wù)端可以解析請求的參數(shù)和內(nèi)容,并將任務(wù)提交到Kubernetes等后端集群中。
第三步是生成Kubernetes所需的文件格式,下面的JSON文件大家也可以在GitHub中找到,實(shí)現(xiàn)了將分布式TensorFlow任務(wù)提交到Kubernetes集群中運(yùn)行。
我們通過簡單的三個配置就可以完成機(jī)器學(xué)習(xí)任務(wù)從本地到云端的遷移過程,也就是實(shí)現(xiàn)了Cloud Machine Learning服務(wù)。前面提到云深度學(xué)習(xí)平臺需要支持資源隔離和資源共享,這是如何實(shí)現(xiàn)的呢,其實(shí)Kubernetes本身就有這個抽象,用戶可以在請求時申明需要的CPU、內(nèi)存、甚至是GPU資源,通過cgroups、namespace等容器技術(shù)來實(shí)現(xiàn)資源隔離,而kube-scheduler實(shí)現(xiàn)了資源調(diào)度和資源共享等功能。實(shí)現(xiàn)自研或者公有云的Cloud Machine Learning平臺,開發(fā)者可以很容易提交訓(xùn)練任務(wù)、創(chuàng)建模型服務(wù)等,但在一個真實(shí)的機(jī)器學(xué)習(xí)場景中,只解決計(jì)算資源的隔離和調(diào)度是遠(yuǎn)遠(yuǎn)不夠的,我們還需要重新思考如何集成數(shù)據(jù)處理、特征工程等問題。
重新定義云深度學(xué)習(xí)平臺TensorFlow是一個可用于深度學(xué)習(xí)的數(shù)值計(jì)算庫,基于TensorFlow可以實(shí)現(xiàn)MLP、CNN、RNN等機(jī)器學(xué)習(xí)模型,但有了它是不是就不需要Spark呢?他們的關(guān)系是什么?
在生產(chǎn)環(huán)境中,我們發(fā)現(xiàn)TensorFlow并沒有完全取代已有的大數(shù)據(jù)處理工具,我們需要用Spark做數(shù)據(jù)分析和特征工程,還需要數(shù)據(jù)倉庫等服務(wù)去存儲和查詢結(jié)構(gòu)化數(shù)據(jù)。TensorFlow是一個非常優(yōu)秀的深度學(xué)習(xí)框架,但在真實(shí)場景中用戶還需要一些PowerGraph處理的圖關(guān)系特征作為輸入,這都是單獨(dú)一個框架無法解決的。對于用戶的建模流程如何組織、如何做數(shù)據(jù)清洗、如何做特征抽取、如何上線訓(xùn)練好的模型、如何預(yù)估模型效果,這些可以使用Azure ML Studio工具去完成,而且是TensorFlow所缺乏的。
前面我們介紹了Cloud Machine Learning,可以實(shí)現(xiàn)一個類似Google的分布式、高可用、帶集群編排的計(jì)算平臺,但這遠(yuǎn)遠(yuǎn)不夠,因?yàn)槲覀冞€需要使用大數(shù)據(jù)處理的框架,包括MapReduce、流式處理、圖計(jì)算等框架。TensorFlow只是整個機(jī)器學(xué)習(xí)流程里面做模型訓(xùn)練其中一部分,我們可能還需要Kubernetes做CPU、GPU的管理和調(diào)度。如果我們要完成一個機(jī)器學(xué)習(xí)的業(yè)務(wù),就需要同時掌握TensorFlow、Spark、Hadoop、Hive、Kubernetes等框架的原理和應(yīng)用,而不只是提供一個Google Cloud-ML或者AWS服務(wù)就夠了,這也是我們要重新定義Cloud Machine Learning的原因。
前面在客觀上我們需要這么多知識,但主觀上我們希望有什么呢?我們更希望有一個從數(shù)據(jù)處理到模型訓(xùn)練再到模型上線的一個全閉環(huán)服務(wù),而不僅僅是機(jī)器學(xué)習(xí)框架或者通用計(jì)算平臺,我們希望不寫代碼就可以做特征抽取的工作,我們希望機(jī)器學(xué)習(xí)的工作流是很容易描述的,而不需要通過編寫代碼的方式來實(shí)現(xiàn),我們需要一個很靈活的基礎(chǔ)架構(gòu)可以支持各種異構(gòu)的計(jì)算資源,我們希望平臺是可拓展的可以實(shí)現(xiàn)自動Failover和Scaling。 除了前面提到的Google、微軟、亞馬遜做的云機(jī)器學(xué)習(xí)平臺,我們還需要從IaaS、PaaS、SaaS多維度上提供使用接口,滿足不同層次用戶的使用需求,另一方面這應(yīng)該是低門檻的產(chǎn)品服務(wù),讓任意的領(lǐng)域?qū)<叶伎梢暂p易使用。
后面我們會介紹在真實(shí)場景下如何改造Cloud Machine Learning平臺,并且介紹第四范式對外提供的低門檻、分布式、高可用的先知機(jī)器學(xué)習(xí)平臺。
第四范式的云深度學(xué)習(xí)實(shí)踐經(jīng)驗(yàn)第四范式先知平臺是一個基于Cloud的全流程機(jī)器學(xué)習(xí)產(chǎn)品,用戶通過Web登陸到先知平臺就可以使用模型調(diào)研、預(yù)估服務(wù)的功能,并且可以通過拖拽的方式來描述機(jī)器學(xué)習(xí)的工作流 。
它的使用步驟如下,第一步是數(shù)據(jù)預(yù)處理,用戶不需要寫Spark代碼而只需要拖拽出一個圖標(biāo),我們稱之為一個算子,然后就可以提交數(shù)據(jù)清洗等數(shù)據(jù)預(yù)處理任務(wù)了。通過拖拽數(shù)據(jù)拆分算子,可以將數(shù)據(jù)集拆分為訓(xùn)練集和測試集兩部分,其中一部分留在左邊用于特征抽取。一般來說,用Spark、Mapreduce等開源工具也可以做特征抽取,但對編程技能和工程能力有一定的要求,我們通過定義特征抽取的配置或者腳本,讓用戶可以不寫代碼也可以實(shí)現(xiàn)對原始數(shù)據(jù)集的特征工程。然后,連接我們自主研發(fā)的高維邏輯回歸、高維GBDT等模型訓(xùn)練算子,也可以連接基于開源的TensorFlow或者M(jìn)XNet等框架實(shí)現(xiàn)的算法。最后,經(jīng)過模型訓(xùn)練得到模型文件后,用剛剛拆分出來的測試集進(jìn)行模型預(yù)測,還可以使用通用的模型評估算子進(jìn)行AUC、ROC、Logloss等指標(biāo)的可視化展示。
在先知平臺上,用戶只需要通過構(gòu)建流程圖的方式,就可以實(shí)現(xiàn)數(shù)據(jù)處理、模型訓(xùn)練等功能,真正解決真實(shí)場景下機(jī)器學(xué)習(xí)業(yè)務(wù)的問題。在先知平臺的最新版本中,提供了以極高的效率生成特征工程配置腳本,獲取自主研發(fā)的LR、GBDT算法的最佳參數(shù)等AutoML特性。這些特性能夠大幅降低在獲取一個有效建模方案過程中的重復(fù)性勞動,也可以有效輔助數(shù)據(jù)科學(xué)家獲得對數(shù)據(jù)的初步理解。在一些場景下,能夠獲得媲美甚至超越專家建模的效果。
目前先知平臺主要解決以下幾個目標(biāo)場景:
- 簡化數(shù)據(jù)引入,平臺不要求數(shù)據(jù)必須使用分布式存儲,也可以直接從RDBMS這類的SQL數(shù)據(jù)庫中導(dǎo)入訓(xùn)練樣本數(shù)據(jù)。
- 簡化數(shù)據(jù)拆分,用戶不需要寫Spark代碼,只需要提供數(shù)據(jù)拆分后的存儲路徑,并且支持按比例拆分或者按規(guī)則拆分兩種模式。
- 簡化特征抽取,平臺支持連續(xù)特征、離散特征的抽取和組合,對于連續(xù)特征支持自動化的多分桶算法,我們也會歸納常用的特征抽取方法并且封裝成腳本或者配置,用戶只需了解對應(yīng)的配置而不需要自己編碼實(shí)現(xiàn)具體的邏輯。平臺還可以根據(jù)已有的特征配置自動進(jìn)行特征組合拓展,提升模型效果。
- 簡化模型訓(xùn)練,平臺可以支持開源的機(jī)器學(xué)習(xí)算法實(shí)現(xiàn)和第四范式自主研發(fā)的超高維度LR算法,這個LR算法實(shí)現(xiàn)了Parameter server可以解決幾十億、上百億特征維度的高速分布式訓(xùn)練問題。對于學(xué)習(xí)率、正則化參數(shù)等可以做到自動調(diào)優(yōu)。另外,平臺還提供了線性分形分類器等擴(kuò)展算法,可以無須人為干預(yù)的更加有效利用數(shù)值類特征。
- 簡化模型評估,得到模型預(yù)估結(jié)果后,我們可以計(jì)算模型的ROC、Logloss、K-S等指標(biāo),不同模型計(jì)算指標(biāo)的方式是類似的,用戶就不需要重復(fù)編寫實(shí)現(xiàn)代碼,直接通過拖拽算子調(diào)用即可,以上都是先知平臺所解決的問題。
- 簡化模型上線,對于常見的高維LR/GBDT模型,可以一鍵發(fā)布為線上服務(wù)實(shí)例,不僅簡化了模型的部署和運(yùn)維,而且上線實(shí)例還包括大部分的特征工程邏輯,無須手動再次開發(fā)特征處理邏輯的線上版本。
目前,先知平臺已經(jīng)成功應(yīng)用于銀行、金融和互聯(lián)網(wǎng)等各行各業(yè),基于“先知平臺”的反欺詐模型能夠幫助銀行在毫秒級識別可疑交易,同時在新聞、視頻、音頻等內(nèi)容推薦場景下,“先知平臺”也成功大幅度提升關(guān)鍵業(yè)務(wù)指標(biāo)。此外,在賦能企業(yè)利用機(jī)器學(xué)習(xí)升級運(yùn)營效率的同時,更有意義的是,“先知平臺”也極大地降低了機(jī)器學(xué)習(xí)的使用門檻。
作為一個針對全流程機(jī)器學(xué)習(xí)業(yè)務(wù)的人工智能平臺,先知封裝了從數(shù)據(jù)處理、模型訓(xùn)練到模型上線和反饋更新的系統(tǒng)閉環(huán),用戶不再需要很強(qiáng)的編程技術(shù)和工程能力,領(lǐng)域?qū)<液蜆I(yè)務(wù)人員都可以通過推拽方式進(jìn)行建模和上線,幫助企業(yè)快速實(shí)現(xiàn)從數(shù)據(jù)收集到業(yè)務(wù)價值提升的終極目標(biāo)。
隨著專利算法的不斷更新,更加實(shí)時高效的極致工程優(yōu)化,未來先知平臺將進(jìn)一步降低人工智能工業(yè)應(yīng)用的門檻,幫助越來越多的企業(yè)享受人工智能服務(wù)。