狠狠撸

狠狠撸Share a Scribd company logo
@maguroIsland
分散学習のあれこれ
~データパラレルから
モデルパラレルまで~
2
このスライドは2019年8/5、6に開催された
「第一回ディープラーニング分散学習ハッカソン」
にてご教授いただいた内容を元に作成しております
この場を借りて主催である
“東京工業大学学術国際情報センター様”
“GPUコンピューティング研究会様”
“エヌビディア合同会社様”
共催である
“Chainer User Group様”
“TensorFlow User Group様”
に感謝の意を表します
http://gpu-computing.gsic.titech.ac.jp/node/100
Contents
? 分散学習とは?
? Chainerにおける分散学習
? PyTorchにおける分散学習
? おまけ
3
Contents
? 分散学習とは?
? データパラレル
? モデルパラレル
4
分散学習とは?
5
Cat
10 Days...
6
ぶいひゃく
ばたけ NVIDIA
分散学習とは?
7
? 複数のGPUを使ってニューラルネットワークを殴り倒して
計算時間を削減しようというもの
Cat
1minut(WWO)
分散学習とは?
8
推論
? データパラレル
同じモデルを載せた複数のGPUそれぞれに並列してデータを
流す分散処理方法
分散学習とは?
9
? モデルパラレル
1つのGPUでは載りきらないようなデカいモデルをノード
ごとや層ごとに分割することで計算可能にする分散学習方法
Cat
? データパラレル
Pros
? 速度向上!
? モデルパラレル
Pros
? 1GPUでは載りきらず訓練出来なかったモデルの訓練が
可能になる!
分散学習とは?
10
? データパラレル
Pros
? 速度向上!
Cons
? mini-batchsize増加による精度の悪化
? モデルパラレル
Pros
? 1GPUでは載りきらず訓練出来なかったモデルの訓練が
可能になる!
Cons
? 場合によっては訓練速度が低下する[1]
? かなり実装がややこしく、超簡単なラッパーがほぼない
分散学習とは?
11
分散学習とは?
12
? データパラレル
? mini-batchsize増加による精度の悪化
→学習率を上げるなどの工夫をすることで精度の悪化を防ぐ
様々な工夫が必要[2, 3]
→PFNが32kバッチ※までは精度低下を防いでいる[4]
→ImageNet学習速度世界一争いは実は計算資源投入だけで
は成り立たない![5]
※1024GPUで1GPUあたり32ミニバッチ in ImageNet
分散学習とは?
13
? モデルパラレル
? 場合によっては訓練速度が低下する
→分割方法によってはGPU間通信※が多く発生し、それが
ボトルネックとなる
? かなり実装がややこしい上、超簡単なラッパーがない
→モデル分割方法は複数ある上、どこで分割するかの選択肢
はネットワーク構造よって多岐にわたり、設計が難しい
→Chainerではlayer-wiseとchannel-wiseな分割が公式で
サポートされているが、発展途上の分散学習方法[1, 6]
※GPU内通信は900Gbpsに対し、GPU間は100Gbpsほど
分散学習とは?
14
より詳しくわかりやすい基礎講座資料はこちら!
[7] 分散学習基礎講座,“https://www.cc.u-tokyo.ac.jp/events/lectures/111/20190124-1.pdf“
Contents
? 分散学習とは?
? Chainerにおける分散学習
? PyTorchにおける分散学習
? おまけ
15
Contents
? Chainerにおける分散学習
? データパラレル編
? モデルパラレル編
? Optuna編
16
? データパラレル編
用意するもの
? ChainerMN(Chainer5.0以降はChainerMNは同梱)
? NCCL(マルチGPUの集合通信ライブラリ)
? OpenMPI(並列コンピューティング用ライブラリ)
? Multiple GPU(2~)※
ちなみにGPU数増加に伴う通信
などでの計算速度低下はChainer
が最も少ない(らしい)[8]
※ただし、GPU同士の接続が通信が遅いケーブルで繋がれて
いると計算速度の向上度合は低い
Chainerにおける分散学習
17
18
GPU情報を格納する
オブジェクトを作成
最初のGPU0番にのみデータセット
を載せた後に各GPUに分配する
既存のオプティマイザをマルチノード
用のモジュールでラップする
19
各GPUにモデルを載せる
ログの保存などはGPU0番のみ
行うように変更
? データパラレル編
既存のコードにたった5ステップ手を加えるだけ!
(慣れたら作業時間は2分くらい)
(実行例)
モデル:DCGAN
データセット:CIFAR-10
epoch:200
batchsize:256 x 32GPU=8192
GPU:Tesla V100
ノード間接続:InfiniBand
Chainerにおける分散学習
20
? データパラレル編
既存のコードにたった5ステップ手を加えるだけ!
(慣れたら作業時間は2分くらい)
(実行例)
モデル:DCGAN
データセット:CIFAR-10
epoch:200
batchsize:256 x 32GPU=8192
GPU:Tesla V100
ノード間接続:InfiniBand
※データパラレルをすると早くなるという例であってこのよう
なラージバッチでは訓練はうまくいきません
様々な工夫やバッチサイズの調整が必要です
Chainerにおける分散学習
21
訓練時間
1分30秒!!※
? モデルパラレル編
モデルパラレルは分割方法が多岐にわたる
? ノードごとの分割
? 層ごとの分割
? チャネル方向の分割
? 空間方向の分割 etc...
Chainerにおける分散学習
22
? モデルパラレル編
モデルパラレルは分割方法が多岐にわたる
? ノードごとの分割[7]
? 層ごとの分割
? チャネル方向の分割
? 空間方向の分割 etc...
Chainerにおける分散学習
23
Cat
? モデルパラレル編
モデルパラレルは分割方法が多岐にわたる
? ノードごとの分割
? 層ごとの分割[1]
? チャネル方向の分割
? 空間方向の分割 etc...
Chainerにおける分散学習
24
Cat
? モデルパラレル編
モデルパラレルは分割方法が多岐にわたる
? ノードごとの分割
? 層ごとの分割
? チャネル方向の分割[6]
? 空間方向の分割 etc...
Chainerにおける分散学習
25
Cat
ch
w
h
? モデルパラレル編
モデルパラレルは分割方法が多岐にわたる
? ノードごとの分割
? 層ごとの分割
? チャネル方向の分割
? 空間方向の分割[9] etc...
Chainerにおける分散学習
26
Cat
ch
w
h
? モデルパラレル編
今日コードで紹介するのはConvのチャネル方向の分割
Chainerでは最も簡単に実装が可能
Chainerにおける分散学習
27
Cat
ch
w
h
? モデルパラレル編
今日コードで紹介するのはConvのチャネル方向の分割
Chainerでは最も簡単に実装が可能
Chainerにおける分散学習
28
29
GPU情報を格納する
オブジェクトを作成
0番以外のGPUのデータを空にする
既存のオプティマイザをマルチノード
用のモジュールでラップする
(ただし、これはchannel-wiseのモデ
ルパラレルではあってもなくても動く)
30
ログの保存などはGPU0番のみ
行うように変更
繰り返し用データセットをマルチノード
用のモジュールでラップ
31
普通のConvをラップする
クラスを定義
32
Convをマルチノード用Convに置き換えて
communicator(GPU情報を格納する
オブジェクト)を読み込ますだけ!
? モデルパラレル編
既存のコードに6ステップ手を加えるだけ!
(多そうに見えるがコピペと置換なので作業時間は5分くらい)
やった!これでモデルパラレル分散学習が出来る!!
Chainerにおける分散学習
33
? モデルパラレル編
既存のコードに6ステップ手を加えるだけ!
(多そうに見えるがコピペと置換なので作業時間は5分くらい)
やった!これでモデルパラレル分散学習が出来る!!
But...
チャンネル方向のモデルパラレルは一度処理したもの全てを
集約する必要があるため、GPU間通信がボトルネックに。。。
4GPUを使って分割するとDCGAN(CIFAR-10)では2倍弱
VGG-16(CIFAR-10)では3倍弱1GPUに比べて時間がかかる
Chainerにおける分散学習
34
? Optuna編
Optunaを分散学習に用いる際は、データパラレルの場合は
シンプルに複数GPUで計算した値をバックワードするために
集約する際のロスを集計して最適化を行う
が、しかし。。。
Chainerにおける分散学習
35
? Optuna編
実行する予定だったのですが、うまく動かせていないです
以下にOptunaを分散学習環境下で実行するためのページを
貼っておきますので、興味ある人はそこを見てください。。。
(Advent Calenderでコード解説を行おうと思っているので、
そこでやる予定です)
[10]東工大 第1回 ディープラーニング分散学習ハッカソン Optuna資料リンク集” https://
gist.github.com/toshihikoyanase/e7a2b2635fddfda91064e2e21a106987”
Chainerにおける分散学習
36
Contents
? 分散学習とは?
? Chainerにおける分散学習
? PyTorchにおける分散学習
? おまけ
37
Contents
? おまけ
? マルチGPUでのBatch Normalization
? モデルパラレルで速度は速くなるか!?
38
? マルチGPUにおけるBatch Normalization
Batch Normalizationはバッチ数ごとの平均や分散を計算し
て正規化を行う処理である
しかしデータパラレルではどうだろうか?
→各GPUにデータがばらばらに割り振られているため、各
GPUが計算する平均や分散が変わってしまう
おまけ
39
? マルチGPUにおけるBatch Normalization
Batch Normalizationはバッチ数ごとの平均や分散を計算し
て正規化を行う処理である
しかしデータパラレルではどうだろうか?
→各GPUにデータがばらばらに割り振られているため、各
GPUが計算する平均や分散が変わってしまう
各GPUのデータを引っ張ってきて総ミニバッチを用いた
Batch Normalizationを行う
これは非常に簡単!(公式実装に感謝!)
おまけ
40
41
実装は複雑で長いので省略するが、この公式
実装のクラスを読み込むだけ!
42
Batch Normをマルチノード用Batch Norm
に置き換えてcommunicator(GPU情報を格
納するオブジェクト)を読み込ますだけ!
? マルチGPUにおけるBatch Normalization
たった2ステップでデータパラレルのBatch Normaliationが
実装できてしまった!(改めて公式実装に感謝!)
気になる計算時間はDCGAN(CIFAR-10)程度では10%程
計算時間が増大する程度であまり気になるほどではないが、
ImageNetや1024x1024画像になるとGPU間通信がボトル
ネックとなりさらに遅くなる可能性はあり
おまけ
43
? モデルパラレルで速度は速くなるか!?
先に結論を述べてしまうと”今は”No
しかし、分割方法によっては計算速度の低下を緩和させるこ
とは可能である
例えば、先ほどのchannel-wiseの分割は全ての値を一度全
GPUで共有する作業が必要だったので、GPU間通信がボトル
ネックとなってしまっていた
おまけ
44
? モデルパラレルで速度は速くなるか!?
? ノードごとの分割
? 層ごとの分割
? チャネル方向の分割
? 空間方向の分割[9] etc...
おまけ
45
Cat
ch
w
h
? モデルパラレルで速度は速くなるか!?
今は基本的に3x3Convが主流となっているので、3x3Conv
を考えてみましょう
おまけ
46
右図のように他のGPUに
載っている画素にまたがる
ようにConvを掛けたい場合
は境界部±2個分の値だけを
通信すればよい
→1024x1024の画像など
では顕著に高速化が
見込める可能性がある!
1.Parallel Convolution,” https://github.com/chainer/chainer/tree/master/example
s/chainermn/parallel_convolution”
2.Don’t Decay the Learning Rate, Increase the Batch Size,” https://openrevi
ew.net/pdf?id=B1Yy1BxCZ”
3.Scaling SGD Batch Size to 32K for ImageNet Training,” https://www2.eecs.b
erkeley.edu/Pubs/TechRpts/2017/EECS-2017-156.pdf”
4.Preferred Networks、深層学習の学習速度において世界最速を実現,” https://ww
w.preferred-networks.jp/ja/news/pr20171110”
5.世界最高速を達成!ディープラーニングの高速化技術を開発,” https://pr.fujitsu.co
m/jp/news/2019/04/1.html”
6.Model Parallel on ChainerMN,” https://docs.chainer.org/en/stable/chainermn/
model_parallel/model_parallel_on_chainermn.html”
7.分散学習基礎講座,https://www.cc.u-tokyo.ac.jp/events/lectures/111/20190124-1.p
df
8.分散深層学習パッケージ ChainerMN 公開,” https://research.preferred.jp/2017/0
5/chainermn-beta-release/”
9.BEYOND DATA AND MODEL PARALLELISM FOR DEEP NEURAL NETWORK
S, “https://www.sysml.cc/doc/2019/16.pdf”
10.東工大 第1回 ディープラーニング分散学習ハッカソン Optuna資料リンク集”
https://gist.github.com/toshihikoyanase/e7a2b2635fddfda91064e2e21a106987”
参考文献
47
48
Thank you for attention

More Related Content

分散学习のあれこれ~データパラレルからモデルパラレルまで~