[NLP] LLM トレーニング中の GPU メモリ消費量の推定

推論

推論だけであれば比較的簡単に計算できます。

現在のモデルのパラメータのほとんどはfloat32型であり、4 バイトを占めます。したがって、大まかな計算方法は、10 億パラメータごとに 4G のビデオ メモリを占有することになります(実際には10^9*4/1024/1024/1024=3.725G、便宜上 4G として記録する必要があります)。

たとえば、LLaMA のパラメータ量が 7000559616 である場合、モデル パラメータを完全な精度でロードするために必要なビデオ メモリは次のようになります。

7000559616 * 4 /1024/1024/1024 = 26.08G   

半精度FP16/BF16を使用してロードすると、各パラメータが占有するのは 2 バイトだけになり、必要なビデオ メモリは半分に減り、13.04G のみが必要になります。

現時点では int4 が最も精度が低く、それ以上の効果を保証することは困難です。たとえば、Baichuan によって得られた定量的な結果は次のように比較されます。

 上記はモデルをビデオ メモリにロードするだけであり、ビーム検索時など、モデル計算中の一部の一時変数もスペースに適用する必要があることに注意してください。したがって、実際に推論を行うときは、必ずバッファーを残しておくようにしてください。そうしないと、OOM が発生しやすくなります。

ビデオ メモリが十分でない場合は、Memery Offload テクノロジを使用してビデオ メモリの内容の一部を内部メモリに移動することしかできませんが、これにより推論速度が大幅に低下します。

dtype 10億パラメータごとに必要なメモリ
float32 4G
FP16/BF16 2G
あなた8 1G
int4 0.5G

 

2 つのモデルのトレーニング

LLM で最も一般的なものをAdam + fp16混合精度训练例として挙げると、そのメモリ使用量の分析は次の 4 つの部分で構成されます。

 

 

GPT-2 には 1.5B のパラメータが含まれており、fp16 フォーマットを使用する場合、必要なビデオ メモリは 1.5G*2Byte=3GB だけですが、モデル状態では実際には 1.5B*16=24GB を消費する必要があります。

たとえば、パラメーター サイズが 1M のモデルがある場合、一般的な深層学習フレームワーク (PyTorch など) では、通常 32 ビットで格納されます。32 ビットストレージとは、1 つのパラメータを 32 ビットで保存することを意味します。この場合、1M パラメータを持つこのモデルに必要なストレージ容量は、1M * 32 ビット = 32Mb = 1M * 4Byte = 4MB となります。1バイト = 8ビットだからです。現在の量子化テクノロジは、パラメータ量が占めるビット数を減らすことです。たとえば、16 ビット ストレージを使用する場合、必要なストレージ スペースのサイズは、1M * 16 ビット = 16Mb = 2MB となります。

結論は以下の通りです。

  • アクティベーションに関係なく、3090 のモデル容量の上限は 24/16=1.5B、A100 のモデル容量の上限は 80/16=5B となります。
    • トレーニング プロセス中にバッチサイズが 1 で一定であると仮定すると、つまり、理論上の計算値が実際のビデオ メモリ使用量に近づくように、ビデオ メモリ内のアクティベーションの割合を可能な限り減らすと、上限16Φは24G 3090のモデル容量は1.5B(ほぼGPT-2レベル)、80G A100のモデル容量の上限は5B
  • アクティベーションを考慮した場合、3090 のモデル容量の上限は 0.75B、A100 の容量の上限は 2.5B となります。
    • バッチサイズが 1 の場合のトレーニング効率は非常に低く、バッチサイズが 1 より大きい場合にのみ GPU の効率を最大限に活用でき、このとき Activation は無視できません。経験上、一般にアクティベーション用にビデオ メモリ容量の半分を確保する必要があります (例: 3090 では 12G、A100 では 40G)。このとき、3090 のモデル容量の上限は 0.75B、 A100 の容量の限界は 2.5B であり、実際のテスト結果はこの値に近いです
    • アクティベーションはトレーニング中に大量のビデオ メモリを消費します。具体的な例として、モデルが 1.5B の GPT-2、シーケンス長が 1K、バッチサイズが 32 の場合、メモリ消費量は 60GB になります。
  • [1B、5B] は、現在市場にあるほとんどの GPU カードの分水嶺範囲です。
    • [0、1B) 市場に出ているほとんどのカードは直接ハードトレーニングできます
    • [1B、5B] ほとんどのカードは、この範囲内の特定の値でモデル容量の上限をトリガーします。特定のトリガー値はビデオ メモリのサイズに関連します。
    • (5B, ~) 現在、全裸調教用のカードはありません

LLM トレーニングの GPU メモリ消費量の推定 - Zhihu (zhihu.com)

[ディープラーニング] 大規模モデルトレーニング用フレームワーク - DeepSpeed

おすすめ

転載: blog.csdn.net/zwqjoy/article/details/132244654