LLM推論のVRAM計算
入力
| パラメータ数 | 7 |
|---|---|
| 重みの精度 | FP16 / BF16(16ビット) |
| 実行時オーバーヘッド | 20 % |
LLM推論のVRAM計算
大規模言語モデルを推論で動かすのに必要なGPUのVRAMを、パラメータ数、重みの精度、KVキャッシュや活性化、断片化のための実行時オーバーヘッドから見積もります。
入力
モデル
実行環境
結果
値を入力すると計算結果が表示されます。
詳細
LLM推論のVRAM
大規模言語モデルを動かすことは、率直な問いから始まります。これはGPUに収まるのか、という問いです。その答えはモデルの重みに支配されますが、重みだけでは必要量を過小評価してしまいます。推論サーバーはKVキャッシュ、各レイヤーを流れる活性化、そして断片化で失われるいくらかのメモリも保持しなければならないからです。本ツールは、パラメータ数、重みを保存する精度、そして残りを1つの調整可能な数値にまとめる実行時オーバーヘッドの3つの入力から、合計VRAMを見積もります。
重みが下限を決める
モデルの重みは、メモリ上で最大の固定コストです。各パラメータは選択された精度で保存されます。フル16ビットの重みは1つあたり2バイト、8ビット量子化は1バイト、4ビットは半バイトを占めます。したがって、十億単位のパラメータ数 を ビットで保存すると、次のメモリを占めます。
W=8N⋅b GB10億個の16ビットパラメータはちょうど2 GBであり、これが7Bモデルが重みだけで14 GBを必要とする理由です。ビット数を8で割るとビットがバイトに変換され、パラメータが十億単位、メモリがギガバイト単位で数えられるため、単位はそのまま揃います。
実行時オーバーヘッドを加える
重みは下限にすぎません。推論時、サーバーは処理中のすべてのトークンについてアテンションのキーとバリューを保持するKVキャッシュを保ち、各リクエストがレイヤーを通過する際に活性化を確保し、断片化でいくらかのメモリを失います。合計は次のようになります。
V=W⋅(1+o)ここで は重みサイズに対する割合で表したオーバーヘッドです。KVキャッシュは最も大きく変動が激しい要素であり、コンテキスト長と同時リクエスト数とともに増えるため、適切なオーバーヘッドはワークロードに大きく依存します。20パーセントは、短いプロンプトを控えめなバッチサイズで処理する場合の妥当な出発点です。長コンテキストで高スループットのサービングでは、これがはるかに高くなることがあります。
計算例
700億パラメータのモデルを16ビット精度、20パーセントのオーバーヘッドで動かす場合を考えます。
WV=87×16=14 GB=14×(1+0.20)=16.8 GB16.8 GBの合計は24 GBのカードには余裕で収まりますが、16 GBのカードでは余地がありません。同じモデルをより小さなGPUで動かすには、8ビットに下げると重みが7 GBに半減し、合計は8.4 GB付近まで下がります。モデルサイズと精度の関係は量子化によるモデルサイズの計算でさらに詳しく扱っています。
モデルを収めるには
メモリは重みあたりのビット数に直接比例するため、量子化が最も直接的なレバーです。16ビットから8ビットへで重みのメモリは半分になり、8ビットから4ビットへでさらに半分になります。通常、出力品質の低下はわずかで許容できる範囲です。量子化したモデルでも1つのアクセラレータを超える場合、選択肢は複数のGPUへ重みを分割するか、急激な速度低下を伴いながらモデルの一部をシステムメモリへオフロードすることです。モデルに必要なアクセラレータの数を見積もる方法はモデルに必要なGPU台数の計算で扱っています。ここでの数値は計画段階の見積もりとして扱い、実際のサービング実行で確認してください。フレームワーク、コンテキスト長、バッチサイズのいずれもが真の数値を動かすからです。
よくある質問 (FAQ)
実行時オーバーヘッドは何をまかなっていますか?
重みのほかに、推論サーバーは、処理中のすべてのトークンについてアテンションのキーとバリューを保持するKVキャッシュ、各リクエストがレイヤーを通過する際に生じる活性化、そしてメモリの断片化で失われるいくらかの余白を保持しなければなりません。KVキャッシュは最も大きく変動が激しい部分です。コンテキスト長と同時リクエスト数とともに増えるため、長いプロンプトや大きなバッチを扱うサーバーは、20パーセントという既定値が示すよりもはるかに多くを必要とすることがあります。
単一のオーバーヘッドの割合は、これらすべてを1つの調整可能な数値にまとめています。
モデルが特定のGPUに収まるかどうかはどう判断しますか?
合計VRAMの見積もりを対象アクセラレータのメモリと比較し、OSとドライバのための余裕を残します。70億パラメータのモデルを16ビットで動かすにはオーバーヘッド込みでおよそ17 GBが必要で、これは24 GBのカードには余裕で収まりますが、16 GBのカードには収まりません。見積もりが1枚のGPUを超える場合、モデルを量子化するか、複数のGPUに分割するか、大きな速度低下を伴いながらシステムメモリへ部分的にオフロードする必要があります。
量子化でどれくらいのメモリを節約できますか?
メモリは重みあたりのビット数に直接比例するため、16ビットから8ビットへ移ると重みのメモリは半分になり、4ビットへ移ると4分の1になります。130億パラメータのモデルは16ビットでは重みに約26 GB必要ですが、8ビットでは13 GB、4ビットではおよそ6.5 GBで済みます(いずれもオーバーヘッド前)。精度を下げると、8ビットや4ビットでは出力品質の低下がわずかで通常許容できる範囲のまま、より大きなモデルを小さなカードに収められます。
免責事項
これは一次近似の見積もりです。実際のVRAMは、サービングのフレームワーク、コンテキスト長、バッチサイズ、KVキャッシュの精度に依存し、ここではそれらすべてを単一のオーバーヘッドの割合にまとめています。ハードウェアには余裕を持たせて選定し、実際のワークロードで確認してから決定してください。