ローカル環境でLLMを動かすには?必要メモリを簡単計算!
ローカルでLLM(大規模言語モデル)を構築・実行する際、必要なメモリ容量を正確に把握することは非常に重要です。メモリ不足はモデルの性能低下やシステムクラッシュの原因となりますし、過剰なメモリは無駄なコストになります。この記事では、LLMの必要メモリを計算する方法について詳しく解説します。
基本的なメモリ計算式
LLMに必要なメモリの基本計算式は以下の通りです
text
メモリ(バイト) = パラメータ数 × 精度あたりのバイト数
この式では、モデルのパラメータ数と使用する精度(量子化レベル)に基づいて必要なメモリを算出します。
精度別のメモリ要件
各精度レベルにおけるパラメータあたりのバイト数は以下のようになります。
パラメータタイプ | バイト数/パラメータ |
---|---|
Float32(FP32) | 4バイト |
Float16(FP16) | 2バイト |
BFloat16(BF16) | 2バイト |
Int8(INT8) | 1バイト |
Int4(INT4) | 0.5バイト |
実用的な計算式
実際の使用では、単純なパラメータ保存だけでなく、アクティベーション、一時バッファ、メモリフラグメンテーションなども考慮する必要があります。より実用的な計算式は以下のようになります。
必要メモリ量 = (パラメータ数(B) × 4 / (32/量子化ビット数)) × 1.2
ここで、パラメータ数はB(10億)単位で、1.2という係数は20%のオーバーヘッドを表します。
計算例
いくつかの具体例を挙げて説明します。
7Bモデルの場合
-
FP32(32ビット): (7 × 4 / (32/32)) × 1.2 = 33.6 GB
-
FP16(16ビット): (7 × 4 / (32/16)) × 1.2 = 16.8 GB
-
INT8(8ビット): (7 × 4 / (32/8)) × 1.2 = 8.4 GB
-
INT4(4ビット): (7 × 4 / (32/4)) × 1.2 = 4.2 GB
13Bモデルの場合
-
FP16(16ビット): (13 × 4 / (32/16)) × 1.2 = 31.2 GB
-
INT8(8ビット): (13 × 4 / (32/8)) × 1.2 = 15.6 GB
-
INT4(4ビット): (13 × 4 / (32/4)) × 1.2 = 7.8 GB
70Bモデルの場合
-
FP16(16ビット): (70 × 4 / (32/16)) × 1.2 = 168 GB
-
INT8(8ビット): (70 × 4 / (32/8)) × 1.2 = 84 GB
-
INT4(4ビット): (70 × 4 / (32/4)) × 1.2 = 42 GB
実際のメモリ使用量の考慮事項
理論値だけでなく、実際の運用では以下の要素も考慮する必要があります。
- KVキャッシュ
KVキャッシュはトークン生成時のパフォーマンスを向上させますが、追加のメモリを消費します。特に長いコンテキスト長や複数の同時リクエストがある場合、その影響は大きくなります。コンテキスト長に応じたKVキャッシュのメモリ要件例(FP16の場合):
モデルサイズ | 1kトークン | 16kトークン | 128kトークン |
---|---|---|---|
8B | 0.125 GB | 1.95 GB | 15.62 GB |
70B | 0.313 GB | 4.88 GB | 39.06 GB |
結論
ローカルLLMの構築には、モデルのパラメータ数と使用する精度(量子化レベル)を考慮したメモリ計算が不可欠です。基本計算式に加えて、KVキャッシュやアクティベーションメモリなどの追加要素も考慮することで、より正確なメモリ要件を見積もることができます。また複数人で同時利用する場合はKVキャッシュのメモリが人数分増えるので注意です。
Discussion