通向分散式深度學習系統
本文為 AI 研習社編譯的技術博客,原標題為 Intro to Distributed Deep Learning Systems ,作者 Hao Zhang 。
翻譯 | 餘杭 機智的工人 江舟 校對 | Lamaric 整理 | MY
什麼是分散式機器學習?
通常來說,分散式機器學習(DML)是一個跨學科的領域,它幾乎涵蓋計算機科學的各個領域:理論(譬如統計學、學習理論、優化論)、演算法、以及機器學習核心理論(深度學習、圖模型、核方法)。在這些子領域中,有無數的問題需要探索和研究。另外,分散式能夠很好地利用大數據,它已經成為目前工業界最廣泛應用的機器學習技術。
分散式機器學習試圖解決什麼樣的問題?
為了最容易的理解 DML,我們將它分成四類研究問題。但請注意,這些類別並非是相互排斥的。
1. 如何使用統計學、優化理論和演算法?
由於大多數機器學習任務本質上是在減小一組訓練數據的損失」,我們就更多關注以下問題:
優化過程需要多長時間才能達到收斂?或者說,收斂速度(收斂率)是多少?
收斂解有多少?
需要多少訓練數據才能保證良好的解?
為了研究這些問題,研究人員採用了理論分析工具,如優化理論 (https://en.wikipedia.org/wiki/Mathematical_optimization) 或 統計學習理論(https://en.wikipedia.org/wiki/Statistical_learning_theory)。然而,在大規模機器學習的背景下,我們給出了更多的計算資源,我們的目標是通過並行或分散式計算技術利用額外資源來加速(即減少模型的訓練/測試時間),我們也很想弄清楚另一組看上去相似但不同的問題:
通過分散式或並行訓練,我們的模型和參數是否保證在沒有加速的情況下收斂到相同的狀態?
如果他們沒有收斂到同一個狀態,那麼我們離原始解決方案有多遠,我們距離真正的最優解決方案有多遠?
達到「良好」趨同還需要哪些其他假設/條件?
如果我們將分散式訓練和非分散式訓練進行比較到底能有多快?我們如何評估這個?
我們如何設計培訓過程(例如數據採樣,參數更新)以確保良好的可擴展性和良好的收斂性?
2. 如何開發更適合分散式設置的機器學習模型或訓練演算法
這一研究重點是開發新的機器學習模型或調整(擴展)現有模型以處理更大規模的數據。
3. 如何構建大規模 DML 應用程序
還有一些特定的應用問題,如大規模圖像分類(https://en.wikipedia.org/wiki/Computer_vision#Recognition),它需要擴展非常具體的模型/演算法的研究。大多數這些解決方案可以直接部署到生產線中。
4. 如何開發並行或分散式計算機系統來擴大機器學習
這一系列研究相當直觀:如果我們的模型或演算法無法在一個節點上完成計算工作流程,我們可以嘗試開發分散式系統以使用更多節點(和更多的計算資源)。但是要做到這一點,我們需要面對很多系統問題:
一致性:如果多個節點同時朝著一個目標努力,我們如何確保它們的一致?例如,如果他們一起解決一個優化問題,但卻有著數據集的不同分區呢?
容錯(https://en.wikipedia.org/wiki/Fault_tolerance):如果我們將工作負載分配到 1000 個計算節點的集群,那麼 1000 個節點中的一個崩潰會怎麼樣?有沒有辦法能解決它而不只是從任務的最開始重新啟動?
通信:機器學習涉及大量 I / O 操作(例如磁碟讀寫)和數據處理過程 - 我們是否可以設計存儲系統,以便為不同類型的環境實現更快的 I / O 和非阻塞數據處理程序(例如,單節點本地磁碟,分散式文件系統,CPU I / O,GPU I / O 等等)?
資源管理:構建計算機集群(https://en.wikipedia.org/wiki/Computer_cluster)的成本非常高,因此集群通常由許多用戶共享。我們應該如何管理集群並適當地分配資源以滿足每個人的要求,同時最大限度地提高使用率?
編程模型:我們是否應該按照與非分散式機器學習模型/演算法相同的方式對分散式機器學習模型/演算法進行編程?我們能否設計一種需要更少編碼並提高效率的新的編程模型?我們可以用單節點方式編程,同時使用分散式計算技術自動放大程序嗎?
這就是我們專註於 Petuum 研究方向的方面。事實上,我們今天使用的大部分主流 ML 軟體都位於同一方面(例如 GraphLab,TensorFlow 等)。
了解分散式深度學習
分散式深度學習是通用分散式機器學習的一個子領域,由於其在各種應用中的有效性,最近變得非常突出。在深入分析深度學習的細節及其解決的問題之前,我們應該定義一些重要的術語:數據並行性和模型並行性。
1. 數據並行性
數據並行性是一種通過分區數據啟用的並行化技術。在數據並行分散式計算中,我們首先將數據劃分為幾個分區,其中分區的數量等於工作機器的數量(即計算節點)。然後,我們讓每個工作者擁有一個獨立的分區,讓他們對該數據進行計算。由於我們有多個節點並行掃描數據,因此我們應該能夠掃描比使用單個節點時更多的數據 - 我們通過分散式並行計算提高吞吐量。
在分散式機器學習中,我們的目標是加速使用多個節點的模型訓練的收斂速度,應用數據並行性是相當直觀的:我們讓每個工作機在自己的數據分區上執行訓練(即隨機梯度下降)並生成一組其上的參數更新(即梯度)。然後,我們讓所有節點通過網路通信同步其參數狀態,直到達成一致。只要同步不花費太多時間並且我們得到較單節點結果的改進,我們就實現了目標!從本質上講,這就是 Google 深度學習系統 DistBelief 的工作原理。
2. 模型並行性
與數據並行性相比,模型並行性是一個更複雜和模糊的概念。一般來說,在模型並行性中,我們嘗試對機器學習模型本身進行分區,以將工作負載分配給多個工作機,而不是對數據進行分區。例如,假設我們正在解決矩陣分解問題,其中矩陣非常龐大,我們想要學習這個巨大矩陣的每個參數。為了要應用模型並行性,我們必須將矩陣劃分為許多小塊(子矩陣),然後讓每個工作機處理一些小塊。這樣,如果一個節點上的 RAM 不足以存儲矩陣中的所有參數,我們就能夠利用多個節點的額外 RAM 起到槓桿作用。由於不同的節點具有映射到矩陣的不同塊的不同工作負載,我們因此能在並行計算時獲得加速。
問題是,我們應該如何劃分模型?由於我們有這麼多的機器學習模型,每個模型都有自己的特徵和表示,因此就沒有實現模型並行的主要方法。
分散式機器學習中的問題
當訓練數據的大小更大時,數據並行性會變得非常有效,因為我們可以使用額外的節點更快地掃描數據。模型並行性更適用於模型大小對於一個節點來說太大的情況,因為它允許我們分割模型並在多個節點上利用額外的內存。
理想情況下,在分散式計算中,我們希望獲得與我們分配的機器數量一樣多的加速(我們通常將此度量稱為可伸縮性)。詳細地說,如果我們分配 K 台機器,並且我們的系統在單位時間內比單個節點上的數據掃描速度快 K 倍,那麼我們的系統具有可擴展性 K 或線性可擴展性。線性可擴展性是這些系統的理想選擇。
但是,由於同步任務導致的開銷,在分散式計算機集群上完成一次訓練迭代通常比在單個節點上完成一次迭代需要更長的時間。我們必須花費額外的時間在計算結束時跨多個節點同步(網路通信),以確保機器學習訓練任務的收斂。實際上,同步過程可以與計算一樣長,甚至更長。
為什麼?一個主要原因是集群中的某些工作節點運行速度比其他節點慢(因為硬體更便宜或更舊),並且為了與它們同步,更快的工作節點必須等到慢的工作節點完成他們的計算任務 - 系統性能始終受到較慢工作節點的限制。在這些情況下,將 K 機器放在一起可能會導致負面的可擴展性,這極大地浪費了時間和金錢。
在以後的文章中,我們將討論 Google 如何開始使用參數伺服器來解決這個問題,以及 Petuum 如何開發出解決同步問題的原理方法。
這是一篇供你們獲取更多相關知識的論文:
More Effective Distributed ML via a Stale Synchronous Parallel Parameter Server, by Qirong Ho, James Cipar, Henggang Cui, Seunghak Lee, Jin Kyu Kim, Phillip B. Gibbons, Garth A. Gibson, Greg Ganger, Eric P. Xing
論文鏈接:http://www.petuum.com/pdf/SSPTable_NIPS2013.pdf
我會推薦以下幾篇論文:
Asymptotically Exact, Embarrassingly Parallel MCMC, by Willie Neiswanger, Chong Wang, Eric P. Xing. UAI 2014.
論文鏈接:https://arxiv.org/abs/1311.4780
LightLDA: Big Topic Models on Modest Compute Clusters, by Jinhui Yuan, Fei Gao, Qirong Ho, Wei Dai, Jinliang Wei, Xun Zheng, Eric P. Xing, Tie-yan Liu, Wei-Ying Ma. WWW 2015.
論文鏈接:https://arxiv.org/abs/1412.1576
SaberLDA: Sparsity-Aware Learning of Topic Models on GPUs, by Kaiwei Li, Jianfei Chen, Wenguang Chen, Jun Zhu. ASPLOS 2017.
論文鏈接:https://arxiv.org/abs/1610.02496
在 NIPS 2012 以及 2013 ICML 上發表的關於大規模分散式深度學習系統的兩篇亮點論文,第一篇論文是關於谷歌內部第一代深度學習平台,第二篇論文的作者是 Adam Coates,他目前負責百度在矽谷的研究工作。兩篇文章的核心思想是通過使用更多的計算組件來增大深度學習的計算速度——第一篇論文是數據平行,第二篇文論是通過模型平行。
Large Scale Distributed Deep Networks,by Jeffrey Dean, Greg Corrado, Rajat Monga, Kai Chen, Matthieu Devin, Mark Mao, Marc』aurelio Ranzato, Andrew Senior, Paul Tucker, Ke Yang, Quoc V. Le, Andrew Y. Ng.
論文鏈接https://static.googleusercontent.com/media/research.google.com/en//archive/large_deep_networks_nips2012.pdf
Deep Learning with COTS HPC, Adam Coates, Brody Huval, Tao Wang, David Wu, Bryan Catanzaro, Andrew Ng. ICML 2013.
論文鏈接:http://proceedings.mlr.press/v28/coates13.pdf
如果你對模型平行特別感興趣,這是兩篇亮點論文:
STRADS: A Distributed Framework for Scheduled Model Parallel Machine Learning, by Jin Kyu Kim, Qirong Ho, Seunghak Lee, Xun Zheng, Wei Dai, Garth A. Gibson, Eric P. Xing. EuroSys 2016.
論文鏈接:http://www.petuum.com/pdf/strads-kim-eurosys16_cr.pdf
Device Placement Optimization with Reinforcement Learning, by Azalia Mirhoseini Lt ; / RTI
論文鏈接:https://arxiv.org/abs/1706.04972
https://medium.com/@Petuum/intro-to-distributed-deep-learning-systems-a2e45c6b8e7


※攻擊 AI 模型之 FGSM 演算法
※基於 Keras 對深度學習模型進行微調的全面指南 Part 2
TAG:AI研習社 |