140.深度學(xué)習(xí)分布式計(jì)算框架-3

140.1 Horovod

  • Horovod是 Uber 開源的又一個(gè)深度學(xué)習(xí)工具,它的發(fā)展吸取了 Facebook「一小時(shí)訓(xùn)練 ImageNet 論文」與百度 Ring Allreduce 的優(yōu)點(diǎn)悲龟,可為用戶實(shí)現(xiàn)分布式訓(xùn)練提供幫助同波。
  • Horovod 支持通過用于高性能并行計(jì)算的低層次接口 – 消息傳遞接口 (MPI) 進(jìn)行分布式模型訓(xùn)練奢驯。有了 MPI,就可以利用分布式 Kubernetes 集群來訓(xùn)練 TensorFlow 和 PyTorch 模型。
  • 分布式 TensorFlow 的參數(shù)服務(wù)器模型(parameter server paradigm)通常需要對(duì)大量樣板代碼進(jìn)行認(rèn)真的實(shí)現(xiàn)锄蹂。但是 Horovod 僅需要幾行畴蹭。下面是一個(gè)分布式 TensorFlow 項(xiàng)目使用 Horovod 的示例:
import  tensorflow as tf
import horovod.tensorflow as hvd
# Initialize Horovod
hvd.init()
# Pin GPU to be used to process local rank (one GPU per process)
config = tf.ConfigProto()
config.gpu_options.visible_device_list = str(hvd.local_rank())
# Build model…
loss = …
opt = tf.train.AdagradOptimizer(0.01)
# Add Horovod Distributed Optimizer
opt = hvd.DistributedOptimizer(opt)
# Add hook to broadcast variables from rank 0 to all other processes during
# initialization.
hooks = [hvd.BroadcastGlobalVariablesHook(0)]
# Make training operation
train_op = opt.minimize(loss)
# The MonitoredTrainingSession takes care of session initialization,
# restoring from a checkpoint, saving to a checkpoint, and closing when done
# or an error occurs.
with tf.train.MonitoredTrainingSession(checkpoint_dir=“/tmp/train_logs”,
                                      config=config,
                                      hooks=hooks) as mon_sess:
 while not mon_sess.should_stop():
   # Perform synchronous training.
   mon_sess.run(train_op)

在該示例中坦仍,粗體文字指進(jìn)行單個(gè) GPU 分布式項(xiàng)目時(shí)必須做的改變:

  • hvd.init() 初始化 Horovod。
  • config.gpu_options.visible_device_list = str(hvd.local_rank()) 向每個(gè) TensorFlow 流程分配一個(gè) GPU叨襟。
  • opt=hvd.DistributedOptimizer(opt) 使用 Horovod 優(yōu)化器包裹每一個(gè)常規(guī) TensorFlow 優(yōu)化器繁扎,Horovod 優(yōu)化器使用 ring-allreduce 平均梯度。
  • hvd.BroadcastGlobalVariablesHook(0) 將變量從第一個(gè)流程向其他流程傳播糊闽,以實(shí)現(xiàn)一致性初始化梳玫。如果該項(xiàng)目無法使用 MonitoredTrainingSession,則用戶可以運(yùn)行 hvd.broadcast_global_variables(0)右犹。
  • 之后提澎,可以使用 mpirun 命令使該項(xiàng)目的多個(gè)拷貝在多個(gè)服務(wù)器中運(yùn)行:
$ mpirun -np 16 -x LD_LIBRARY_PATH -H 
server1:4,server2:4,server3:4,server4:4 python train.py
  • mpirun 命令向四個(gè)節(jié)點(diǎn)分布 train.py,然后在每個(gè)節(jié)點(diǎn)的四個(gè) GPU 上運(yùn)行 train.py念链。

