ラビットチャレンジ【深層学習Day4】~軽量化・高速化技術~

概要

様々な深層学習モデルがあるが、実社会で使用するとなると軽量かつ高速化にする必要がある

軽量化・高速化には様々な技術があり用途によって選択する必要がある

複数の計算資源(ワーカー)を使用やデータ並列化、モデル並列化、GPUによる高速技術は不可欠である

この章では以下の項目を学んだ

・データ並列

・モデル並列

GPU

量子化

・蒸留

・プルーニング

・Neural architecture search(appendix)

データ並列化

親モデルを各ワーカーに子モデルとしてコピーする。データを分割し、各ワーカーごとに計算させる(データが多い時に効率がよくなる)

同期型

各ワーカーが計算が終わるのを待ち、全ワーカーの勾配が出たところで勾配の平均を計算し、親モデルのパラメータを更新する。

非同期型

各ワーカーはお互いの計算を待たず、各子モデルごとに更新を行う。学習が終わった子モデルはパラメータサーバにPushされる。新たに学習を始める時は、パラメータサーバからPopしたモデルに対して学習していく。

モデル並列化

親モデルを各ワーカに分割し、それぞれの学習が終わったら1つのモデルに復元する(モデルのパラメータが多い時に効率がよくなる)

f:id:Maruring:20210717195831p:plain

GPU

元はグラフィックスの用途で使用していたが、簡単な並列処理が得意であるため行列計算がメインとなる深層学習に活用されている

量子化

通常のパラメータ64bit(8byte)浮動小数点を32bit(4byte)などの下位の精度におとすことでメモリを節約する

基本的に16bit(半精度)で問題ないと言われる

メリット:計算の高速化・省メモリ化

デメリット:精度の低下

蒸留

規模の大きなモデルの知識を使い軽量のモデル作成を行う

具体的には、、、

教師モデル(精度の高い複雑なモデル)と生徒モデル(教師モデルを元に作られる軽量モデル)の2つで構成される

f:id:Maruring:20210717200813p:plain

プルーニング

モデルの精度に寄与が少ないニューロンの削除を行う

ニューロンを消す閾値は自分で設定する

f:id:Maruring:20210717201928p:plain

Neural architecture search

NNのアーキテクチャ自体を最適化する

「探索空間はどこか」、「探索戦略は何か」、「どうやってパフォーマンスを推定するか」に着目する