質問
モデルのパラメータとそれのデータ量に応じた学習に必要なVRAMの量を教えてください。 |
解答
いいですね、ここは多くの人がつまずくポイントです。 「パラメータ数とVRAM使用量の関係」を分解して整理します。 1. 基本的な単位 * パラメータ1個のサイズ * FP32(単精度浮動小数点): 4バイト * FP16 / bfloat16: 2バイト * INT8: 1バイト 2. VRAM消費の内訳 学習時は次のものをGPUに保持します: 1. モデルの重み(Parameters) * パラメータそのもの 2. 勾配(Gradients) * 重みに対する勾配。 重みと同じサイズ 3. オプティマイザの補助データ * 例: Adam → 1次モーメント(m)、2次モーメント(v) → パラメータの2倍 * SGDだと不要(小さく済む) 4. アクティベーション(Activations) * 順伝播時の中間出力。 層が深い&バッチサイズが大きいと肥大化 3. 学習で必要なVRAMの目安 (A) SGD を使う場合 * 約 2倍(重み + 勾配 + 少しの補助) (B) Adam を使う場合 * 約 4倍(重み + 勾配 + m + v) 4. 実際の数値例(FP32の場合) 例1: 1億パラメータ(100M) * 重み: 100M × 4B = 400 MB * SGD: 約 800 MB + アクティベーション * Adam: 約 1.6 GB + アクティベーション 例2: 10億パラメータ(1B) * 重み: 4 GB * SGD: 約 8 GB + アクティベーション * Adam: 約 16 GB + アクティベーション 例3: 100億パラメータ(10B) * 重み: 40 GB * SGD: 約 80 GB + アクティベーション * Adam: 約 160 GB + アクティベーション 5. アクティベーションの影響 * 実は一番メモリを食うのは アクティベーション です。 * これは バッチサイズ × 層の深さ × 隠れ次元 に比例します。 * たとえば GPT 系モデルでは アクティベーションだけでパラメータと同等かそれ以上のVRAM が必要になります。 * そのため、大規模モデル学習では チェックポイント再計算 (activation checkpointing) を使って、アクティベーションを圧縮・再計算してVRAM節約します。 まとめ * 最低でも「パラメータサイズ × 2〜4倍」 のVRAMが必要(オプティマイザ次第) * 実際はさらに アクティベーションが乗るため、バッチサイズやモデル構造で大きく増える * だから「10Bモデルを学習したい=数百GB級のGPUメモリが必要」になる |
|
|
この記事へのコメント