140.2 BigDL

  • BigDL是一種基于Apache Spark的分布式深度學(xué)習(xí)框架虱朵。它可以無縫的直接運(yùn)行在現(xiàn)有的Apache Spark和Hadoop集群之上。BigDL的設(shè)計(jì)吸取了Torch框架許多方面的知識(shí)钓账,為深度學(xué)習(xí)提供了全面的支持碴犬;包括數(shù)值計(jì)算和高級(jí)神經(jīng)網(wǎng)絡(luò);借助現(xiàn)有的Spark集群來運(yùn)行深度學(xué)習(xí)計(jì)算梆暮,并簡(jiǎn)化存儲(chǔ)在Hadoop中的大數(shù)據(jù)集的數(shù)據(jù)加載服协。
  • BigDL優(yōu)點(diǎn):
    • 豐富的深度學(xué)習(xí)支持。模擬Torch之后啦粹,BigDL為深入學(xué)習(xí)提供全面支持偿荷,包括數(shù)字計(jì)算(通過Tensor)和高級(jí)神經(jīng)網(wǎng)絡(luò) ; 此外窘游,用戶可以使用BigDL將預(yù)先訓(xùn)練好的Caffe或Torch模型加載到Spark程序中。
    • 極高的性能跳纳。為了實(shí)現(xiàn)高性能忍饰,BigDL在每個(gè)Spark任務(wù)中使用英特爾MKL和多線程編程。因此寺庄,在單節(jié)點(diǎn)Xeon(即與主流GPU 相當(dāng))上艾蓝,它比開箱即用開源Caffe,Torch或TensorFlow快了數(shù)量級(jí)斗塘。
    • 有效地橫向擴(kuò)展赢织。BigDL可以通過利用Apache Spark(快速分布式數(shù)據(jù)處理框架),以及高效實(shí)施同步SGD和全面減少Spark的通信馍盟,從而有效地?cái)U(kuò)展到“大數(shù)據(jù)規(guī)挠谥茫”上的數(shù)據(jù)分析
  • BigDL缺點(diǎn):
    • 對(duì)機(jī)器要求高 jdk7上運(yùn)行性能差 在CentOS 6和7上,要將最大用戶進(jìn)程增加到更大的值(例如514585); 否則贞岭,可能會(huì)看到錯(cuò)誤八毯,如“無法創(chuàng)建新的本機(jī)線程”。
    • 訓(xùn)練和驗(yàn)證的數(shù)據(jù)會(huì)加載到內(nèi)存瞄桨,擠占內(nèi)存
  • BigDL滿足的應(yīng)用場(chǎng)景:
    • 直接在Hadoop/Spark框架下使用深度學(xué)習(xí)進(jìn)行大數(shù)據(jù)分析(即將數(shù)據(jù)存儲(chǔ)在HDFS话速、HBase、Hive等數(shù)據(jù)庫上)讲婚;
    • 在Spark程序中/工作流中加入深度學(xué)習(xí)功能尿孔;
    • 利用現(xiàn)有的 Hadoop/Spark 集群來運(yùn)行深度學(xué)習(xí)程序俊柔,然后將代碼與其他的應(yīng)用場(chǎng)景進(jìn)行動(dòng)態(tài)共享筹麸,例如ETL(Extract、Transform雏婶、Load物赶,即通常所說的數(shù)據(jù)抽取)留晚、數(shù)據(jù)倉庫(data warehouse)酵紫、功能引擎、經(jīng)典機(jī)器學(xué)習(xí)错维、圖表分析等奖地。

