歡迎光臨
每天分享高質量文章

PaddlePaddle Fluid:彈性深度學習在Kubernetes中的實踐

兩個開源社區PaddlePaddle(深度學習框架源於百度)和Kubernetes(最著名的容器化應用程式調度器)在PaddlePaddle的新版本Fluid中發佈了彈性深度學習(EDL)功能。

Fluid EDL包括一個Kubernetes控制器,PaddlePaddle自動縮放器[1],根據集群中的空閑硬體資源改變分佈式作業的行程數量,以及PaddlePaddle設計文件[2]中描述的新的容錯架構。

工業深度學習的挑戰之一是需要大量的計算能力。研究實驗室和公司經常構建由SLURM,MPI或SGE管理的GPU集群。這些集群要麼運行一個提交的作業(如果它需要的比閑置的資源要少)或者將作業掛起一段難以預估的時間。這種方法有其缺點:在有99個可用節點和一個需要100個提交作業的例子中,作業必須等待而不能使用任何可用節點。Fluid與Kubernetes一起工作,通過幫助盡可能早地揭示潛在的演算法問題,為缺乏最佳資源的彈性深度學習工作提供動力。

另一個挑戰是,工業用戶傾向於將深度學習作業作為完整資料管道的子集階段,包括Web服務器和日誌採集器。這種通用集群需要基於優先級的彈性調度。這使得在Web服務器作業中運行更多的行程成為可能,而在網絡開銷較高的時間段內深度學習則更少,然後在網絡流量較低時優先進行深度學習。Fluid和Kubernetes的API服務進行對話,以瞭解全域性的情況,並協調與各種工作有關的行程的數量。

面對這兩種挑戰,PaddlePaddle作業都可以輕鬆應對行程數量忽高忽低的變化。我們通過實現新設計來實現這一點,除了之前的博客文章[3]中介紹的舊PaddlePaddle體系結構之外,還引入了一個主流程。在新的設計中,只要有三個行程還在工作中,就會繼續下去。在所有行程都被殺死的極端情況下,作業可以多載並恢復。

我們測試了Fluid EDL的兩種用例:

  1. Kubernetes集群只運行PaddlePaddle作業;

  2. 集群運行PaddlePaddle和Nginx作業。

在第一個測試中,我們開始了20個PaddlePaddle作業,間隔10秒。每個作業有60個trainers和10個引數服務行程,並將持續數小時。我們重覆實驗20次:關閉Fluid EDL 10次,打開Fluid EDL 10次。在圖一中,實線對應於前10個實驗,其餘的是虛線。在圖的上半部分,我們看到未處理作業的數量在沒有EDL的情況下單調遞增。但是,當EDL打開時,資源將平均分配給所有作業。Fluid EDL殺死了一些現有的行程,為新的其他任務騰出空間,併在晚些時候任務開始運行。在這兩種情況下,集群都被平等利用(見圖的下半部分)。

在第二個測試中,每個實驗都運行了400個Nginx Pods,其優先級高於6個PaddlePaddle作業。最初,每個PaddlePaddle工作有15個trainers和10個引數服務。我們每90秒殺死100個Nginx Pods,直到剩下100個,然後我們開始將Nginx工作的數量每90秒增加100個。圖2的上半部分顯示了這個過程。圖中的中間顯示,Fluid EDL通過減少Nginx Pods來自動啟動一些PaddlePaddle行程,併在稍後增加Nginx Pods來殺死PaddlePaddle行程。結果,該集群維持在90%左右的利用率,如圖所示。當Fluid EDL被關閉時,沒有PaddlePaddle行程自動增加,並且利用率隨著Nginx Pods數量的變化而波動。

我們繼續在FluidEDL上工作,並歡迎留言和加入我們。訪問PaddlePaddle repo[4],您可以在其中找到設計文件[5],簡單的教程[6]和實驗細節[7]。

相關鏈接:

  1. https://github.com/PaddlePaddle/cloud/tree/develop/doc/autoscale

  2. https://github.com/PaddlePaddle/Paddle/blob/develop/doc/design/cluster_train/README.md

  3. http://blog.kubernetes.io/2017/02/run-deep-learning-with-paddlepaddle-on-kubernetes.html

  4. https://github.com/PaddlePaddle/cloud

  5. https://github.com/PaddlePaddle/cloud/blob/develop/doc/autoscale/README.md

  6. https://github.com/PaddlePaddle/cloud/blob/develop/doc/autoscale/example/autoscale.md

  7. https://github.com/PaddlePaddle/cloud/tree/develop/doc/autoscale/experiment

原文鏈接:http://blog.kubernetes.io/2017/12/paddle-paddle-fluid-elastic-learning.html

基於Kubernetes的容器雲平臺實踐培訓

本次培訓包含:Kubernetes核心概念;Kubernetes集群的安裝配置、運維管理、架構規劃;Kubernetes組件、監控、網絡;針對於Kubernetes API接口的二次開發;DevOps基本理念;Docker的企業級應用與運維等,點擊識別下方二維碼加微信好友瞭解具體培訓內容

點擊閱讀原文鏈接即可報名。
赞(0)

分享創造快樂