作者:MapR數據科學家孟東

深度學習是一類機器學習算法,可以學習多個數據級別的表示層次,潛在地降低了可以解決難題的模型生產難度。在最困難的問題中,這種下降表現爲可以做什麼的進步。在更簡單的問題中,可能會導致性能提高或建模過程更簡單。現在許多深度學習應用已經超越了人類的表現,如圖像識別或棋類競技。還有更多的其他著名使用案例,使得深度學習成爲了這些最有能力系統的一部分,包括語音識別,文本識別,機器翻譯和自動駕駛。

做這些表現的很大部分是源於機器學習數學運算的不斷進展,至少有一部分是由於原始計算性能的提高以及使用該性能技術的改進。

許多企業已經開始探索以分佈式培訓和服務於集羣的深度學習的方法。許多人選擇構建一個在研究或開發環境中運行良好的專用GPU HPC集羣,但一個共同的問題是,隨着培訓數據的準備,培訓和服務,數據必須在集羣之間來回移動。通常情況下,有多個模型訓練集羣會使數據運動問題變得更糟。這種數據運動本身就是一項巨大的成本,但是將數據存儲在多個位置會導致管理用於訓練深度學習模型的數據和管理的研究、開發與生產之間的模型的高度複雜性。

本文將概述一些我們用來使分佈式深度學習更容易培訓和服務的技術。我們在包含異構GPU和CPU資源的環境中執行此操作。一個關鍵的結果是分佈式深度學習培訓工作流程可以變得更簡單。還將介紹如何利用流式架構在GPU上實現全局實時深度學習應用。深度學習模型的分佈式培訓我們發現以下功能對於構建更簡單的機器學習和服務管道來說,既是必要也是充分的:無論是存儲在流,表格還是文件中的所有數據都可以使用傳統的基於目錄的路徑名稱樹進行組織和訪問。所有數據都以完全分佈式存儲,但可以從任何授權的計算機上使用相同的路徑名訪問。所有數據都可以通過標準的POSIX文件操作訪問。卷可用於允許目錄結構,根據這些目錄內容的存儲位置進行管理。所有數據訪問的性能都達到或接近硬件限制。相關限制將是非本地數據的網絡帶寬和計算過程本地數據的本地磁盤速度。數據要求

我們提出的分佈式深度學習解決方案有三層,底層是數據層,由數據服務管理,使你能夠爲培訓數據創建專用卷,併爲組織提供將深度學習開發,培訓和部署更貼近其數據的機會。數據層應該支持安全,快照和鏡像等企業功能,以確保你的數據在企業環境中的安全性和高度可管理性。

中間層是編排層,建議使用Kubernetes來管理GPU/CPU資源,並以pod爲單位啓動參數服務器和培訓工作人員進行深度學習任務。中間層還應該支持異構集羣,你可以使用CPU節點爲模型提供服務,同時使用GPU節點來訓練模式。高級功能將支持使用不同GPU卡標記節點的功能,以便你可以在較舊的GPU卡上啓動優先級較低的任務,並在較新的卡上啓動優先級較高的任務。

頂層是應用層。在這一層,支持深度學習工具(如Tensorflow)用於利用模型輸出,然後將其放入部署中。一個最佳設計是將存儲在相同計算節點的網絡鄰域中的容器中的特定分佈式訓練作業的訓練數據存儲,以減少網絡擁塞。需要支持像Docker這樣的容器技術和Kubernetes等編排技術,以分佈式的方式部署Tensorflow等深度學習工具。通過相同的概念,你可以爲CPU/GPU計算的目的共同定位數據。通過水平擴展的底層數據,數據可以通過高速數據流連續供應給GPU,並防止計算資源不足。部署應用

在我們提出的分佈式深度學習解決方案中,通常有5個步驟將你的深度學習應用投入生產。

1.修改Tensorflow應用以添加分佈式服務器,有許多方法可以在Tensorflow中啓用數據並行。在Tensorflow中,同步訓練和graph replication是更實用的方法,例如,我們可以添加如下代碼片段:

其中ps/worker hostname, job_name, task_index可以通過用於啓動Kubernetes pods的YAML文件傳入。也可以將代碼放在分佈式數據系統中,並在啓動Kubernetes作業時將其安裝到多個pods中。

2.準備培訓數據並將其加載到分佈式數據系統上,最好的演示方法是爲不同的深度學習應用創建專用邏輯卷,以便更好地管理它。

3.選擇要使用的容器鏡像,例如,我們使用最新的Tensorflow GPU鏡像,這些容器將受益於對完全分佈式數據系統的本地訪問。

4.編寫一個YAML文件來創建Kubernetes作業,我們要安裝所需的Nvidia庫,Tensorflow應用程序,持久性和檢查點的目標文件夾以及使用的訓練數據。在這裏,我們可以輕鬆創建掛載到分佈式文件系統卷的持久性卷,並授予多個Pod訪問連接到此持久性卷的持久性卷聲明。

5.如果結果令人滿意,請檢查結果是否持續,並進一步部署模型。額外的挑戰

實時深度學習訓練和推理的部分挑戰在於快速,可靠的數據分佈。隨着廣播技術的進步,我們將繼續提高視頻質量,這也促使深度學習技術迎頭趕上。諸如壓縮感知(compressed sensing)之類的技術可以潛在地用於減少流端的負載。深度學習模型可用於重構低維空間的特徵,從而使實時視頻應用中的壓縮感知成爲可能。

此外,通過分佈式培訓,與Yarn和Mesos相比,Kubernetes更適合託管在線應用。

相關文章