原文: Distributed Deep Learning, Part 1: An Introduction to Distributed Training of Neural Networks
作者:Alex Black、Vyacheslav Kokorin
翻譯:KK4SBB 責(zé)編: 何永燦
本文是分布式訓(xùn)練神經(jīng)網(wǎng)絡(luò)模型三篇系列文章的第一篇。
在第一篇文章,我們首先了解一下如何使用GPU分布式計(jì)算來顯著提高深度學(xué)習(xí)模型的訓(xùn)練速度,以及會(huì)討論其中面臨的一些挑戰(zhàn)和當(dāng)前的研究方向。我們還會(huì)討論在何種場景下適合(或不適合)采用分布式算法來訓(xùn)練神經(jīng)網(wǎng)絡(luò)模型。
第二篇文章,我們會(huì)從Apache Spark的網(wǎng)絡(luò)模型訓(xùn)練工具Deeplearning4j入手,來討論其實(shí)現(xiàn)細(xì)節(jié),以及提供一個(gè)端到端訓(xùn)練的實(shí)際案例。
最后,我們深入探討Deeplearning4j的Spark實(shí)現(xiàn),并且討論一些在最大化訓(xùn)練性能的過程中,所遇到的性能和架構(gòu)設(shè)計(jì)上的挑戰(zhàn)問題。我們也會(huì)討論Spark如何與Deeplearning4j所使用的本地高性能計(jì)算函數(shù)庫交互協(xié)作。
概述
在大數(shù)據(jù)集上訓(xùn)練的現(xiàn)代神經(jīng)網(wǎng)絡(luò)模型在許許多多領(lǐng)域都取得了顯著的效果,從語音和圖像識(shí)別到自然語言處理,再到工業(yè)界的應(yīng)用,比如欺詐檢測和推薦系統(tǒng)。但是這些神經(jīng)網(wǎng)絡(luò)的訓(xùn)練過程非常耗時(shí)。盡管近些年GPU的硬件技術(shù)、網(wǎng)絡(luò)模型結(jié)構(gòu)和訓(xùn)練方法均取得了很大的突破,但是單機(jī)訓(xùn)練耗時(shí)過久的事實(shí)仍無法回避。好在我們并不局限于單機(jī)訓(xùn)練:人們投入了大量的工作和研究來提升分布式訓(xùn)練神經(jīng)網(wǎng)絡(luò)模型的效率。
我們首先介紹兩種并行化/分布式訓(xùn)練的方法。

在 模型并行化( model parallelism ) 方法里,分布式系統(tǒng)中的不同機(jī)器負(fù)責(zé)單個(gè)網(wǎng)絡(luò)模型的不同部分 —— 例如,神經(jīng)網(wǎng)絡(luò)模型的不同網(wǎng)絡(luò)層被分配到不同的機(jī)器。
在 數(shù)據(jù)并行化( data parallelism ) 方法里,不同的機(jī)器有同一個(gè)模型的多個(gè)副本,每個(gè)機(jī)器分配到數(shù)據(jù)的一部分,然后將所有機(jī)器的計(jì)算結(jié)果按照某種方式合并。
當(dāng)然,這些方法并不是完全互斥的。假設(shè)有一個(gè)多GPU集群系統(tǒng)。我們可以在同一臺(tái)機(jī)器上采用模型并行化(在GPU之間切分模型),在機(jī)器之間采用數(shù)據(jù)并行化。

盡管在實(shí)際應(yīng)用中模型并行化的效果還不錯(cuò),數(shù)據(jù)并行化卻是多數(shù)分布式系統(tǒng)的首選,后者投入了大量的研究。一方面,數(shù)據(jù)并行化在實(shí)現(xiàn)難度、容錯(cuò)率和集群利用率方面都優(yōu)于模型并行化。分布式系統(tǒng)背景下的模型并行化挺有意思,有不少優(yōu)勢(例如擴(kuò)展性),但在本文中我們主要討論數(shù)據(jù)并行化。
數(shù)據(jù)并行化
數(shù)據(jù)并行化式的分布式訓(xùn)練在每個(gè)工作節(jié)點(diǎn)上都存儲(chǔ)一個(gè)模型的備份,在各臺(tái)機(jī)器上處理數(shù)據(jù)集的不同部分。數(shù)據(jù)并行化式訓(xùn)練方法需要組合各個(gè)工作節(jié)點(diǎn)的結(jié)果,并且在節(jié)點(diǎn)之間同步模型參數(shù)。文獻(xiàn)中討論了各種方法,各種方法之間的主要區(qū)別在于:
參數(shù)平均法 vs. 更新式方法
同步方法 vs. 異步方法
中心化同步 vs. 分布式同步
目前Deeplearning4j實(shí)現(xiàn)的方式是同步的參數(shù)平均法。
參數(shù)平均
參數(shù)平均是最簡單的一種數(shù)據(jù)并行化。若采用參數(shù)平均法,訓(xùn)練的過程如下所示:
基于模型的配置隨機(jī)初始化網(wǎng)絡(luò)模型參數(shù)
將當(dāng)前這組參數(shù)分發(fā)到各個(gè)工作節(jié)點(diǎn)
在每個(gè)工作節(jié)點(diǎn),用數(shù)據(jù)集的一部分?jǐn)?shù)據(jù)進(jìn)行訓(xùn)練
將各個(gè)工作節(jié)點(diǎn)的參數(shù)的均值作為全局參數(shù)值
若還有訓(xùn)練數(shù)據(jù)沒有參與訓(xùn)練,則繼續(xù)從第二步開始
上述第二步到第四步的過程如下圖所示。在圖中,W表示神經(jīng)網(wǎng)絡(luò)模型的參數(shù)(權(quán)重值和偏置值)。下標(biāo)表示參數(shù)的更新版本,需要在各個(gè)工作節(jié)點(diǎn)加以區(qū)分。

事實(shí)上,很容易證明參數(shù)平均法的結(jié)果在數(shù)學(xué)意義上等同于用單個(gè)機(jī)器進(jìn)行訓(xùn)練;每個(gè)工作節(jié)點(diǎn)處理的數(shù)據(jù)量是相等的。數(shù)學(xué)的證明過程如下。
假設(shè)該集群有n個(gè)工作節(jié)點(diǎn),每個(gè)節(jié)點(diǎn)處理m個(gè)樣本,則總共是對nxm個(gè)樣本求均值。如果我們在單臺(tái)機(jī)器上處理所有nxm個(gè)樣本,學(xué)習(xí)率設(shè)置為α,權(quán)重更新的方程為: