溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

如何進(jìn)行大數(shù)據(jù)分布式的深度學(xué)習(xí)

發(fā)布時(shí)間:2022-01-15 13:46:10 來源:億速云 閱讀:323 作者:柒染 欄目:大數(shù)據(jù)

本篇文章為大家展示了如何進(jìn)行大數(shù)據(jù)分布式的深度學(xué)習(xí),內(nèi)容簡明扼要并且容易理解,絕對能使你眼前一亮,通過這篇文章的詳細(xì)介紹希望你能有所收獲。

為什么要進(jìn)行分布式地訓(xùn)練?

一方面使不得已而為之,比如:數(shù)據(jù)量太大,數(shù)據(jù)無法加載或者模型太復(fù)雜,一個GPU放不下參數(shù)。 另一方面,可以使用分布式提高訓(xùn)練速度

分布式訓(xùn)練策略

  1. 模型并行:用于模型過大的情況,需要把模型的不同層放在不同節(jié)點(diǎn)或者GPU上,計(jì)算效率不高,不常用。

  2. 數(shù)據(jù)并行:把數(shù)據(jù)分成多份,每份數(shù)據(jù)單獨(dú)進(jìn)行前向計(jì)算和梯度更新,效率高,較常用。

分布式并行模式

  1. 同步訓(xùn)練:所有進(jìn)程前向完成后統(tǒng)一計(jì)算梯度,統(tǒng)一反向更新。

  2. 異步訓(xùn)練:每個進(jìn)程計(jì)算自己的梯度,并拷貝主節(jié)點(diǎn)的參數(shù)進(jìn)行更新,容易造成錯亂,陷入次優(yōu)解。

分布式訓(xùn)練架構(gòu)

Parameter Server 參數(shù)服務(wù)器

集群中有一個parameter server和多個worker,server需要等待所有節(jié)點(diǎn)計(jì)算完畢統(tǒng)一計(jì)算梯度,在server上更新參數(shù),之后把新的參數(shù)廣播給worker。 如何進(jìn)行大數(shù)據(jù)分布式的深度學(xué)習(xí)

基本流程如下:

  1. woker加載數(shù)據(jù),進(jìn)行訓(xùn)練,更新梯度

  2. 將梯度上傳到server

  3. server進(jìn)行聚合梯度并且更新參數(shù)

  4. woker進(jìn)行拉取最新的參數(shù),進(jìn)行下一次訓(xùn)練

Ring All-Reduce

只有worker,所有worker形成一個閉環(huán),接受上家的梯度,再把累加好的梯度傳給下家,最終計(jì)算完成后更新整個環(huán)上worker的梯度(這樣所有worker上的梯度就相等了),然后求梯度反向傳播。比PS架構(gòu)要高效。

  如何進(jìn)行大數(shù)據(jù)分布式的深度學(xué)習(xí)

算法主要分兩步:

  1. scatter-reduce:會逐步交換彼此的梯度并融合,最后每個 GPU 都會包含完整融合梯度的一部分。 如何進(jìn)行大數(shù)據(jù)分布式的深度學(xué)習(xí)

  2. 如何進(jìn)行大數(shù)據(jù)分布式的深度學(xué)習(xí)

  3. 如何進(jìn)行大數(shù)據(jù)分布式的深度學(xué)習(xí)

  4. allgather:GPU 會逐步交換彼此不完整的融合梯度,最后所有 GPU 都會得到完整的融合梯度 如何進(jìn)行大數(shù)據(jù)分布式的深度學(xué)習(xí)

#分布式深度學(xué)習(xí)框架

Elephas https://github.com/maxpumperla/elephas

Elephas是Keras的擴(kuò)展,它使您可以使用Spark大規(guī)模運(yùn)行分布式深度學(xué)習(xí)模型。 原理上,Elephas如下圖所示: 如何進(jìn)行大數(shù)據(jù)分布式的深度學(xué)習(xí)

Elephas使用Spark的RDD和Dataframe實(shí)現(xiàn)了一個架構(gòu)在Keras之上的數(shù)據(jù)并行算法。Keras模型在Spark Driver上進(jìn)行初始化,之后進(jìn)行序列化,連同數(shù)據(jù)和廣播模型參數(shù)一起發(fā)送給Spark Worker。Spark Worker對模型進(jìn)行反序列化,然后訓(xùn)練數(shù)據(jù)塊,并將訓(xùn)練后的梯度發(fā)回Driver,Driver上的優(yōu)化器進(jìn)行同步或者異步地更新梯度,之后更新主模型。 總結(jié):

  1. 使用十分簡單,spark_model = SparkModel(model, frequency='epoch', mode='asynchronous')一行代碼就可以實(shí)現(xiàn)其功能

  2. 有使用者發(fā)現(xiàn)Driver會出現(xiàn)存儲數(shù)據(jù)失敗的情況,在相同epoch下,準(zhǔn)確率大幅度降低

  3. 由于采用PS架構(gòu),Driver的內(nèi)存要求比較高,官方要求至少1G內(nèi)存

TensorFlowOnSpark https://github.com/yahoo/TensorFlowOnSpark

TensorFlowOnSpark由Yahoo開發(fā),用于在Yahoo私有云中的Hadoop集群上進(jìn)行大規(guī)模分布式深度學(xué)習(xí)。 TensorFlowOnSpark具有一些重要的優(yōu)勢(請參閱我們的博客):

  • 只需不到10行代碼更改即可輕松遷移現(xiàn)有TensorFlow程序。

  • 支持所有TensorFlow功能:同步/異步訓(xùn)練,模型/數(shù)據(jù)并行性,推理和TensorBoard。

  • 服務(wù)器到服務(wù)器直接通信在可用時(shí)可以更快地學(xué)習(xí)。

  • 允許HDFS上的數(shù)據(jù)集以及由Spark推送或由TensorFlow推送的其他來源。

  • 輕松與您現(xiàn)有的Spark數(shù)據(jù)處理管道集成。

  • 輕松部署在云或本地以及CPU或GPU上。

如何進(jìn)行大數(shù)據(jù)分布式的深度學(xué)習(xí)

總結(jié):

  1. TensorFlowOnSpark依然是使用參數(shù)服務(wù)器與數(shù)據(jù)并行的結(jié)構(gòu)

  2. IO耗費(fèi)時(shí)間多,有用戶反映For 10 epochs of training, it took about 8.5 hours on a Yarn-Spark cluster with 2 nodes and 2 GPU, but the I/O took more than 3 hours.

dist-keras https://github.com/cerndb/dist-keras

dist-keras(DK)是在Apache Spark和Keras之上構(gòu)建的分布式深度學(xué)習(xí)框架,其目標(biāo)是使用分布式機(jī)器學(xué)習(xí)算法來顯著減少培訓(xùn)時(shí)間。設(shè)計(jì)框架的方式是,開發(fā)人員可以輕松實(shí)現(xiàn)新的分布式優(yōu)化器,從而使人們能夠?qū)W⒂谘芯亢湍P烷_發(fā)。

遵循大型分布式深度網(wǎng)絡(luò)論文中所述的數(shù)據(jù)并行方法。在此范例中,模型的副本分布在多個“訓(xùn)練器”上,并且每個模型副本都將在數(shù)據(jù)集的不同分區(qū)上進(jìn)行訓(xùn)練。每次梯度更新后,梯度(或所有網(wǎng)絡(luò)權(quán)重,取決于實(shí)現(xiàn)細(xì)節(jié))將與參數(shù)服務(wù)器通信。參數(shù)服務(wù)器負(fù)責(zé)處理所有Worker的梯度更新,并將所有梯度更新合并到單個主模型中,該模型將在訓(xùn)練過程完成后返回給用戶。

總結(jié):

  1. 使用簡單,功能少,主要是實(shí)現(xiàn)了分布式的optimizer

  2. 個人開發(fā),目前已經(jīng)項(xiàng)目已經(jīng)歸檔,不再活躍開發(fā)

Horovod https://github.com/horovod/horovod

Horovod是Uber開源的又一個深度學(xué)習(xí)工具,它的發(fā)展吸取了Facebook "Training ImageNet In 1 Hour" 與百度 "Ring Allreduce" 的優(yōu)點(diǎn),可為用戶實(shí)現(xiàn)分布式訓(xùn)練提供幫助。本文將簡要介紹如何使用Horovod配合pytorch更高效地進(jìn)行分布式訓(xùn)練。 如何進(jìn)行大數(shù)據(jù)分布式的深度學(xué)習(xí)

