0
本文作者: AI研習(xí)社-譯站 | 2018-08-20 14:08 |
雷鋒網(wǎng)按:本文為AI研習(xí)社編譯的技術(shù)博客,原標(biāo)題 Intro to Distributed Deep Learning Systems,作者為 Hao Zhang 。
翻譯 | 余杭 機(jī)智的工人 江舟 校對(duì) | Lamaric 整理 | MY
什么是分布式機(jī)器學(xué)習(xí)?
通常來(lái)說(shuō),分布式機(jī)器學(xué)習(xí)(DML)是一個(gè)跨學(xué)科的領(lǐng)域,它幾乎涵蓋計(jì)算機(jī)科學(xué)的各個(gè)領(lǐng)域:理論(譬如統(tǒng)計(jì)學(xué)、學(xué)習(xí)理論、優(yōu)化論)、算法、以及機(jī)器學(xué)習(xí)核心理論(深度學(xué)習(xí)、圖模型、核方法)。在這些子領(lǐng)域中,有無(wú)數(shù)的問(wèn)題需要探索和研究。另外,分布式能夠很好地利用大數(shù)據(jù),它已經(jīng)成為目前工業(yè)界最廣泛應(yīng)用的機(jī)器學(xué)習(xí)技術(shù)。
分布式機(jī)器學(xué)習(xí)試圖解決什么樣的問(wèn)題?
為了最容易的理解 DML,我們將它分成四類研究問(wèn)題。但請(qǐng)注意,這些類別并非是相互排斥的。
如何使用統(tǒng)計(jì)學(xué)、優(yōu)化理論和算法?
由于大多數(shù)機(jī)器學(xué)習(xí)任務(wù)本質(zhì)上是在減小一組訓(xùn)練數(shù)據(jù)的「損失」,我們就更多關(guān)注以下問(wèn)題:
優(yōu)化過(guò)程需要多長(zhǎng)時(shí)間才能達(dá)到收斂?或者說(shuō),收斂速度(收斂率)是多少?
收斂解有多少?
需要多少訓(xùn)練數(shù)據(jù)才能保證良好的解?
為了研究這些問(wèn)題,研究人員采用了理論分析工具,如優(yōu)化理論或統(tǒng)計(jì)學(xué)習(xí)理論。然而,在大規(guī)模機(jī)器學(xué)習(xí)的背景下,我們給出了更多的計(jì)算資源,我們的目標(biāo)是通過(guò)并行或分布式計(jì)算技術(shù)利用額外資源來(lái)加速(即減少模型的訓(xùn)練/測(cè)試時(shí)間),我們也很想弄清楚另一組看上去相似但不同的問(wèn)題:
通過(guò)分布式或并行訓(xùn)練,我們的模型和參數(shù)是否保證在沒(méi)有加速的情況下收斂到相同的狀態(tài)?
如果他們沒(méi)有收斂到同一個(gè)狀態(tài),那么我們離原始解決方案有多遠(yuǎn),我們距離真正的最優(yōu)解決方案有多遠(yuǎn)?
達(dá)到「良好」趨同還需要哪些其他假設(shè)/條件?
如果我們將分布式訓(xùn)練和非分布式訓(xùn)練進(jìn)行比較到底能有多快?我們?nèi)绾卧u(píng)估這個(gè)?
我們?nèi)绾卧O(shè)計(jì)培訓(xùn)過(guò)程(例如數(shù)據(jù)采樣,參數(shù)更新)以確保良好的可擴(kuò)展性和良好的收斂性?
如何開(kāi)發(fā)更適合分布式設(shè)置的機(jī)器學(xué)習(xí)模型或訓(xùn)練算法
這一研究重點(diǎn)是開(kāi)發(fā)新的機(jī)器學(xué)習(xí)模型或調(diào)整(擴(kuò)展)現(xiàn)有模型以處理更大規(guī)模的數(shù)據(jù)。
如何構(gòu)建大規(guī)模 DML 應(yīng)用程序
還有一些特定的應(yīng)用問(wèn)題,如大規(guī)模圖像分類,它需要擴(kuò)展非常具體的模型/算法的研究。大多數(shù)這些解決方案可以直接部署到生產(chǎn)線中。
如何開(kāi)發(fā)并行或分布式計(jì)算機(jī)系統(tǒng)來(lái)擴(kuò)大機(jī)器學(xué)習(xí)
這一系列研究相當(dāng)直觀:如果我們的模型或算法無(wú)法在一個(gè)節(jié)點(diǎn)上完成計(jì)算工作流程,我們可以嘗試開(kāi)發(fā)分布式系統(tǒng)以使用更多節(jié)點(diǎn)(和更多的計(jì)算資源)。但是要做到這一點(diǎn),我們需要面對(duì)很多系統(tǒng)問(wèn)題:
一致性:如果多個(gè)節(jié)點(diǎn)同時(shí)朝著一個(gè)目標(biāo)努力,我們?nèi)绾未_保它們的一致?例如,如果他們一起解決一個(gè)優(yōu)化問(wèn)題,但卻有著數(shù)據(jù)集的不同分區(qū)呢?
容錯(cuò):如果我們將工作負(fù)載分配到 1000 個(gè)計(jì)算節(jié)點(diǎn)的集群,那么 1000 個(gè)節(jié)點(diǎn)中的一個(gè)崩潰會(huì)怎么樣?有沒(méi)有辦法能解決它而不只是從任務(wù)的最開(kāi)始重新啟動(dòng)?
通信:機(jī)器學(xué)習(xí)涉及大量 I / O 操作(例如磁盤(pán)讀寫(xiě))和數(shù)據(jù)處理過(guò)程 - 我們是否可以設(shè)計(jì)存儲(chǔ)系統(tǒng),以便為不同類型的環(huán)境實(shí)現(xiàn)更快的 I / O 和非阻塞數(shù)據(jù)處理程序(例如,單節(jié)點(diǎn)本地磁盤(pán),分布式文件系統(tǒng),CPU I / O,GPU I / O 等等)?
資源管理:構(gòu)建計(jì)算機(jī)集群的成本非常高,因此集群通常由許多用戶共享。我們應(yīng)該如何管理集群并適當(dāng)?shù)胤峙滟Y源以滿足每個(gè)人的要求,同時(shí)最大限度地提高使用率?
編程模型:我們是否應(yīng)該按照與非分布式機(jī)器學(xué)習(xí)模型/算法相同的方式對(duì)分布式機(jī)器學(xué)習(xí)模型/算法進(jìn)行編程?我們能否設(shè)計(jì)一種需要更少編碼并提高效率的新的編程模型?我們可以用單節(jié)點(diǎn)方式編程,同時(shí)使用分布式計(jì)算技術(shù)自動(dòng)放大程序嗎?
這就是我們專注于 Petuum 研究方向的方面。事實(shí)上,我們今天使用的大部分主流 ML 軟件都位于同一方面(例如 GraphLab,TensorFlow 等)。
了解分布式深度學(xué)習(xí)
分布式深度學(xué)習(xí)是通用分布式機(jī)器學(xué)習(xí)的一個(gè)子領(lǐng)域,由于其在各種應(yīng)用中的有效性,最近變得非常突出。在深入分析深度學(xué)習(xí)的細(xì)節(jié)及其解決的問(wèn)題之前,我們應(yīng)該定義一些重要的術(shù)語(yǔ):數(shù)據(jù)并行性和模型并行性。
數(shù)據(jù)并行性
數(shù)據(jù)并行性是一種通過(guò)分區(qū)數(shù)據(jù)啟用的并行化技術(shù)。在數(shù)據(jù)并行分布式計(jì)算中,我們首先將數(shù)據(jù)劃分為幾個(gè)分區(qū),其中分區(qū)的數(shù)量等于工作機(jī)器的數(shù)量(即計(jì)算節(jié)點(diǎn))。然后,我們讓每個(gè)工作者擁有一個(gè)獨(dú)立的分區(qū),讓他們對(duì)該數(shù)據(jù)進(jìn)行計(jì)算。由于我們有多個(gè)節(jié)點(diǎn)并行掃描數(shù)據(jù),因此我們應(yīng)該能夠掃描比使用單個(gè)節(jié)點(diǎn)時(shí)更多的數(shù)據(jù) - 我們通過(guò)分布式并行計(jì)算提高吞吐量。
在分布式機(jī)器學(xué)習(xí)中,我們的目標(biāo)是加速使用多個(gè)節(jié)點(diǎn)的模型訓(xùn)練的收斂速度,應(yīng)用數(shù)據(jù)并行性是相當(dāng)直觀的:我們讓每個(gè)工作機(jī)在自己的數(shù)據(jù)分區(qū)上執(zhí)行訓(xùn)練(即隨機(jī)梯度下降)并生成一組其上的參數(shù)更新(即梯度)。然后,我們讓所有節(jié)點(diǎn)通過(guò)網(wǎng)絡(luò)通信同步其參數(shù)狀態(tài),直到達(dá)成一致。只要同步不花費(fèi)太多時(shí)間并且我們得到較單節(jié)點(diǎn)結(jié)果的改進(jìn),我們就實(shí)現(xiàn)了目標(biāo)!從本質(zhì)上講,這就是 Google 深度學(xué)習(xí)系統(tǒng) DistBelief 的工作原理。
模型并行性
與數(shù)據(jù)并行性相比,模型并行性是一個(gè)更復(fù)雜和模糊的概念。一般來(lái)說(shuō),在模型并行性中,我們嘗試對(duì)機(jī)器學(xué)習(xí)模型本身進(jìn)行分區(qū),以將工作負(fù)載分配給多個(gè)工作機(jī),而不是對(duì)數(shù)據(jù)進(jìn)行分區(qū)。例如,假設(shè)我們正在解決矩陣分解問(wèn)題,其中矩陣非常龐大,我們想要學(xué)習(xí)這個(gè)巨大矩陣的每個(gè)參數(shù)。為了要應(yīng)用模型并行性,我們必須將矩陣劃分為許多小塊(子矩陣),然后讓每個(gè)工作機(jī)處理一些小塊。這樣,如果一個(gè)節(jié)點(diǎn)上的 RAM 不足以存儲(chǔ)矩陣中的所有參數(shù),我們就能夠利用多個(gè)節(jié)點(diǎn)的額外 RAM 起到杠桿作用。由于不同的節(jié)點(diǎn)具有映射到矩陣的不同塊的不同工作負(fù)載,我們因此能在并行計(jì)算時(shí)獲得加速。
問(wèn)題是,我們應(yīng)該如何劃分模型?由于我們有這么多的機(jī)器學(xué)習(xí)模型,每個(gè)模型都有自己的特征和表示,因此就沒(méi)有實(shí)現(xiàn)模型并行的主要方法。
分布式機(jī)器學(xué)習(xí)中的問(wèn)題
......
想要繼續(xù)閱讀,請(qǐng)移步至我們的AI研習(xí)社社區(qū):https://club.leiphone.com/page/TextTranslation/733
更多精彩內(nèi)容盡在 AI 研習(xí)社。
不同領(lǐng)域包括計(jì)算機(jī)視覺(jué),語(yǔ)音語(yǔ)義,區(qū)塊鏈,自動(dòng)駕駛,數(shù)據(jù)挖掘,智能控制,編程語(yǔ)言等每日更新。
雷鋒網(wǎng)雷鋒網(wǎng)(公眾號(hào):雷鋒網(wǎng)(公眾號(hào):雷鋒網(wǎng))
雷峰網(wǎng)原創(chuàng)文章,未經(jīng)授權(quán)禁止轉(zhuǎn)載。詳情見(jiàn)轉(zhuǎn)載須知。