Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

20180613 [TensorFlow分散学習] Horovodによる分散学習の実装方法と解説

6,999 views

Published on

2018年6月13日に実施した勉強会の講演資料です。
[TensorFlow分散学習]Horovodによる分散学習の実装方法と解説
発表者:LeapMind Inc. Hideaki Masuda

Published in: Technology
  • Dating for everyone is here: ❤❤❤ http://bit.ly/39pMlLF ❤❤❤
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here
  • Follow the link, new dating source: ♥♥♥ http://bit.ly/39pMlLF ♥♥♥
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here
  • accessibility Books Library allowing access to top content, including thousands of title from favorite author, plus the ability to read or download a huge selection of books for your pc or smartphone within minutes.........ACCESS WEBSITE Over for All Ebooks ..... (Unlimited) ......................................................................................................................... Download FULL PDF EBOOK here { http://bit.ly/2m6jJ5M } .........................................................................................................................
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here
  • If you want to download or read this book, copy link or url below in the New tab ......................................................................................................................... DOWNLOAD FULL PDF EBOOK here { https://urlzs.com/UABbn } .........................................................................................................................
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here
  • DOWNLOAD THIS BOOKS INTO AVAILABLE FORMAT (Unlimited) ......................................................................................................................... ......................................................................................................................... Download Full PDF EBOOK here { https://tinyurl.com/y6a5rkg5 } ......................................................................................................................... Download Full EPUB Ebook here { https://tinyurl.com/y6a5rkg5 } ......................................................................................................................... ACCESS WEBSITE for All Ebooks ......................................................................................................................... Download Full PDF EBOOK here { https://tinyurl.com/y6a5rkg5 } ......................................................................................................................... Download EPUB Ebook here { https://tinyurl.com/y6a5rkg5 } ......................................................................................................................... Download doc Ebook here { https://tinyurl.com/y6a5rkg5 } ......................................................................................................................... ......................................................................................................................... ......................................................................................................................... .............. Browse by Genre Available eBooks ......................................................................................................................... Art, Biography, Business, Chick Lit, Children's, Christian, Classics, Comics, Contemporary, Cookbooks, Crime, Ebooks, Fantasy, Fiction, Graphic Novels, Historical Fiction, History, Horror, Humor And Comedy, Manga, Memoir, Music, Mystery, Non Fiction, Paranormal, Philosophy, Poetry, Psychology, Religion, Romance, Science, Science Fiction, Self Help, Suspense, Spirituality, Sports, Thriller, Travel, Young Adult,
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here

20180613 [TensorFlow分散学習] Horovodによる分散学習の実装方法と解説

  1. 1. LeapMind Inc. Infrastructure Division Leader Hideaki Masuda Tensorflow分散学習 Horovodによる分散学習の実装方法と解説
  2. 2. Contents 1. イントロダクション 2. Deep Learningにおける分散学習 3. Tensorflowで分散学習 Part1 (Distributed Tensorflow) 4. Tensorflowで分散学習 Part2 (Horovod) 5. チュートリアル:実際にHorovodを実行してみよう 6. まとめ 7. あとがき 分散学習の世界へようこそ
  3. 3. 1. イントロダクション
  4. 4. LeapMind Inc. © 2018 自己紹介 LeapMind Inc. Infrastructure Division 増田 英晃 Hideaki MASUDA 大手SIerにて大規模システムの方式基盤系SEとして従事後、 LeapMindにジョイン。 組込みDeep Learningモデル構築ソリューション「DeLTA-Lite」の開発や 社内のDeep Learning研究環境の構築を担当。 学習性能改善、運用効率化のために分散学習基盤の導入や ボトルネック分析などもしています。
  5. 5. LeapMind Inc. © 2018 本日のゴール Horovod を利用した分散学習を 自身のTensorflowの学習コードに対して 実装できるようになってもらう
  6. 6. 2. Deep Learningにおける分散学習
  7. 7. LeapMind Inc. © 2018 Deep Learningをやっていてよくある悩み 仮説 実験 結果 仮説 (更新) 実験 (再) の繰り返し 実験(学習)待ちが多い 学習早く終わらないかなー
  8. 8. LeapMind Inc. © 2018 学習を早くするには? 注:ここではGPU性能のみに言及していますが 実際はGPUではない部分がボトルネックになっていて プログラミングの仕方次第で改善の余地がある場合が多いです(後述) 今回は分散学習の紹介のため問題を単純化しています スケールアウト 複数のGPUを使う スケールアップ GPUを 良いものに変える 単一GPUには限界がある! どうやったら複数GPUで 学習ができるのだろうか? 1 2
  9. 9. LeapMind Inc. © 2018 分散学習の手法について Data parallel vs Model parallel Model parallelはモデルの各パートにおいてどのデバイスで計算させるかを 決定しなければならないため、モデル構成への依存度や実装難易度が高い Data parallelの方がシンプル に実装できる Data parallel : Split data per worker Model parallel : Split model per worker
  10. 10. LeapMind Inc. © 2018 分散学習の手法について asyncの方がスループット(step/sec)では有利 しかし、モデルの更新が非同期に行われるため、古いパラメータでの学習結果でモデルの更新 が行われ、精度が劣化する場合がある(Gradient Staleness) Parameter Server sync : 各プロセスは指定されたタイミングで同期をとる モデルの状態は常に全プロセスで等しい async : 各プロセスは非同期にモデルを更新、取得する プロセス間でモデルの状態に世代のズレが生じる Pull and Push parameters Sync parameters 同期型(sync) vs 非同期型(async)
  11. 11. LeapMind Inc. © 2018 分散学習を導入する目的 精度の高いモデル を より短い学習時間 で手に入れたい
  12. 12. LeapMind Inc. © 2018 Deep Learningにおける分散学習 スループットがよくても精度が出なければ 本末転倒である
  13. 13. LeapMind Inc. © 2018 Deep Learningにおける分散学習 本日紹介するHorovodは Data parallel + 同期型(sync) 精度影響が少なく 学習を高速化できる
  14. 14. LeapMind Inc. © 2018 Deep Learningにおける分散学習 分散手法をシンプルにすることで 実装を簡素にでき 実験の考察もしやすい
  15. 15. LeapMind Inc. © 2018 どのぐらい高速化できるの? 分散数をNとした場合の性能向上率Sはアムダールの法則より S(N) = 1/((1-P) + P/N) と表せる、ここでPは並列化できない処理の割合を表していて P=0のときS=1で最大、つまりN個に分散した場合、学習時間が1/Nになる 上記をみるにS=0.8〜0.9以上であるため、特に数〜数十程度の分散学習では 十分にP(並列化できない処理)を少なくすることが現実的であり 分散数Nのとき学習時間を約1/Nにできる https://github.com/uber/horovod/blob/master/README.md
  16. 16. 3. Tensorflowで分散学習 Part1 (Distributed Tensorflow)
  17. 17. LeapMind Inc. © 2018 What is Distributed Tensorflow Tensorflow公式の分散処理機能 Master/Worker/Parameter Server構造 各計算グラフ、変数ごとに処理するノードやデバイス(cpu/gpu)を指定可能 Data Parallel/Model Parallel、同期/非同期処理にも対応し、実装の柔軟性が高い Fault tolerance機能などもあり、機能ではなく分散基盤と言った方が正しそう https://cloudplatform-jp.googleblog.com/2017/09/distributed-TensorFlow-and-the-hidden-layers-of-engineering-work.html
  18. 18. LeapMind Inc. © 2018 Getting Started - Distributed Tensorflow! Getting Started - Distributed Tensorflow 1. “Create a tf.train.ClusterSpec that describes all of the tasks in the cluster. This should be the same for each task.” tf.train.ClusterSpecにクラスター構成を記載しましょう 2. “Create a tf.train.Server, passing the tf.train.ClusterSpec to the constructor, and identifying the local task with a job name and task index.” tf.train.Serverにjob名とタスク番号を付与しましょう 3. “Specifying distributed devices in your model” モデル定義にtf.deviceを利用してどのノード(jobとtask)のどのデバイス(CPU or GPU)で計 算を行うか計算グラフ毎に決めて記述しましょう ・ ・ ・ 新用語達(“Client, Cluster, Job, Master service, Task, Tensorflow Server, Worker service”) https://www.tensorflow.org/deploy/distributed ...学習コスト高め
  19. 19. 4. Tensorflowで分散学習 Part2 (Horovod)
  20. 20. LeapMind Inc. © 2018 What is Horovod Uberが開発しているOSSの分散学習用フレームワーク Tensorflow, Keras, Pytorchに対応 https://github.com/uber/horovod
  21. 21. LeapMind Inc. © 2018 Horovodプロジェクトの目的 単一GPUで動く(Tensorflowの)プログラムを利用し、なるべく 簡単に複数GPUでの 高速な分散学習を 実現できるようにすること 上記の目的を実現するための2つの指標 どれだけ早く学習できるか プログラムを どれだけ変更する必要があるか 学習実行の簡単さ
  22. 22. LeapMind Inc. © 2018 なんでHorovod? 簡単に実装できる 既存コードに下記を追加するだけ 1. Horovod初期化 2. GPU指定(1プロセスに1GPU) 3. Learning Rateを分散数でスケール 4. optimizerをオーバーライド 5. 学習前のGlobal VariablesのSync設定 6. checkpointを特定ノードのみ保存するように設定 https://github.com/uber/horovod/blob/master/README.md
  23. 23. LeapMind Inc. © 2018 Distributed Tensorflow 事前準備 分散数や使用するサーバの構成に応 じてClusterやtask,jobを都度定義 Horovod 事前準備 MPIとNCCLをインストール (作業は一度のみ) 実行 各ノードで定義に従ったコマンドを各プ ロセス毎に実行(例はasync) # On ps0.example.com: $ python trainer.py --ps_hosts=ps0.example.com:2222,ps1.example.com:2222 --worker_hosts=worker0.example.com:2222,worker1.example.com:2222 --job_name=ps --task_index=0 # On ps1.example.com: $ python trainer.py --ps_hosts=ps0.example.com:2222,ps1.example.com:2222 --worker_hosts=worker0.example.com:2222,worker1.example.com:2222 --job_name=ps --task_index=1 # On worker0.example.com: $ python trainer.py --ps_hosts=ps0.example.com:2222,ps1.example.com:2222 --worker_hosts=worker0.example.com:2222,worker1.example.com:2222 --job_name=worker --task_index=0 # On worker1.example.com: $ python trainer.py --ps_hosts=ps0.example.com:2222,ps1.example.com:2222 --worker_hosts=worker0.example.com:2222,worker1.example.com:2222 --job_name=worker --task_index=1 実行 MPIがインストール済みの適当なノー ドからコマンドを実行 $ mpirun -np 16 -H server1:4,server2:4,server3:4,server4:4 [some mpi options...] python train.py 実行時に分散対象のノードと プロセス数を指定できる なんでHorovod? 簡単に実行できる
  24. 24. LeapMind Inc. © 2018 https://github.com/uber/horovod/tree/v0.12.1 なんでHorovod? 学習が早い スケールしても効率が落ちにくい
  25. 25. LeapMind Inc. © 2018 Horovodの分散学習手法 Data parallel + 同期型(sync) 同一モデル x 別データで計算された勾配のみを同期、 全ワーカーの平均でモデルを更新 https://eng.uber.com/horovod/
  26. 26. LeapMind Inc. © 2018 Data parallel + 同期型(sync) 学習率をワーカー数に応じてスケールさせる 学習率をバッチサイズ(全ワーカーの合計)に比例してスケールさせると 精度を落とさずにに大きいバッチサイズでのトレーニングが可能 (256GPUでImageNetを1hourで学習) Goyal, P et al. (2017). Accurate, Large Minibatch SGD: Training ImageNet in 1 Hour (Facebook) Horovodの分散学習手法
  27. 27. LeapMind Inc. © 2018 ImageNet学習世界最速のChainerMNを利用した学習でも同様に 学習率をワーカー数に比例してスケールさせている GoyalのTesla P100 256GPUで1hourに対して1024GPUで15minutesを達成 RMSPropからmomentum SGDに徐々に切り替える手法を使用 Akiba, T et al. (2017). Extremely Large Minibatch SGD: Training ResNet-50 on ImageNet in 15 Minutes (Preferred Networks) Data parallel + 同期型(sync) 学習率をワーカー数に応じてスケールさせる Horovodの分散学習手法
  28. 28. LeapMind Inc. © 2018 MPIをプロセス間通信に利用した SPMD構成(Single Program Multiple Data) 全ワーカーは同一スクリプトで動き、個々の役割を意識しなくてよい 各ワーカーにはrank(一意のプロセス番号)が付与される rankによるif分岐等でのみ指定ワーカーへの別処理を記述可能(モデル保存とか) serverA serverB Interconnect (Infiniband,Ethernet) serverA or B or …. $ mpirun -np 4 -H serverA:2.serverB:2 python train.py python train.py (rank:0) python train.py (rank:1) python train.py (rank:2) python train.py (rank:3) Interconnect (NVLINK,PCI-E) Interconnect (NVLINK,PCI-E) Horovodのアーキテクチャ
  29. 29. LeapMind Inc. © 2018 設計がシンプル、分かりやすい 必要最低限の機能のみ Horovodの強み hvd.init() 初期化関数 hvd.size() プロセス数の合計を取得する関数 hvd.local_size() ノード内のプロセス数の合計を取得する関数 hvd.rank() プロセス番号(一意)を取得する関数 hvd.local_rank() プロセス番号(ノード内で一意)を取得する関数 hvd.broadcast_global_variables(root_rank) tf.global_variables()で取得したオブジェクトをroot_rankで指定したプ ロセスの値で全プロセスに対して上書き(broadcast)する関数 hvd.BroadcastGlobalVariablesHook (tf.train.SessionRunHook) broadcast_global_variables()を学習開始の初回のみ実行する SessionRunHookクラス DistributedOptimizer(tf.train.Optimizer) optimizerのcompute_gradientsをオーバーライドしてallreduce処理 を追加するOptimizerクラス シンプルゆえに自由度は少なめ。必要があれば、 mpi4py等の異なるMPIライブラリに対応しているため、独自処理も記述可能。
  30. 30. LeapMind Inc. © 2018 高速化への取り組み Ring-all-reduce by NCCL v2 NCCL v2に対応しており、all-reduce処理に Ring-all-reduceアルゴリズムを採用し通信を最適化して高速化を図っている リング状の1方向通信+各ノードでの並列計算でall-reduceを実現 https://eng.uber.com/horovod/ Horovodの強み
  31. 31. LeapMind Inc. © 2018 高速化への取り組み Tensor Fusion 複数のTensorオブジェクトをまとめて1回の Ring-all-reduce処理に与えられるようにする仕組み Tensor単位でRing-all-reduceを実行する場合 Tensorのサイズが大きくないと、一回の通信量が減ってしまい 効率が悪くなってしまう 上記を改善するために複数のTensorをFusion Bufferに格納し それに対してRing-all-reduce処理を行うようにしている Fusion Bufferのサイズは環境に応じて下記の変数でチューニング可能 環境変数:HOROVOD_FUSION_THRESHOLD(デフォルト64MB) Horovodの強み
  32. 32. LeapMind Inc. © 2018 性能の分析(処理の可視化)ができる JSON形式で処理のタイムラインを出力可能 chrome://tracingで読み込んで可視化できる Horovodの強み https://github.com/uber/horovod/blob/master/README.md
  33. 33. 5. チュートリアル 実際にHorovodを実行してみよう
  34. 34. LeapMind Inc. © 2018 複数ノード 複数GPU STEP 2 チュートリアルの前提条件 準備や性能改善の難易度は単一ノードでの実行のほうが簡単であるため 今回は単一ノードでの実行を前提として進めます 単一ノードでも例えばAWSのp3.16xlargeなどの8GPUを搭載したマシンを 利用して、学習を8倍近く高速にできる可能性があります 単一ノード 複数GPU STEP 1 分散学習の実行環境は難易度的に大きく下記の2ステップに分かれます
  35. 35. LeapMind Inc. © 2018 チュートリアルの前提条件 また、今回は環境構築にDockerを利用し GPU利用のためにnvidia-docker(v2)をインストールしています 上記の環境であれば、docker buildするだけですぐにhorovodを利用できます 変更元となる学習用コードは Tensorflow tutorialのDeep MNIST for Expertsより mnist_deep.py*をそのまま利用します * : https://github.com/tensorflow/tensorflow/blob/r1.2/tensorflow/examples/tutorials/mnist/mnist_deep.py
  36. 36. LeapMind Inc. © 2018 チュートリアル tensorflow/examples/tutorials/mnist/mnist_deep.py
  37. 37. 6. まとめ
  38. 38. LeapMind Inc. © 2018 6. まとめ Deep Learningの分散学習について 日本語での情報が少なく 特にTensorflowを利用した分散学習についての情報は あまり見つけられないのが現状です 今回の発表が、皆さんが分散学習を実装する際の 足がかりになれば幸いです
  39. 39. LeapMind Inc. © 2018 6. まとめ ぜひHorovodを利用して 分散学習を 体験してみてください!
  40. 40. 7. あとがき 分散学習の世界へようこそ
  41. 41. LeapMind Inc. © 2018 あとがき 分散学習の世界へようこそ ここでは補足的に分散学習を実装する際に遭遇する 課題や疑問 について少し話そうと思います
  42. 42. LeapMind Inc. © 2018 あとがき 分散学習の世界へようこそ GPU使用率を確認する 処理を可視化してボトルネックを確認する GPU使用率をあげるためにはCPU処理やI/O処理を キューや並列化を使って隠ぺいする必要があります これだけでだいぶ早くなります 単純にバッチサイズを大きくすることでも GPU処理の割合を増やせます 並列化しても早くならないなー
  43. 43. LeapMind Inc. © 2018 あとがき 分散学習の世界へようこそ 学習率上げるだけで早くなってた なんてことも 特に導入した初めの頃は 到達精度も含めきちんと 単一GPUでの場合との比較 を実施した方が良いです 並列化したら早くなった!と思ったら !
  44. 44. LeapMind Inc. © 2018 あとがき 分散学習の世界へようこそ データセットを各ワーカー数で分割して配置した場合 データの偏りをなくすために 1epoch毎にシャッフル&配置し直すべき しかし、実装上 horovodにそのような機能はない データ数がバッチサイズに対して十分に大きければ 一部データが重複する可能性に目をつぶって 全ワーカーに全データ置いてしまうという手もあるが... データセットを 各ワーカーにどう配置すべきか
  45. 45. LeapMind Inc. © 2018 あとがき 分散学習の世界へようこそ 分散学習の実装は日々進歩していて いくつもの手法が実験されています 構成がシンプル + 精度劣化が少ない という実験結果がある という状態なので、今後は分かりません NVIDIAのDGX-2では 16GPUを高速なインターコネクトで接続することで 1つのGPUとして使用できる(Model Parallel的に使う)ように 設計されており 巨大なモデルに対する学習ニーズもあったりします DataParallel + syncが最強なの? ?
  46. 46. LeapMind Inc. © 2018 あとがき 分散学習の世界へようこそ Horovodが最強なの? ! ChainerMN Horovod Distributed Tensorflow ImageNetで最速を叩き出しています 新機能や手法をどんどん出しており より柔軟かつ先進的です 構成はChainerMNと近いため 比較的同程度の結果が出せると 期待できます 汎用的であるがゆえに今回のような分散手法では性能を出しにくいですが Model Parallel等では力を発揮しそうです 柔軟性があるため新しい手法を試すのがよさそうです
  47. 47. LeapMind Inc. © 2018 47 ご清聴ありがとうございました masuda@leapmimd.io http://leapmind.io/

×