總結(jié):

  1. Uber開發(fā),社區(qū)活躍

  2. 支持多個深度學(xué)習(xí)框架,TensorFlow以及Pytorch和Keras

  3. horovod的分布式貌似只支持同步更新式的數(shù)據(jù)并行,模型并行和異步更新式的數(shù)據(jù)并行都不支持

determined-ai https://determined.ai/product/

determined AI 是一個深度學(xué)習(xí)分布式訓(xùn)練平臺,從算法上講,determined架構(gòu)在horovod上,使用horovod來進(jìn)行深度學(xué)習(xí)。除此之外,使用更高級的超參數(shù)調(diào)整,從而找到更好的模型。借助智能的GPU調(diào)度功能,提高GPU調(diào)度效率提高性能。以及安裝方便,圖形界面功能齊全。 如何進(jìn)行大數(shù)據(jù)分布式的深度學(xué)習(xí) 如何進(jìn)行大數(shù)據(jù)分布式的深度學(xué)習(xí)

Angel https://github.com/Angel-ML/angel

Angel 是一個基于參數(shù)服務(wù)器(Parameter Server)理念開發(fā)的高性能分布式機(jī)器學(xué)習(xí)平臺,它基于騰訊內(nèi)部的海量數(shù)據(jù)進(jìn)行了反復(fù)的調(diào)優(yōu),并具有廣泛的適用性和穩(wěn)定性,模型維度越高,優(yōu)勢越明顯。 Angel 由騰訊和北京大學(xué)聯(lián)合開發(fā),兼顧了工業(yè)界的高可用性和學(xué)術(shù)界的創(chuàng)新性。

Angel 的核心設(shè)計(jì)理念圍繞模型。它將高維度的大模型合理切分到多個參數(shù)服務(wù)器節(jié)點(diǎn),并通過高效的模型更新接口和運(yùn)算函數(shù),以及靈活的同步協(xié)議,輕松實(shí)現(xiàn)各種高效的機(jī)器學(xué)習(xí)算法。

Angel 基于 Java 和 Scala 開發(fā),能在社區(qū)的 Yarn 上直接調(diào)度運(yùn)行,并基于 PS Service ,支持 Spark on Angel ,未來將會支持圖計(jì)算和深度學(xué)習(xí)框架集成。 如何進(jìn)行大數(shù)據(jù)分布式的深度學(xué)習(xí) 總結(jié):

  1. 國產(chǎn),社區(qū)活躍,但是目前算法支持少。

  2. 使用Scala進(jìn)行編程,而不借助于Python的深度學(xué)習(xí)框架

  3. 支持多個參數(shù)服務(wù)器模型

BigDL

BigDL,是 Intel 開源的一個基于 Apache Spark 的分布式深度學(xué)習(xí)庫。使用 BigDL ,用戶可以將他們的深度學(xué)習(xí)應(yīng)用程序作為標(biāo)準(zhǔn)的 Spark 程序,它可以直接運(yùn)行在現(xiàn)有的 Spark 或 Hadoop 集群之上。 特性:

豐富的深度學(xué)習(xí)支持。BigDL 模仿 Torch,提供對深度學(xué)習(xí)的全方位支持,包括數(shù)值計(jì)算(通過Tensor)和高層次神經(jīng)網(wǎng)絡(luò)。此外,用戶可以使用 BigDL 將預(yù)訓(xùn)練的 Caffe 或 Torch 模型加載到 Spark 程序中。

極其高的性能。為了達(dá)到高性能,BigDL 在每個 Spark 任務(wù)中使用 Intel MKL和多線程編程。因此,它比單節(jié)點(diǎn) Xeon 上的開箱即用的 Caffe、Torch 或 TensorFlow 快幾個數(shù)量級。

有效地橫向擴(kuò)展。 BigDL 可以通過利用 Apache Spark 以及高效實(shí)施同步 SGD, 全面減少 Spark 上的通信,有效地向外擴(kuò)展,以“大數(shù)據(jù)規(guī)?!眻?zhí)行數(shù)據(jù)分析。

上述內(nèi)容就是如何進(jìn)行大數(shù)據(jù)分布式的深度學(xué)習(xí),你們學(xué)到知識或技能了嗎?如果還想學(xué)到更多技能或者豐富自己的知識儲備,歡迎關(guān)注億速云行業(yè)資訊頻道。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI