Day 4 - データ並列化、モデル並列化 のまとめ
この記事は個人的なお勉強用のメモです。
講義
高速に学習する方法
・データ並列化
・モデル並列化
・GPU
コンピュータの性能は 1.5 年で 2 倍になると言われているが
モデルの複雑さは毎年 10 倍になっている。
何らかの対策が必要。
⇒ 分散深層学習という
低性能の計算機でモデルを動かす方法
・量子化
・蒸留
・プルーニング
データ並列化
構成
親モデルを複数コピー(コピーされて生成されたものをワーカーという)。
データを分割し、ワーカーごとに学習。
ワーカーの配置は、複数のコンピュータであったり
複数の CPU や GPU であったり、それらの組み合わせであったり。
データが大きい場合はデータ並列化を採用する。
パラメータの更新方式
同期型と非同期型の 2 種類。
同期型
- 各ワーカーの学習が終わるのを待つ。
- 各ワーカーの誤差を集めて誤差の平均を求める。
- 誤差の平均を使って、親モデルのパラメータを更新する。
ワーカーの学習が終わるのを待つところが、同期型。
非同期型
ワーカーが複数存在するのは同期型と同じ。
- ワーカーは学習を終えると、学習済みのモデルをキューに push する。
- 空きのワーカーはキューから pop して学習する。
- この繰り返し。
比較
- 処理スピードは非同期の方が速い。
- 非同期は学習が不安定になりやすい(最新のモデルを利用しないため)。
- 現在は同期型が主流(精度が良いことが多いため)。
- ワーカーの性能が統一されている場合は同期型、不統一の場合は非同期型。
モデル並列化
構成
- 親モデルを分割する。
- 分割したモデルを複数のワーカーに割り当てる。
- 各ワーカーでモデルを作成する。
- 学習が終わったら各モデルをマージする。
モデルの分割方法としては、直列のモデルを途中で分割したり、
並列のモデルを分岐ごとに分割したり。
前者の分割は実は難しい。後者の分割がよく用いられる。
複数の GPU で構成することが多い。
モデルが大きい場合はモデル並列化を採用する。
効果
モデルのパラメータ数(重みの個数)が多いほど、効果が高い。
GPU(おまけ)
種類
種類 | 説明 |
---|---|
CPU | 高性能なコアが少数 複雑で連続的な処理が得意 |
GPU | 低性能なコアが多数 簡単な並列処理が得意 |
GPGPU | General-purpose GPU グラフィック以外で使用されるGPU |
GPU は NN の学習に向いている(NN は行列演算が多いため)。
GPGPU開発環境
種類 | 説明 |
---|---|
CUDA | NVIDIA社のCPUのみで使用可能 DL用に提供されているため、使いやすい |
OpenCL | NVIDIA社以外のGPUからでも使用可能 DLに特化しているわけではない |
現在は CUDA しか使われていない。
TensorFlow や PyTorch の設定をするとすぐに GPGPU が使える。
関連記事
黒本で補習。
データ並列の説明
・親モデルをコピー
・異なるバッチを各 GPU ワーカーに供給
・ワーカーからの勾配を送る先を、パラメータサーバという
同期型の特徴
・すべての GPU ワーカーが勾配を計算して平均勾配を求める
・GPU の性能に差があると無駄が生じる
・非同期型よりもスループットは低い
非同期型の特徴
・ある GPU ワーカーが計算する間にパラメータ更新される場合がある
・これを陳腐化した勾配という
・対策としては学習率を小さくする
・更新時間は最遅の GPU ワーカーに依存しない
・同期型よりもスループットは高い
モデル並列の説明
・モデルの各部分を別の GPU 上にロード
・順伝播と逆伝播の両方で通信が必要
・通信コストがボトルネック
・どのようなモデル分割がよいかは、モデルに依存
Author And Source
この問題について(Day 4 - データ並列化、モデル並列化 のまとめ), 我々は、より多くの情報をここで見つけました https://qiita.com/amateur2020/items/2116b309e2299b551a91著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .