70Bのモデルは、1パラメータ2バイトなら140GBです。でも実際には128GBのマシンで動いています。というか、32GBのGPUで27Bのモデルが動くのも計算が合いません。27B × 2バイト = 54GB。載るはずがない。
答えは量子化です。まず、そこを織り込んだ見積もり式を覚えてください。
必要メモリ = パラメータ数 × 1パラメータあたりのバイト数
+ KVキャッシュ
+ オーバーヘッド(1GB程度)1パラメータを何バイトで持つか。ここが可変です。
| 精度 | 1パラメータあたり | 呼び方 |
|---|---|---|
| FP16 / BF16 | 2.0 バイト | 量子化なし |
| Q8_0 | 約 1.06 バイト | 8bit量子化 |
| Q4_K_M | 約 0.6 バイト | 事実上の標準 |
| Q2_K | 約 0.35 バイト | かなり攻めた設定 |
まず覚えるべきは Q4_K_M の「0.6」です。これが今の事実上の標準なので、この数字ひとつで大体の見積もりが立ちます。
実在するモデルで検算してみる
「約0.6」なんてざっくりした数字で本当に合うのか。確かめます。
| モデル | パラメータ数 | 式の予測 | 実際のサイズ |
|---|---|---|---|
| Qwen3.8 27B | 27B | 16.2 GB | 約 17 GB |
| Llama 3.3 70B | 70B | 42.0 GB | 約 43 GB |
| DeepSeek V4 Flash | 285B | 171.0 GB | 約 175 GB |
| GLM-5.3 Flash | 320B | 192.0 GB | 約 200 GB |
4つとも誤差5%以内。パラメータ数に0.6を掛けるだけで、実際のファイルサイズがほぼ当たります。
70B × 2.0バイト(FP16) = 140 GB ← 載らない
70B × 0.6バイト(Q4_K_M) = 42 GB ← 載る量子化していたから動いていたんですね。ダウンロードしたモデルは、ほぼ例外なく量子化済みのものです。
自分のマシンで何が動くか、動かして確かめる
式が分かったら、あとは数字を入れるだけです。モデルサイズ・量子化・コンテキスト長を変えて、どこで壁にぶつかるかを見てください。
Interactive
メモリ計算機
モデルサイズ・量子化・コンテキスト長を変えると、必要メモリと「どのマシンで動くか」が変わります。
重み 16.2 + KVキャッシュ 5.0 + オーバーヘッド 1
KVキャッシュは「40層・KVヘッド8・ヘッド次元128・FP16」を仮定した概算です(0.16 MB/トークン)。実際の値はモデルの設定によって変わります。 ユニファイドメモリ機の実効値は、既定でGPUに割り当てられる約75%としています。
触ってみると、いくつか気づくことがあると思います。コンテキスト長を伸ばすとKVキャッシュが一気に効いてくること。 そしてMoEを選んでも必要メモリは総パラメータ数で決まること ── なのに1トークンあたりの読み出し量だけが小さい。この不一致が、後の「速度」の章の伏線になります。
よくある失敗
「ギリギリ載る一番大きいモデル」は、実は使いにくい。モデルだけで容量を使い切ると、KVキャッシュの余地がなくなり、長い会話の途中で落ちます。 1段小さいモデルを選んで、その分をコンテキストに回すほうが安定します。
式が合わないときもあります
動的量子化のモデル(Unsloth の UD- 付きなど)は、全部の層を同じビット数で潰していません。効く層は高精度で残すので、名前が「Q2」でも平均3〜4bit相当だったりします。 またMoEの補助パラメータは計算に使わなくてもメモリには載るため、式より膨らみます。
なので式は「当たりをつける道具」として使ってください。最終的には配布元の実ファイルサイズを見るのが確実です。それでも、式が頭に入っているかで判断の速さが全然違います。
