このトピックでは、モデルの推論とファインチューニングに必要な GPU メモリに影響を与える要因について説明し、必要な GPU メモリを推定する方法について説明します。
簡易 GPU メモリ推定ツール
このトピックでは、一般的な計算方法に基づいて、モデルのデプロイメントとファインチューニングに必要な GPU メモリを推定する方法について説明します。実際の GPU メモリ使用量は、モデルのネットワーク構造とアルゴリズムの違いにより異なる場合があります。
DeepSeek-R1-671B などの Mixture-of-Experts (MoE) モデルの場合、671B 個のパラメーターすべてをロードする必要があります。ただし、推論中にアクティブ化されるパラメーターは 37B 個のみです。したがって、活性化値に必要な GPU メモリを計算する際には、37B のパラメーター数を使用する必要があります。
モデルをファインチューニングする場合、通常、モデルパラメーター、活性化値、勾配を格納するには 16 ビット精度が使用され、オプティマイザーの状態を格納するには 32 ビット精度が使用されます。
推論
| シナリオ | 必要な GPU メモリ (GB) |
|---|---|
| 推論 (16 ビット) | - |
| 推論 (8 ビット) | - |
| 推論 (4 ビット) | - |
ファインチューニング
| シナリオ | 必要な GPU メモリ (GB) |
|---|---|
| フルファインチューニング | - |
| LoRA ファインチューニング | - |
| QLoRA (8 ビット) ファインチューニング | - |
| QLoRA (4 ビット) ファインチューニング | - |
モデル推論の GPU メモリに影響を与える要因
モデル推論に必要な GPU メモリは、次のコンポーネントで構成されます。
モデルパラメーター
モデル推論中、モデルパラメーターは GPU メモリに格納する必要があります。必要な GPU メモリは、次の数式を使用して計算されます: パラメーター数 × パラメーター精度。一般的なパラメーター精度には、FP32 (4 バイト)、FP16 (2 バイト)、BF16 (2 バイト) があります。大規模言語モデル (LLM) の場合、モデルパラメーターは通常、FP16 または BF16 精度で格納されます。たとえば、FP16 精度の 7B モデルには、次の量の GPU メモリが必要です。
活性化値
ここで、
b (バッチサイズ): 1 回のリクエストのバッチサイズ。この値は通常、オンラインサービスでは 1 ですが、バッチ処理では大きくなる可能性があります。
s (シーケンス長): 入力トークンと出力トークンの数を含む合計シーケンス長。
h (隠れ層のサイズ): モデルの隠れ層のディメンション。
L (レイヤー): モデル内の Transformer レイヤーの数。
param_bytes: 各活性化値を格納するために使用されるバイト数。通常は 2 バイトです。
実際のエクスペリエンスと上記の要因に基づいて、マージンを含めることで GPU メモリの推定を簡略化できます。たとえば、b が 1、s が 2048、param_bytes が 2 バイトの 7B モデルの場合、活性化値の GPU メモリは、モデルが使用する GPU メモリの 10% であると大まかに推定できます:
KV キャッシュ
LLM 推論を高速化するために、各 Transformer レイヤーで計算されたキー (K) と値 (V) がキャッシュされます。これにより、各タイムステップですべての履歴トークンのアテンションメカニズムパラメーターが再計算されるのを防ぎます。KV キャッシュを使用すると、計算の複雑さが
パラメーターは次のように記述されます。
2: 格納される 2 つの行列、キー (K) と値 (V) を表します。
b (バッチサイズ): 1 回のリクエストのバッチサイズ。この値は通常、オンラインサービスでは 1 ですが、バッチ処理では大きくなる可能性があります。
s (シーケンス長): 入力トークンと出力トークンの数を含む合計シーケンス長。
h (隠れ層のサイズ): モデルの隠れ層のディメンション。
L (レイヤー): モデル内の Transformer レイヤーの数。
C (同時実行性): サービスインターフェイスリクエストの同時実行の度合い。
param_bytes: 各値を格納するために使用されるバイト数。通常は 2 バイトです。
実際のエクスペリエンスと上記の要因に基づいて、GPU メモリの推定を簡略化し、マージンを含めることができます。たとえば、C が 1、b が 1、s が 2,048、param_bytes が 2 バイトの 7B モデルの場合、KV キャッシュの GPU メモリは、モデルの GPU メモリ使用量の 10% と大まかに推定できます。これは
その他の要因
上記の要因に加えて、現在のバッチの入力データ、CUDA コンテキスト、および PyTorch や TensorFlow などの深層学習フレームワーク自体も GPU メモリを消費します。このオーバーヘッドは通常 1 GB から 2 GB です。
この分析に基づくと、7B LLM を推論用にデプロイするために必要な最小 GPU メモリは、およそ次のようになります。
モデルのファインチューニングにおける GPU メモリに影響を与える要因
モデルのファインチューニングに必要な GPU メモリは、以下のコンポーネントに依存します。
モデルパラメーター
ファインチューニング中、モデルパラメーターは GPU メモリに格納する必要があります。メモリ使用量は、次の数式を使用して計算されます: パラメーター数 × パラメーター精度。一般的なパラメーター精度には、FP32 (4 バイト)、FP16 (2 バイト)、BF16 (2 バイト) があります。大規模言語モデル (LLM) の場合、モデルパラメーターは通常、ファインチューニング中に FP16 または BF16 精度で格納されます。たとえば、FP16 精度を使用する 7B パラメーターモデルには、次の量の GPU メモリが必要です。
勾配パラメーター
モデルトレーニングの後方伝播フェーズでは、モデルパラメーターの勾配が計算されます。勾配の数は、トレーニングされているパラメーターの数と等しくなります。LLM は通常、これらの勾配を 2 バイト精度で格納します。したがって、7B モデルに必要な GPU メモリは、ファインチューニングの方法によって異なります。
ファインチューニングメソッド | トレーニングメカニズム | シナリオ | 7B モデルのファインチューニングにおける勾配用の GPU メモリ (パラメーターの 1% で計算、2 バイトストレージ) |
フルパラメーターファインチューニング | トレーニング可能なパラメーターの数は、モデルパラメーターの総数と同じです。 | 十分な計算能力があり、高精度が要求される場合。 | 14 GB |
LoRA (Low-Rank Adaptation) | LoRA ファインチューニングは、元のモデルパラメーターを凍結し、低ランク行列のみをトレーニングします。トレーニング可能なパラメーターの数は、モデルの構造と低ランク行列のサイズに依存し、通常、モデルパラメーター全体の約 0.1% から 1% を占めます。 | 低リソースで特定のタスクに適応する場合。 | 0.14 GB |
QLoRA (量子化 + LoRA) | 事前学習済みモデルを 4 ビットまたは 8 ビットに圧縮し、LoRA を使用してモデルをファインチューニングし、二重量子化とページングされたオプティマイザーを導入して GPU メモリ使用量をさらに削減します。トレーニング可能なパラメーターの数は、通常、モデルパラメーター全体の約 0.1% から 1% です。 | 非常に大規模なモデルのファインチューニング。 | 0.14 GB |
オプティマイザーの状態
トレーニング中にオプティマイザーの状態も保存する必要があります。必要なメモリ量は、トレーニング可能なパラメーターの数によって異なります。モデルはしばしば混合精度トレーニングを使用します。この方法では、モデルパラメーターと勾配は 2 バイトストレージを使用し、オプティマイザーの状態は 4 バイトストレージを使用します。このアプローチは、パラメーター更新中に高精度を維持し、FP16 または BF16 の限られたダイナミックレンジによって引き起こされる数値の不安定性やオーバーフローを防ぎます。さらに、状態に 4 バイトストレージを使用すると、必要な GPU メモリが 2 倍になります。次の表は、一般的なオプティマイザーについて説明しています。
オプティマイザーの種類 | パラメーター更新メカニズム | 必要な追加ストレージ (トレーニング可能なパラメーターごと) | シナリオ | 7B モデルのファインチューニングにおけるオプティマイザーの状態のための GPU メモリ (4 バイトストレージ) | ||
フルパラメーターファインチューニング | LoRA ファインチューニング (パラメーターの 1% で計算) | QLoRA ファインチューニング (パラメーターの 1% で計算) | ||||
SGD | 現在の勾配のみを使用 | 0 (追加の状態なし) | 小規模なモデルまたは実験 | 0 | 0 | 0 |
SGD + Momentum | モーメンタム項あり | 1 つの浮動小数点数 (モーメンタム) | 安定性の向上 | 28 GB | 0.28 GB | 0.28 GB |
RMSProp | 適応学習率 | 1 つの浮動小数点数 (二次モーメント) | 非凸最適化 | 28 GB | 0.28 GB | 0.28 GB |
Adam/AdamW | モーメンタム + 適応学習率 | 2 つの浮動小数点数 (一次および二次モーメント) | LLM で一般的に使用される | 56 GB | 0.56 GB | 0.56 GB |
活性化値
トレーニング中、後方伝播中に勾配を計算するために、前方伝播パスからの中間活性化値を格納する必要があります。このコンポーネントの GPU メモリ消費量は、バッチサイズ、シーケンス長、およびレイヤー数や隠れ層のサイズなどのモデルアーキテクチャと正の相関があります。この関係は、次の数式で表すことができます:
パラメーターは次のように記述されます。
b (バッチサイズ): バッチサイズ。
s (シーケンス長): 入力と出力、またはトークンの数を含む合計シーケンス長。
h (隠れ層のサイズ): モデルの隠れ層のディメンション。
L (レイヤー): モデル内の Transformer レイヤーの数。
param_bytes: 活性化値を格納するための精度。通常は 2 バイトです。
実際のエクスペリエンスと上記の要因に基づいて、GPU メモリの推定を簡略化し、マージンを含めることができます。たとえば、b = 1、s = 2048、param_bytes = 2 バイトの 7B モデルの場合、活性化値の GPU メモリは、モデルが使用する GPU メモリの 10% と大まかに推定できます:
その他の要因
上記の要因に加えて、他のコンポーネントも GPU メモリを消費します。これらのコンポーネントには、現在のバッチの入力データ、CUDA コア、および PyTorch や TensorFlow などの深層学習フレームワークが含まれます。この使用量は通常、追加で 1 GB から 2 GB の GPU メモリを消費します。
この分析に基づくと、7B LLM をファインチューニングするために必要な GPU メモリのおおよその量は次のとおりです。
ファインチューニングメソッド | モデル用の GPU メモリ | 勾配用の GPU メモリ | Adam オプティマイザーの状態 | 活性化値 | その他 | 合計 |
フルパラメーターファインチューニング | 14 GB | 14 GB | 56 GB | 1.4 GB | 2 GB | 87.4 GB |
LoRA (Low-Rank Adaptation) | 14 GB | 0.14 GB | 0.56 GB | 1.4 GB | 2 GB | 18.1 GB |
QLoRA (8 ビット量子化 + LoRA) | 7 GB | 0.14 GB | 0.56 GB | 1.4 GB | 2 GB | 11.1 GB |
QLoRA (4 ビット量子化 + LoRA) | 3.5 GB | 0.14 GB | 0.56 GB | 1.4 GB | 2 GB | 7.6 GB |
LLM は通常、Adam または AdamW オプティマイザーを使用します。
表では、QLoRA モデルは 4 ビットまたは 8 ビット精度で格納され、オプティマイザーの状態は 32 ビット (4 バイト) 精度で格納されます。他のすべてのパラメーターは 16 ビット (2 バイト) 精度で格納されます。
よくある質問
Q: 大規模モデルのパラメーター数を確認するにはどうすればよいですか?
オープンソースの大規模モデルの場合、パラメーター数は通常モデル名に指定されています。たとえば、Qwen-7B には
Q: 大規模モデルのパラメーター精度を確認するにはどうすればよいですか?
特に指定がない限り、大規模モデルは通常 16 ビット (2 バイト) ストレージを使用します。量子化モデルは 8 ビットまたは 4 ビットストレージを使用する場合があります。詳細については、モデルのドキュメントをご確認ください。たとえば、PAI Model Gallery のモデルを使用する場合、その製品ページには通常、パラメーター精度が記載されています。
Qwen2.5-7B-Instruct のトレーニング手順:

Q: 大規模モデルのファインチューニングに使用されるオプティマイザーと状態の精度を確認するにはどうすればよいですか?
大規模モデルのトレーニングでは、通常 Adam または AdamW オプティマイザーを使用します。パラメーター精度は 32 ビット (4 バイト) です。より詳細な構成については、起動コマンドまたはコードを確認できます。
Q: GPU メモリ使用量を確認するにはどうすればよいですか?
PAI-DSW、PAI-EAS、または PAI-DLC のグラフィカルモニタリングページで GPU メモリ使用量を確認できます。

または、コンテナーのターミナルで nvidia-smi コマンドを実行して GPU の使用状況を表示することもできます。

Q: GPU メモリ不足でよくあるエラーは?
NVIDIA GPU メモリが不足すると、「CUDA out of memory. Tried to allocate X GB」エラーが発生します。このエラーが発生した場合は、GPU メモリを増やすか、バッチサイズやシーケンス長などのパラメーターを減らすことができます。