861
人物
小米深度學習平台架構與實現
內容來源:2016年12月16日,小米雲平台深度學習研發工程師陳迪豪在“GIAC 全球互聯網架構大會”進行《支撐百度搜索引擎99.995%可靠名字服務架構設計》演講分享。IT大咖說作為獨家視頻合作方,經主辦方和講者審閱授權發布。
閱讀字數:2783 | 4分鍾閱讀
嘉賓演講視頻和PPT地址
機器學習與深度學習應用
機器學習是通過機器進行自主學習數據而非以編碼的方式;深度學習是機器學習的一個分支,主要包括四種最基本的網絡結構。
CNN是卷積神經網絡。通過卷積網絡的模型,可以高效地處理圖像分類或人臉識別等應用。
MLP是多層感知機,也就是傳統的神經網絡。已經被Google大量應用在Youtube視頻推薦和APP推薦上。
RNN模型是在神經元裏加入帶記憶的神經元結構,可以處理和時間序列有關的問題。
RL是Alphago用到的增強學習,它的底層也用到一些深度學習技術。
CaseStudy:Image Classification
假如有一個應用要通過大量圖片訓練分辨出貓和狗的圖片。如果按照傳統的方法,程序員自己寫應用來區別貓狗圖片,可能需要很多規則和圖形處理技巧,必須是一個圖像專家。
但現在有了神經網絡,輸入隻是數據,隻要定義一個簡單的神經網絡,把應用寫好後通過數據訓練,就能實現一個效果不錯的圖像分類應用。
Google已經開源了Inception的模型,是層數比較高的一個多層神經網絡。這個網絡有些複雜,用GPU機器可能要訓練兩到三周才能實現。有了Tensorflow這樣的工具後,可以在Github地址上直接下載它的模型。
CaseStudy:Game AI
GameAI是遊戲人工智能,通過圖像的結果用增強學習和Qlearning的算法,就可以實現它自動最大化地得到分數。
Introduce Tensorflow
Tensorflow是Google開源的一個Deep Learning Library,提供了C++和Python接口,支持使用GPU和CPU進行訓練,也支持分布式大規模訓練。
在使用Tensorflow的時候,隻寫一個靜態純文本的文件,通過Python解釋器去運行,所以Tensorflow本質上隻是一個Deep Learning Library。
Summary Of Tensorflow
Tensorflow這個Library需要人工安裝,腳本需要手動運行,環境需要手動配置。分布式的Tensorflow要把一個腳本拷貝到多台機器上,手動配置。要進行代碼調優需要手動Run和Tune。
我們想做Tensorflow模型調優,但服務器可能出現OOM、可能使用的端口被別人占用、也可能磁盤出現故障,服務器環境變成應用開發者的負擔。
分布式Tensorflow同樣需要把代碼拷貝到分布式的各台機器上,且不論Tensorflow的性能是否隨著節點數越多而增強,服務器維護成本已呈線性增加了。
雖然Google開源了一個非常好的深度學習工具,但它並沒有解決深度學習應用部署和調度的問題。
有人說過,任何複雜的問題都能通過抽象來解決。
我們在中間引入一個分布式的管理係統,讓上層業務應用不需要直接管理底層資源,由統一的調度係統去實現。
深度學習平台架構與設計
Cloud-ML:The Principles
我們希望這是一個雲計算,而不是提供裸機的服務。用戶隻需寫好應用代碼提交,不用通過Ssh或登錄到服務器上用腳本運行。
我們想把模型的訓練和服務進行集成。一個模型訓練完成後會得到一些模型文件,可以直接把這些模型文件應用起來。
我們希望這個平台是高可用的,即使用戶的任務訓練失敗,也能重新給用戶做一個調度。
用戶之間的任務是需要做資源隔離和動態調度。
我們希望能支持並發的訓練。
通過Automatically Tuning平台,用戶可以一次提交多個超參數組合,讓它並行訓練,等訓練結束可以直接看到效果。
Cloud-ML:All-In-One Platform
目前這個平台已經為用戶提供深度學習框架的開發環境,開發完之後可以把代碼提交上去,然後就可以訓練,訓練結果會直接保存在我們自己的分布式存儲裏。用戶可以通過這個平台起一個RPC服務,他的手機或業務服務器能夠直接調用這個服務。我們還提供了Model Zoo以及RPC客戶端的一些功能。
這是深度學習平台的基本架構。
最上層是用戶業務,有廣告、搜索、遊戲等,都有自己的業務場景,可以根據自己的數據格式編寫一些Tensorflow、深度學習的腳本。通過Cloud-Ml的API把任務提交到服務端,由服務端創建一個容器,把它調用到真正的物理機計算資源上。
這整個大平台主要是由Tensorflow和Kubermetes實現的。由這個平台管理底層維護的CPU服務器和GPU服務器、虛擬機以及AWS的機器。
Cloud-ML:Kubernetes Inside
Kubermetes是一個容器的集群管理係統,它會依賴一個多節點的Etcd集群,有一個或多個Master去管理Kubelet節點。每個物理機會部署一個Kubelet和Docker進程,在上麵會運行多個Docker的Container。
我們這個平台封裝了一個Kubelet,讓用戶把業務代碼提交上來,組成一個Docker容器的格式,然後由Kubelet去調度。
Cloud-ML:The Architecture
這是一個分層和解耦的基本架構,好處就是API服務隻需要負責授權認證、任務管理,調度通過Kubermetes去做,Kubermetes的元數據都通過Etcd去存儲,每一部分都利用API進行請求。這樣就能把整個係統的組件解耦。
Cloud-ML:Train Job
有了深度學習平台之後,通過已經支持的API聲明提交任務的名稱,編寫好Python代碼的地址。運行代碼的參數通過Post請求過來。
我們也提供SDK對API做了封裝。
命令行工具Command能夠直接把寫好的腳本提交到雲平台進行訓練。還有內部集成的Web Console。
訓練任務提交之後,在命令行可以看到任務訓練日誌。
Tensorboard可以看定義的模型結構。
Cloud-ML:Model Service
訓練任務結束後可以直接起一個Model Service。因為文件已經保存在雲存儲裏了,隻要再發一個API請求,在後端也封裝了一個Docker Image。
底層是依賴Google已經開源的Tensorflow Serving直接加載模型文件。
左邊是Online Services,用戶把模型訓練完保存在這裏,起一個容器,對外提供高性能的RPC服務。
Cloud-ML:Predict Client
在線服務支持Grpc和HTTP接口,理論上支持大部分編程語言。可以使用Java客戶端、C++客戶端、Go客戶端和Python客戶端,或直接在Andriod請求模型服務。
通過一個統一的接口對外提供圖像相關的API,底層是由Kubermetes進行調度和資源隔離。
右邊是Python的Grpc客戶端,當模型起來以後,用戶隻需要編寫二十幾行Python代碼,把模型的輸入準備好,就可以請求服務。
Cloud-ML:Wrap-Up
在有深度學習平台以後,工作流是這樣的。上麵是工作環境,雲端有服務器和基礎架構維護的服務。用戶在本地環境編寫自己的Tensorflow應用,在本地驗證這個應用能否跑起來。
通過Submit Train Job的API把任務提交到雲端,真正用GPU或CPU訓練的代碼就在雲端運行。運行完之後會把模型保存到分布式存儲裏麵。
用戶可以用官方提供的Test TF APP去看模型訓練的效果如何,如果沒問題,在用戶自己的環境調用Deploy Model的API,這樣就會把Model拿出來起一個容器,對外提供RPC服務。
用戶就可以選擇自己喜歡的客戶端,用RPC的方式請求模型服務。
深度學習平台實踐與應用
Practice:Distributed Training
支持分布式訓練。用戶在Python腳本裏定義了一係列參數,把這個腳本拷貝到各台機器上去運行。
我們讓用戶把分布式節點個數和當前進程角色通過環境變量定義,環境變量名是固定的。這樣它隻需要一個環境變量就可以定義進程在分布式訓練裏的角色。
我們把用戶的腳本拿出來以後,不需要它去管理服務器的環境,隻需要聲明這個集群有多少個PS、Worker和Master,把這些參數提交給Cloud-Ml的API服務,由它來申請可用的IP和端口。
Practice:Storage Integration
我們對存儲係統做了集成。開源的Tensorflow目前隻支持本地存儲,因為我們在雲端訓練,任務由我們調度到特定的機器,用戶不可能直接把訓練數據放到本地。
我們希望用戶能直接訪問我們的分布式存儲,所以對Tensorflow源碼做了修改。提交任務的時候可以直接指定一個FDS的路徑,係統就能根據用戶的權限直接讀取訓練數據。
對Google官方的Tensorflow做了拓展。訓練完之後數據全部放在分布式存儲裏,用Tensorflow指定FDS路徑。
訓練完把模型導出到FDS以後,通過Cloud-Ml的API創建一個服務,加載它的模型文件。
針對不同的模型聲明不同的請求數據,輸入類型和輸入的值通過Json定義,就可以請求模型服務了。
Practice:Support HPAT
HPAT是神經網絡裏的超參數自動調優,極大縮短了科研人員和專注做算法模型人員的時間。
Practice:Dependency Management
讓用戶提交代碼的時候提交一個標準的Python Package。
Practice:BringYour Own Image
讓用戶的Docker直接提交到Kubermetes集群裏,真正徹底解決用戶依賴的問題。
Practice:ModelZoo
我們把Model文件放到存儲中,通過API把Paper實現了,不同的Model都可以部署到這個平台上,這樣就可以通過RPC來直接訪問這個服務了。
總結
今天主要給大家分享了深度學習的應用,以及在思考做一個深度學習平台之後,我們的考慮和架構設計,希望能給大家帶來一些幫助。我們也相信雲計算大數據時代已經到來,下一個時代將會是深度學習,並且未來會繼續往雲深度學習發展。謝謝大家!
今天的分享到此結束,謝謝大家!
相關推薦
1. 魅族推薦平台架構
2. 大數據平台快速解決方案
編者:IT大咖說,歡迎關注“itdakashuo”,@IT大咖說 ,轉載請標明版權和出處
最後更新:2017-08-30 18:32:38