實時機器學習
加州大學伯克利分校的研究團隊發布了《Real-Time Machine Learning: The Missing Pieces論文,該論文不僅給出了實時機器學習應用運行於分散式系統的七大要求,同時還提出了一種能夠滿足這些要求的解決方案。
文中作者花了很多的篇幅描述了實時機器學習應用的要求,解決方案的設計思路,以及基於此實現的原形系統的效果。對於具體實現部分文中幾乎涉及,這篇論文在思路上具有一定的指導意義,但是並不適合作為具體實現的參考。
摘要
機器學習倍越來越廣泛的進行應用,不僅是使用靜態模型進行預測,還作為一些涉及動態實時決策的反饋環路的重要組件。 這些應用提出了一組新的需求,單獨地實現這些需求並沒有什麼難度,但是它們的組合卻給現有的分散式執行框架帶來了挑戰:高吞吐量時的毫秒級延遲計算,在不同資源集上的任意任務圖的自適應構造及執行異構核。作者斷言這種機器學習(ML)應用需要一個新的分散式執行框架,並且提出了一種具有概念證明架構的潛在方法,該方案相較於代表性應用在最先進的執行框架的性能提高了63倍。
引言
引言部分作者首先提到機器學習(ML)應用的格局正發生著巨大的變化。儘管機器學習主要側重於基於靜態模型(圖 1a)進行訓練和提供預測,但現在也有強大的推動力在推動機器學習模型在反饋迴路中的緊密整合。實際上,機器學習(ML)應用已經在監督學習範式(其中靜態模型是在離線的數據上進行訓練的)上實現了擴展,並出現了更廣泛的範式,比如強化學習---有望在真實環境中執行,可以融合來自多個輸入流的感測數據並做出反應,並執行連續的微模擬,最後執行動作(能夠影響被感知環境)來完成這個迴路(圖 1b)。
隨後作者提到,通過與現實世界的交互進行學是不安全,不可行,受到寬限制的。諸如增強學習這類應用(嚴重依賴對環境的不斷模擬和更新,通過迭代產生下一個行為),便要求比實時更快的模擬速度。
為了能夠充分利用當前分散式執行框架的有點,同時滿足新應用所要求的性能和靈活性。作者結合自身基於Spark,MPI,TensorFlow實現機器學習(ML)和增強學習(RL)應用時所凸顯出的問題,總結出了支持這類應用的三組要求。
- 性能要求:新的機器學習應用有嚴格的延遲要求和吞吐量要求。
- R1:低延遲。新興機器學習應用的實時、反應性和交互性本質要求毫秒級的端到端延遲以及適當粒度任務執行。
- R2:高吞吐量。在訓練和部署中的推理過程所需的微模擬的量必需每秒數百萬任務量級的高吞吐量任務執行支持。
- 執行模型要求。儘管許多現有的並行執行系統已經在識別和優化常見計算模式上取得了很大的進步,但新興的機器學習應用還需要更大的靈活性。
- R3:動態任務創建。像蒙特卡洛樹搜索這樣的強化學習原語可能會在執行過程中基於結果或其它任務的執行過程而生成新任務。
- R4:異構任務。深度學習原語和強化學習模擬任務在執行時間和資源需求上波動巨大。為任務和資源的異構性提供的特定的系統支持是強化學習應用的關鍵。
- R5:任意數據流依賴。深度學習原語和強化學習模擬可以會產生任意的而且往往是細粒度的任務依賴(不限於整體同步並行)。
- 實用性要求
- R6:透明的容錯。容錯一直都是多數部署場景的一個關鍵要求,要在滿足高吞吐量和非決定性任務要求的同時也滿足容錯要求是具有很大挑戰性。
- R7:調試和分析。調試和性能分析是開發任何分散式應用中最耗時的部分。對於計算密集型的機器學習和強化學習應用而言更是如此。
解決方案
為滿足機器學習應用的實時性需求,作者提出了一個分散式執行框架和一個編程模型來滿足R1~R7的要求。後續將分別介紹作者是如何一次滿足這些需求的。
API和執行模型
R3-R5:為了支持執行模型需求,作者描述了一個允許將任意函數指定為可遠程執行的任務,並具有數據流依賴關係API。
- 任務的非阻塞創建。當一個任務被創建時,一個表示任務實際返回值的未來值立即返回,並且該任務非同步執行。
- 可以將任意函數調用指定為遠程任務,從而可以支持任意執行內核(R4)。任務參數可以是常規值或未來值。當參數是未來值時,新創建的任務將依賴於產生該未來值的任務,從而產生了任意DAG依賴關係(R5)。
- 任何執行都可以在完成前不受阻礙地創建新任務。因此任務吞吐量不受單個節點(R2)的帶寬限制,並且計算圖是動態構建的(R3)。
- 任務的實際返回值可以通過在恰當的將來時刻調用get方法獲得。這會阻塞到任務結束執行。
- wait函數可能會得到的未來值包括超時和一些數。當超時或請求的數時已完成時,會返回未來值的子集。
為了完善細粒度編程模型,我們使用一個數據流執行模型----只有任務的所有依賴均完成時,任務才能被執行。
分散式執行架構
作者提出的架構是一個具有兩個層次的調度框架,每個節點擁有個一個調度器負責節點內任務的調度,同時還有一個全局的調度器負責調度整個集群的調度以及一個共享的內存對象存儲負責在節點中工作之間共享文件。
中心化的控制狀態
作者設計了一個中心控制平面實現對集群的集中管理,該平面的實現主要依賴於資料庫提供的兩個特性:
1.對完整系統控制狀態的存儲2.支持部件間通信的發布-訂閱機制
共享資料庫保證高吞吐量的要求同時(R2),通過保存計算間的依賴關係和其他插件保證了可恢復性(R6)和對系統狀態的監控(R7)。
混合調度
單節點調度器和全局調度器架構保證系統的點延遲(R1),全局調度器根據全局信息將任務調度到不同節點,單節點調度器獨立處理本地新任務的調度,不需要產生的額外的通信開銷同時還能保證吞吐量。
可行性
為了證明這些API和分散式執行架構原則上可以支持R1-R7要求,作者使用上述概述的初步系統設計實現了一些簡單的示例。
延遲
基於作者實現的原形系統,當一個任務執行完返回結果之後,等待響應的返回值的進程可以在35μs內完成創建。 一旦任務執行完畢,它的返回值可以在110μs左右糾正。當進程在本地執行時,從提交執行到獲取其返回值的端到端時間約為290μs,而如果是調度到遠端執行則需1ms。
增強學習
作者用增強學習訓練一個實例玩Atari遊戲,任務交替進行並行的行為模擬和行為計算。儘管該實例具有整體同步並行計算的性質,作者基於Spark實現的實例仍比單線程的實現滿了9倍。而基於作者設計的原形系統的實現比單線程快7倍,相對Spark來說就快了63倍。
總結
最後作者提到機器學習應用程序正在不斷發展,需要具有毫秒級延遲和高吞吐量的動態數據並行性,這對現有框架構成了嚴峻的挑戰。 作者描述了支持新興的實時機器學習(ML)應用程序的要求,並提出了一個編程模型和架構設計來解決關鍵需求(R1-R5),而不會影響現有的需求(R6-R7)。 初步的概念驗證結果表明,對於具有代表性的RL應用程序來說,將會產生毫秒級的系統開銷和有效的加速。
推薦閱讀: