Open shimopino opened 4 years ago
hi,have you think how to speed up the transformer model inference?it is slow, hope you give me some advices
There are several papers that mention the acceleration of transformer. By tracing these papers and the papers they refer to, I think you can get some tips on speeding up.
Alternatively, it can be speeded up by distilling, pruning, quantanizing the model.
論文へのリンク
[arXiv:2002.11794] Train Large, Then Compress: Rethinking Model Size for Efficient Training and Inference of Transformers
著者・所属機関
Zhuohan Li, Eric Wallace, Sheng Shen, Kevin Lin, Kurt Keutzer, Dan Klein, Joseph E. Gonzalez
投稿日時(YYYY-MM-DD)
2020-02-26
1. どんなもの?
Transformerを学習させる際、小さなサイズのモデルで学習回数を増やすよりも大きなサイズのモデルを学習させたほうが収束を速めることができることを実験的に示した。また大きなサイズのモデルは量子化や枝切りに対してもよりロバストであることを示した。
2. 先行研究と比べてどこがすごいの?
計算の効率を考え直す必要あり。暗黙的な仮定として、収束するまで学習を続ける必要があり、計算資源が限られている状況では大きなモデルを学習させることが難しい。
実験によってモデルサイズを大きくし学習を早めに止めることで、Transformerの学習の収束速度を向上できることを示した。
一般的にモデルのサイズを大きくすると計算コストと消費メモリが増大してしまい実応用が難しくなる。しかし、最初に大きなモデルを学習させると、圧縮した際の精度減少が小さなモデルと比較して小さくなる。
3. 技術や手法の"キモ"はどこにある?
3.1 Larger Models Train Faster
Transformerで使用する隠れ層の次元数と合計の層数を増大させることで、小さなモデルを学習させる場合と比較して最終的には早く学習を収束させることができる。
モデルを大きくする際は、以下の指針に従って行う。
3.1.1 Increase Model Width and Sometimes Depth
経験的には層を深くするよりも隠れ層の次元数を増やすことでより高い精度を達成できることが知られている。
3.1.2 Increase Model Size, Not Batch Size
バッチサイズを大きくさせることでより高い精度を達成できることが知られているが、バッチサイズの大小は、精度とモデルの計算速度とのトレードオフの関係にある。
本研究ではモデルのサイズを大きくする代わりに、勾配のaccumulationを使用してバッチサイズを大きくすることで学習速度がどのように変化するのか検証している。
バッチサイズを増大させることでパラメータの更新回数は少なくなっているが、学習に要した時間は2048以上のバッチサイズではそれほど変化していない。
またバッチサイズを大きくしていくと学習率のチューニングが必要になる。そのため適度なサイズのバッチサイズを探索できた後は、モデルサイズを大きくしていくことで学習の収束を早めることができる。
3.1.3 Larger Models Are Not Harder to Finetune
大きなモデルで学習を行うと、異なるタスクに対してfine-tuningで高い精度を達成するのに要する時間が増大する可能性がある。そこでモデルサイズを変更して、fine-tuningで同じ精度に達成する時間を比較した。
結果よりモデルのサイズによってfine-tuningで達成できる精度には違いがないことがわかる(あるいは大きなモデルのほうが精度が高い)。
3.1.4 Returns Diminish As Size Increases
モデルのサイズを大きくしすぎると収束が遅くなる。これはモデルが大きくなればなるほど、1ステップごとの改善が減っていくからである。また計算コストの増大も影響している。
3.1.5 Compression Methodology and Evaluation
4. どうやって有効だと検証した?
なぜTransformerのサイズを大きくすると学習速度が速くなり、圧縮しても精度が落ちずらいかを検証した。
4.1 Fast Minimization and the Role of Overfitting
経験的にはモデルのサイズを大きくすることで、学習データに対して高い精度をより速く達成することができ、結果的にテストデータに対して早い段階で高い精度を達成できると考えられる。
実際、巨大なコーパスデータを大きなモデルで学習させる際の課題となるのは、過剰適合ではなくデータにうまく適合させることであり、巨大なモデルは過剰適合による学習速度の低下の現象が発生しづらいと考えられる。
イメージ的にはモデルのサイズはモデルの表現能力とリンクするので、小さなモデルはすぐに限界に達してしまうが、大きなモデルは巨大なデータセットに対して十分な表現能力を有しているからと考えられる。
4.2 Manageable Compute Costs for Large Models
近年ではGPUやTPUを使用することで高速な計算が可能である。モデルが大きいと計算コストよりもメモリ数の問題が大きくなってくる。
したがって、より大きなモデルの方が利用可能な計算機を十分に利用しているため,速度低下がサブリニアになることある。
また、より大きなモデルでは勾配の蓄積によって、計算に必要なメモリ数とのトレードオフを維持しながら、大規模モデルの利益を得ることができる。
4.3 Smaller Compression Error for Larger Models
では大きなモデルはなぜ精度を落とすことなく圧縮が可能なのかを検証していく。
まずはモデルを量子化させた際に精度がどのように変化するのかを見ていく(具体的には32ビットと4ビットのRoBERTaのモデルを比較する)。
結果としてTransformerのどのモジュールにおいても、大きなサイズのモデルのほうが量子化した場合のパラメータの変化が小さく、より高精度に圧縮できていることがわかる。
また元のモデルから60%を枝切りによって削減したパラメータを元のモデルのパラメータと比較すると、大きなモデルのほうがパラメータの変化が小さいことがわかる。
5. 議論はあるか?
6. 次に読むべき論文はあるか?
論文情報・リンク