LLMトレーニングVRAMの計算
入力
| パラメータ数 | 7 |
|---|---|
| パラメータあたりのメモリ | 混合精度Adam(16バイト/パラメータ) |
| アクティベーションメモリ | 0 |
LLMトレーニングVRAMの計算
大規模言語モデルをフルファインチューニングする際に必要なGPU VRAMを、パラメータ数・オプティマイザの選択・アクティベーションメモリから推定します。混合精度Adamの「1パラメータあたり16バイト」を基準にします。
入力
モデル
アクティベーション
結果
値を入力すると計算結果が表示されます。
詳細
LLMトレーニングのVRAM
大規模言語モデルをフルファインチューニングするには、単に実行する場合よりもはるかに多くのGPUメモリが必要で、その理由はオプティマイザにあります。推論は重みだけを保持しますが、トレーニングでは全パラメータの勾配とオプティマイザの内部状態も保持し、さらにフォワードパス中に格納されるアクティベーションを加える必要があります。この計算ツールは、パラメータ数・パラメータあたりのオプティマイザのメモリコスト・別途入力したアクティベーション量から、フルファインチューニングの合計VRAMを推定します。
モデルステートが支配的
トレーニングで最大の固定コストはモデルステート、すなわち重み・その勾配・オプティマイザステートです。十億単位のパラメータ数を 、パラメータあたりのバイト数を とすると、モデルステートは次のメモリを占めます。
M=N⋅B GBAdamを使う混合精度トレーニングの標準的な数値は1パラメータあたり16バイトで、内訳は次のとおりです。フォワードパスで使う16ビットの重みに2バイト、その16ビットの勾配に2バイト、数値的安定性のために保持する重みの32ビットのマスターコピーに4バイト、そしてAdamの2つのモーメント推定値(モメンタムと分散)にそれぞれ4バイトです。すなわち各パラメータについて になります。より安価なオプティマイザはオプティマイザステートの項を縮小します。8ビットAdamはモーメントを低精度で格納して約12バイト、モメンタム付きのプレーンなSGDは約8バイトです。
アクティベーションは別途入力する
モデルとオプティマイザが決まればモデルステートは固定ですが、アクティベーションはそうではありません。アクティベーションは、バックワードパスで勾配を計算できるようにフォワードパス中にキャッシュされる中間値であり、そのサイズはパラメータ数ではなくバッチサイズとシーケンス長に応じて増えます。この独立性のため、この計算ツールはアクティベーションメモリを独自の入力として受け取り、単純に加算します。
V=M+Aここで はアクティベーションメモリ(GB)です。アクティベーションメモリは、1回のトレーニングステップを実行してピーク使用量を読み取れば測定できます。また、アクティベーションを保持する代わりにバックワードパスで再計算するアクティベーションチェックポイントを使えば大幅に削減できます。
計算例
混合精度Adamでファインチューニングする70億パラメータのモデルを、まずはアクティベーションの見積もりなしで考えます。
MV=7×16=112 GB=112+0=112 GBモデルステートだけで112 GBとなり、すでに1枚の80 GBアクセラレータを超えています。現実的な20 GBのアクティベーションを加えると合計は132 GBになり、要点が明確になります。16ビット推論なら難なくサービングできる7Bモデルでさえ、1枚の主流GPUではフルファインチューニングできないのです。モデルを単に実行するために必要なはるかに小さいメモリについては、LLM推論のVRAM計算で扱っています。
LoRAが状況を変える理由
16バイトの大部分は勾配とオプティマイザステートであり、それらは学習対象のパラメータにしか存在しません。LoRAはベースの重みを凍結し、小さな低ランクアダプタだけを学習するため、勾配とオプティマイザステートは全パラメータの1パーセント未満しかカバーしません。凍結された重みは依然としてメモリを取りますが、最大の項を取り除くことで、フルファインチューニングに132 GBを要するモデルを1枚の24 GBカードに収められるようになります。これらのアダプタのサイズと、ランクがそれをどう制御するかについては、LoRA の学習パラメータ数を計算で扱っています。一時バッファやフレームワークのアロケーションが実際の数値を動かすため、ここで示す値は計画用の見積もりとして扱い、実際のトレーニングステップで確認してください。
よくある質問 (FAQ)
「1パラメータあたり16バイト」はどこから来るのですか?
Adamオプティマイザを使う混合精度トレーニングでは、各パラメータについて複数のコピーを保持します。フォワードパスで使う16ビットの重みに2バイト、その16ビットの勾配にさらに2バイトを使います。そのうえでAdamは、重みの32ビットのマスターコピー(4バイト)と、2つの32ビットのモーメント推定値(モメンタムと分散)をそれぞれ4バイトずつ保持します。
これらを合計すると 2 + 2 + 4 + 4 + 4 = 16 バイトとなり、フルファインチューニングにおけるモデルステートの標準的な見積もりになります。
なぜLoRAは必要メモリがはるかに少ないのですか?
フルファインチューニングは全パラメータの勾配とオプティマイザステートを保持しますが、これが16バイトの大部分を占めます。LoRAは元の重みを凍結し、小さな低ランクのアダプタ行列だけを学習するため、勾配とオプティマイザステートはごく一部のパラメータ(多くの場合1パーセント未満)にしか存在しません。
凍結されたベースの重みは依然としてメモリを占有しますが、勾配もオプティマイザステートも不要なため、最も大きい項が取り除かれます。これにより大規模モデルを1枚のGPUでファインチューニングできるようになります。これらのアダプタのサイズは、LoRAパラメータの計算で扱っています。
アクティベーションメモリはどう見積もればよいですか?
アクティベーションメモリは、バックワードパスで勾配を計算できるようにフォワードパス中に保持される中間値の格納分です。モデルステートとは異なり、パラメータ数ではなくバッチサイズとシーケンス長に応じて増えるため、ここでは別途入力します。
1回のトレーニングステップを実行してピークメモリを読み取れば直接測定できます。また、アクティベーションを保持せずバックワードパスで再計算するアクティベーションチェックポイントを使えば大幅に削減できます。おおまかな計画なら、まずゼロにしてモデルステートの下限を確認し、その後に実測値を足してください。
免責事項
これはフルファインチューニングのメモリを一次近似で推定したものです。一時バッファ・通信オーバーヘッド・フレームワーク固有のアロケーションは含まず、アクティベーションは入力された1つの値として扱います。ハードウェアを選定する前に、実際のトレーニングステップで確認してください。