140.3 Petastorm

  • Petastorm是一個(gè)由 Uber ATG 開發(fā)的開源數(shù)據(jù)訪問庫。這個(gè)庫可以直接基于數(shù) TB Parquet 格式的數(shù)據(jù)集進(jìn)行單機(jī)或分布式訓(xùn)練和深度學(xué)習(xí)模型評(píng)估赋焕。Petastorm 支持基于 Python 的機(jī)器學(xué)習(xí)框架参歹,如 Tensorflow、Pytorch 和 PySpark隆判,也可以直接用在 Python 代碼中犬庇。


  • 即使是在現(xiàn)代硬件上訓(xùn)練深度模型也很耗時(shí)僧界,而且在很多情況下,很有必要在多臺(tái)機(jī)器上分配訓(xùn)練負(fù)載臭挽。典型的深度學(xué)習(xí)集群需要執(zhí)行以下幾個(gè)步驟:
    • 一臺(tái)或多臺(tái)機(jī)器讀取集中式或本地?cái)?shù)據(jù)集捂襟。
    • 每臺(tái)機(jī)器計(jì)算損失函數(shù)的值,并根據(jù)模型參數(shù)計(jì)算梯度欢峰。在這一步通常會(huì)使用 GPU葬荷。
    • 通過組合估計(jì)的梯度(通常由多臺(tái)機(jī)器以分布式的方式計(jì)算得出)來更新模型系數(shù)。
  • 通常赤赊,一個(gè)數(shù)據(jù)集是通過連接多個(gè)數(shù)據(jù)源的記錄而生成的闯狱。這個(gè)由 Apache Spark 的 Python 接口 PySpark 生成的數(shù)據(jù)集稍后將被用在機(jī)器學(xué)習(xí)訓(xùn)練中。Petastorm 提供了一個(gè)簡(jiǎn)單的功能抛计,使用 Petastorm 特定的元數(shù)據(jù)對(duì)標(biāo)準(zhǔn)的 Parquet 進(jìn)行了擴(kuò)展哄孤,從而讓它可以與 Petastorm 兼容。
  • 有了 Petastorm吹截,消費(fèi)數(shù)據(jù)就像在 HDFS 或文件系統(tǒng)中創(chuàng)建和迭代讀取對(duì)象一樣簡(jiǎn)單瘦陈。Petastorm 使用 PyArrow 來讀取 Parquet 文件。
  • 將多個(gè)數(shù)據(jù)源組合到單個(gè)表格結(jié)構(gòu)中波俄,從而生成數(shù)據(jù)集晨逝。可以多次使用相同的數(shù)據(jù)集進(jìn)行模型訓(xùn)練和評(píng)估懦铺。


  • 為分布式訓(xùn)練進(jìn)行分片
    • 在分布式訓(xùn)練環(huán)境中捉貌,每個(gè)進(jìn)程通常負(fù)責(zé)訓(xùn)練數(shù)據(jù)的一個(gè)子集。一個(gè)進(jìn)程的數(shù)據(jù)子集與其他進(jìn)程的數(shù)據(jù)子集正交冬念。Petastorm 支持將數(shù)據(jù)集的讀時(shí)分片轉(zhuǎn)換為正交的樣本集趁窃。


  • 本地緩存
    • Petastorm 支持在本地存儲(chǔ)中緩存數(shù)據(jù)。當(dāng)網(wǎng)絡(luò)連接速度較慢或帶寬很昂貴時(shí)急前,這會(huì)派上用場(chǎng)醒陆。


140.4 TensorFlowOnSpark

  • TensorFlowOnSpark為 Apache Hadoop 和 Apache Spark 集群帶來可擴(kuò)展的深度學(xué)習(xí)。 通過結(jié)合深入學(xué)習(xí)框架 TensorFlow 和大數(shù)據(jù)框架 Apache Spark 裆针、Apache Hadoop 的顯著特征刨摩,TensorFlowOnSpark 能夠在 GPU 和 CPU 服務(wù)器集群上實(shí)現(xiàn)分布式深度學(xué)習(xí)。
  • 滿足的應(yīng)用場(chǎng)景:
    • 為了利用TensorFlow在現(xiàn)有的Spark和Hadoop集群上進(jìn)行深度學(xué)習(xí)世吨。而不需要為深度學(xué)習(xí)設(shè)置單獨(dú)的集群澡刹。



  • 優(yōu)點(diǎn):
    • 輕松遷移所有現(xiàn)有的TensorFlow程序,<10行代碼更改;
    • 支持所有TensorFlow功能:同步/異步訓(xùn)練耘婚,模型/數(shù)據(jù)并行罢浇,推理和TensorBoard;
    • 服務(wù)器到服務(wù)器的直接通信在可用時(shí)實(shí)現(xiàn)更快的學(xué)習(xí);
    • 允許數(shù)據(jù)集在HDFS和由Spark推動(dòng)的其他來源或由TensorFlow拖動(dòng);
    • 輕松集成您現(xiàn)有的數(shù)據(jù)處理流水線和機(jī)器學(xué)習(xí)算法(例如,MLlib边篮,CaffeOnSpark);
    • 輕松部署在云或內(nèi)部部署:CPU和GPU己莺,以太網(wǎng)和Infiniband奏甫。
    • TensorFlowOnSpark是基于google的TensorFlow的實(shí)現(xiàn),而TensorFlow有著一套完善的教程凌受,內(nèi)容豐富阵子。
  • 劣勢(shì):
    • 開源時(shí)間不長(zhǎng),未得到充分的驗(yàn)證胜蛉。

