定義云深度學習平臺什么是云深度學習?隨著機器學習的發展,單機運行的機器學習任務存在缺少資源隔離、無法動態伸縮等問題,因此要用到基于云計算的基礎架構服務。云機器學習平臺并不是一個全新的概念,Google、微軟、亞馬遜等都有相應的服務,這里列舉幾個比較典型的例子。
第一個是Google Cloud Machine Learning Engine,它底層托管在Google Cloud上,上層封裝了Training、Prediction、Model Service等機器學習應用的抽象,再上層支持了Google官方的TensorFlow開源框架。
亞馬遜也推出了Amzon machine learning平臺,它基于AWS的Iaas架構,在Iaas上提供兩種不同的服務,分別是可以運行MXNet等框架的EC2虛擬機服務,以及各種圖象、語音、自然語言處理的SaaS API。
此外,微軟提供了Azure Machine Learning Studio服務,底層也是基于自己可伸縮、可拓展的Microsoft Azure Cloud服務,上層提供了拖拽式的更易用的Studio工具,再上面支持微軟官方的CNTK等框架,除此之外微軟還有各種感知服務、圖象處理等SaaS API,這些服務都是跑在Scalable的云基礎平臺上面。
相關廠商內容
基于卷積神經網絡在手機端實現文檔檢測 阿里巴巴集團千億級別店鋪系統架構平臺化技術實踐 攜程第四代架構之軟負載 SLB 實踐之路 解讀百度PB級數據倉庫Palo開源架構 相關贊助商
與100+國內外技術專家探索2017前瞻熱點技術
以上這些都是業界比較成熟的云深度學習平臺,而在真實的企業環境中,我們為什么還需要實現Cloud Machine Learning服務呢?
首先國外的基礎設施并不一定是國內企業可以直接使用的,而如果只是本地安裝了TensorFlow,那也只能在裸機上進行訓練,本地默認沒有資源隔離,如果同時跑兩個訓練任務就需要自己去解決資源沖突的問題。因為沒有資源隔離,所以也做不了資源共享,即使你有多節點的計算集群資源,也需要人工的約定才能保證任務不會沖突,無法充分利用資源共享帶來的便利。此外,開源的機器學習框架沒有集群級別的編排功能,例如你想用分布式TensorFlow時,需要手動在多臺服務器上啟動進程,沒有自動的Failover和Scaling。因此,很多企業已經有機器學習的業務,但因為缺少Cloud Machine Learning平臺,仍會有部署、管理、集群調度等問題。
那么如何實現Cloud Machine Learning平臺呢?
我們對云深度學習服務做了一個分層,第一層是平臺層,類似于Google cloud、Azure、AWS這樣的IaaS層,企業內部也可以使用一些開源的方案,如容器編排工具Kubernetes或者虛擬機管理工具OpenStack。有了這層之后,我們還需要支持機器學習相關的功能,例如Training、Prediction、模型上線、模型迭代更新等,我們在Machine Learning Layer層對這些功能進行抽象,實現了對應的API接口。最上面是模型應用層,就可以基于一些開源的機器學習類庫,如TensorFlow、MXNet等。
整個Cloud Machine learning運行在可伸縮的云服務上,包行了模型開發、模型訓練,以及模型服務等功能,形成一個完整的機器學習工作流。但這并不是一個閉環,我們在實踐中發現,線上的機器學習模型是有時效性的,例如新聞推薦模型就需要及時更新熱點新聞的樣本特征,這時就需要把閉環打通,把線上的預測結果加入到線下的訓練任務里,然后通過在線學習或者模型升級,實現完整的機器學習閉環,這些都是單機版的機器學習平臺所不能實現的。
打造云深度學習平臺主要包含以下幾個組件:首先是客戶端訪問的API Service,作為服務提供方,我們需要提供標準的RESTful API服務,后端可以對接一個Kubernetes集群、OpenStack集群、甚至是自研的資源管理系統。客戶端請求到API服務后,平臺需要解析機器學習任務的參數,通過Kubernetes或者OpenStack來創建任務,調度到后端真正執行運算的集群資源中。如果是訓練任務,可以通過起一個訓練任務的Container,里面預裝了TensorFlow或MXNet運行環境,通過這幾層抽象就可以將單機版的TensorFlow訓練任務提交到由Kubernetes管理的計算集群中運行。在模型訓練結束后,系統可以導出模型對應的文件,通過請求云深度學習平臺的API服務,最終翻譯成Kubernetes可以理解的資源配置請求,在集群中啟動TensorFlow Serving等服務。除此之外,在Google Cloud-ML最新的API里多了一個Prediction功能,預測時既可以啟動在線Service,也可以啟動離線的Prediction的任務,平臺只需要創建對應的Prediction的容器來做Inference和保存預測結果即可 。通過這種簡單的封裝,就可以實現類似Google Cloud-ML的基礎架構了。
架構上進行了分層抽象,實現上也只需要三步。