7B相当のモデルの重みは、16ビットで13.0GBです。24GBのGPUなら余裕に見えます。
ところが文脈長131072・同時32でKVキャッシュを取ると2048.0GBになります。重みの157倍です。
VRAMは3つに分かれます。量子化で減るのは重みだけで、残りはそのまま残ります。
VRAM見積で足すのは重み・KVキャッシュ・作業領域の3つです。実際に計算して、内訳がどう動くかを見ました。
const weightBytes = (m, bits) => (m.params * bits) / 8; const kvBytes = (m, seq, batch, bits) => 2 * m.layers * m.kvHeads * m.headDim * seq * batch * (bits / 8);
層数とヘッド数と次元は、公開されている代表的な構成に合わせて置きました。7B相当は32層、70B相当は80層でKVヘッドが8本です。
推論に要るVRAMの内訳。文脈長 4096 ・同時実行 8 KVキャッシュは16ビットのまま。作業領域は重みの5%として置いた モデル 刻み 重み KVキャッシュ 作業領域 合計 7B相当 16bit 13.0GB 16.0GB 0.7GB 29.7GB 7B相当 8bit 6.5GB 16.0GB 0.3GB 22.8GB 7B相当 4bit 3.3GB 16.0GB 0.2GB 19.4GB 13B相当 16bit 24.2GB 25.0GB 1.2GB 50.4GB 13B相当 8bit 12.1GB 25.0GB 0.6GB 37.7GB 13B相当 4bit 6.1GB 25.0GB 0.3GB 31.4GB 70B相当(KV共有) 16bit 130.4GB 10.0GB 6.5GB 146.9GB 70B相当(KV共有) 8bit 65.2GB 10.0GB 3.3GB 78.5GB 70B相当(KV共有) 4bit 32.6GB 10.0GB 1.6GB 44.2GB
7B相当の重みは、16ビットの13.0GBから4ビットの3.3GBまで下がります。4分の1になります。
ところが合計は29.7GBから19.4GBまでしか下がりません。KVキャッシュの16.0GBが動かないからです。
70B相当のKVキャッシュは10.0GBで、7B相当の16.0GBより小さくなっています。KVヘッドを8本に絞った構成だからです。
モデルが大きいほどKVも大きい、とは限りません。KVを決めるのは層数とKVヘッドの数です。
出典もキャッシュの扱いをメモリを節約するキャッシュは、速度と引き換えにメモリ使用量を減らすことに主眼を置いていると説明しています。減らす手はありますが、無料ではありません。
量子化で減るのは重みだけ。KVキャッシュは残る。
Memory efficient caches focus on trading off speed for reduced memory usage.原文Hugging Face Transformers「Cache strategies」 この内容の有効期限2027-02-18
同じモデルでも刻みを変えると、収まるGPUが変わります。先に条件を決めないと選べません。
VRAM見積の目的は買う前に載るかどうかを知ることです。同じ条件で、よくある容量と比べました。
モデル 刻み 24GB 48GB 80GB 7B相当 16bit 載らない 載る 載る 7B相当 8bit 載る 載る 載る 7B相当 4bit 載る 載る 載る 13B相当 16bit 載らない 載らない 載る 13B相当 8bit 載らない 載る 載る 13B相当 4bit 載らない 載る 載る 70B相当(KV共有) 16bit 載らない 載らない 載らない 70B相当(KV共有) 8bit 載らない 載らない 載る 70B相当(KV共有) 4bit 載らない 載る 載る
7B相当は16ビットのままだと24GBに載りません。合計29.7GBだからです。8ビットにすれば載ります。
13B相当は4ビットにしても24GBに載りません。KVキャッシュの25.0GBだけですでに容量を超えているからです。
この場合は刻みではなく、同時実行数か文脈長を下げるしかありません。減らす対象を間違えると効きません。
出典はメモリの制約についてこれは大規模言語モデルにとって、またハードウェアのメモリが制約されている場合にとりわけ重要であると述べています。枠が先で、モデルが後です。
This is especially important for large language models (LLMs) and if your hardware is memory constrained.原文Hugging Face Transformers「Cache strategies」 この内容の有効期限2027-02-18
KVキャッシュは文脈長にも同時実行数にも比例します。両方を伸ばすと掛け算で増えます。
VRAM見積で最も外しやすいのがKVキャッシュの伸び方です。文脈長と同時実行数を動かして計算しました。
【7B相当】 文脈長 同時1 同時8 同時32 2048 1.0GB 8.0GB 32.0GB 8192 4.0GB 32.0GB 128.0GB 32768 16.0GB 128.0GB 512.0GB 131072 64.0GB 512.0GB 2048.0GB 【70B相当(KV共有)】 文脈長 同時1 同時8 同時32 2048 0.6GB 5.0GB 20.0GB 8192 2.5GB 20.0GB 80.0GB 32768 10.0GB 80.0GB 320.0GB 131072 40.0GB 320.0GB 1280.0GB
7B相当の重みは16ビットで13.0GBです。表の右下は2048.0GBで、重みの157倍にあたります。
「小さいモデルだから安く済む」という見立てが、ここで崩れます。重みの大きさは規模の一部でしかありません。
文脈長を4倍にすると4倍、同時実行数を4倍にするとさらに4倍です。両方を4倍にすれば16倍になります。
表の中でも、2048と同時1の1.0GBから、8192と同時8の32.0GBまで32倍に増えています。刻みを変えても、この部分は動きません。
収まらないときの手として、出典はキャッシュの退避は、1つを除くモデル各層のKVキャッシュをCPUへ移すことでGPUメモリを節約すると説明しています。
移した先から戻す時間がかかるので、速度は落ちます。KVキャッシュの記事では、キャッシュを効かせたときの速度差を測っています。
KVキャッシュは、文脈長と同時実行数の掛け算で増える。
モデルの形は計算に必要な数だけを置いたものです。実在の重みではなく、層数・ヘッド数・次元を代表的な構成に合わせています。実装によっては断片化や確保単位の影響でさらに増えます。ここで見せているのは、内訳のどこが何に比例するかという関係です。
Offloading the cache saves GPU memory by moving the KV cache for model layers except one to the CPU.原文Hugging Face Transformers「Cache strategies」 この内容の有効期限2027-02-18
同じ課題を持つ会社にとって、動いている設定は「作る時間」を買えるということです。ServiceDockは自作のワークフローやテンプレートを出品できるマーケットプレイスです。手数料や出品の流れは出品者向けページにまとまっています。
出品の仕組みを見る