大數(shù)據(jù)視頻推薦:
網(wǎng)易云課堂
CSDN
人工智能算法競(jìng)賽實(shí)戰(zhàn)
AIops智能運(yùn)維機(jī)器學(xué)習(xí)算法實(shí)戰(zhàn)
ELK7 stack開發(fā)運(yùn)維實(shí)戰(zhàn)
PySpark機(jī)器學(xué)習(xí)從入門到精通
AIOps智能運(yùn)維實(shí)戰(zhàn)
騰訊課堂
大數(shù)據(jù)語音推薦:
ELK7 stack開發(fā)運(yùn)維
企業(yè)級(jí)大數(shù)據(jù)技術(shù)應(yīng)用
大數(shù)據(jù)機(jī)器學(xué)習(xí)案例之推薦系統(tǒng)
自然語言處理
大數(shù)據(jù)基礎(chǔ)
人工智能:深度學(xué)習(xí)入門到精通

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末挠进,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子誊册,更是在濱河造成了極大的恐慌领突,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,423評(píng)論 6 491
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件案怯,死亡現(xiàn)場(chǎng)離奇詭異君旦,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)嘲碱,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,147評(píng)論 2 385
  • 文/潘曉璐 我一進(jìn)店門金砍,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人麦锯,你說我怎么就攤上這事恕稠。” “怎么了扶欣?”我有些...
    開封第一講書人閱讀 157,019評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵鹅巍,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我料祠,道長(zhǎng)骆捧,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,443評(píng)論 1 283
  • 正文 為了忘掉前任术陶,我火速辦了婚禮凑懂,結(jié)果婚禮上煤痕,老公的妹妹穿的比我還像新娘梧宫。我一直安慰自己,他們只是感情好摆碉,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,535評(píng)論 6 385
  • 文/花漫 我一把揭開白布塘匣。 她就那樣靜靜地躺著,像睡著了一般巷帝。 火紅的嫁衣襯著肌膚如雪忌卤。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,798評(píng)論 1 290
  • 那天楞泼,我揣著相機(jī)與錄音驰徊,去河邊找鬼笤闯。 笑死,一個(gè)胖子當(dāng)著我的面吹牛棍厂,可吹牛的內(nèi)容都是我干的颗味。 我是一名探鬼主播,決...
    沈念sama閱讀 38,941評(píng)論 3 407
  • 文/蒼蘭香墨 我猛地睜開眼牺弹,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼浦马!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起张漂,我...
    開封第一講書人閱讀 37,704評(píng)論 0 266
  • 序言:老撾萬榮一對(duì)情侶失蹤晶默,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后航攒,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體磺陡,經(jīng)...
    沈念sama閱讀 44,152評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,494評(píng)論 2 327
  • 正文 我和宋清朗相戀三年漠畜,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了仅政。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,629評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡盆驹,死狀恐怖圆丹,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情躯喇,我是刑警寧澤辫封,帶...
    沈念sama閱讀 34,295評(píng)論 4 329
  • 正文 年R本政府宣布,位于F島的核電站廉丽,受9級(jí)特大地震影響倦微,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜正压,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,901評(píng)論 3 313
  • 文/蒙蒙 一欣福、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧焦履,春花似錦拓劝、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,742評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至屑宠,卻和暖如春厢洞,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,978評(píng)論 1 266
  • 我被黑心中介騙來泰國(guó)打工躺翻, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留丧叽,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,333評(píng)論 2 360
  • 正文 我出身青樓公你,卻偏偏與公主長(zhǎng)得像蠢正,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子省店,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,499評(píng)論 2 348

推薦閱讀更多精彩內(nèi)容