見出し画像

【2026年版】VRAM 24GBの壁を「ソフトウェアで」突破する。量子化・オフロード・KV Cache最適化の実践レシピ

RTX 4090を買った。24GBのVRAMがある。これで何でも動くはずだ。

そう思っていた時期が、私にもありました。

70Bモデルを動かそうとして `CUDA out of memory`。
32Bモデルでも、コンテキストを伸ばすと落ちる。
「え、24GBって最強じゃなかったの?」

結論から言います。
VRAMの壁は「ハードウェアを買い足す」以外にも突破できます。

今回は、RTX 4090(24GB)を1枚しか持っていない状況で、70Bクラスのモデルを「実用速度で」動かすためのソフトウェア最適化テクニックを、実測データとともにまとめます。

「2枚挿しで48GB」という力業に行く前に、まずはこの記事の内容を試してください。
お金をかけずに、今日からできる突破法です。





1. なぜ24GBで足りなくなるのか(30秒で理解)

VRAMを食うのは、大きく3つです。

モデル本体
パラメータの重み。70B × FP16 = 約140GB。

KV Cache
推論中に膨らむ「会話の記憶」。コンテキスト長に比例して増える。

アクティベーション
計算途中の一時データ。バッチサイズに比例。

70Bモデルをそのまま(FP16)で載せようとすると、140GB必要
24GBのカードでは物理的に無理です。

しかし、「そのまま載せる」必要はありません。
圧縮して、分散して、効率化する。
これがソフトウェアでできる突破法です。


2.【Tier 1】量子化:モデルを「圧縮」する

量子化とは

モデルの重みを「FP16(16ビット)」から「INT4(4ビット)」などに圧縮する技術です。
精度は若干落ちますが、VRAMは4分の1以下になります。

70Bモデルの場合、FP16だと約140GBですが、INT4(Q4)に量子化すると約35GBまで縮みます。
まだ24GBには入りませんが、後述のオフロードと組み合わせれば動きます。

実践:llama.cppで量子化モデルを使う

最も手軽なのは、すでに量子化されたGGUFモデルをダウンロードして使う方法です。

# llama.cppのビルド(CUDA有効)
git clone https://github.com/ggerganov/llama.cpp
cd llama.cpp
make LLAMA_CUDA=1

# 量子化済みモデルをダウンロード(HuggingFaceから)
# 例:TheBloke/Llama-3-70B-GGUF の Q4_K_M

# 実行
./main -m ./models/llama-3-70b.Q4_K_M.gguf \
  -n 512 \
  -ngl 99 \
  --ctx-size 4096

`-ngl 99` は「可能な限りGPUにレイヤーを載せる」という意味。
載りきらない分は自動でCPUに逃がしてくれます。

量子化の選び方

Q4_0 は最小サイズだけど精度が低め。
Q4_K_M はサイズと精度のバランスが最強。迷ったらこれ。
Q5_K_M は精度重視だけどサイズが大きめ。
Q8_0 はほぼFP16に近い精度だけど、サイズも大きい。

結論:迷ったらQ4_K_M。これが現時点での最適解です。


3.【Tier 2】オフロード:GPUに載りきらない部分をCPU/RAMに逃がす

オフロードとは

モデルの一部をGPU(VRAM)ではなく、CPU(メインメモリ)に配置する技術です。
VRAMに載りきらないレイヤーを「逃がす」イメージ。

代償

CPUとGPU間のデータ転送が発生するため、推論速度が落ちます
ただし、「動かない」よりは100倍マシです。

実践:llama.cppでオフロード

# GPUに40レイヤー、残りはCPUに
./main -m ./models/llama-3-70b.Q4_K_M.gguf \
  -ngl 40 \
  --ctx-size 4096

`-ngl` の数字を調整して、VRAMに収まる最大値を探ります。

目安(RTX 4090 24GBの場合)

Llama 3 70B(Q4_K_M)で `-ngl 40` にすると、VRAM約22.5GB使用で、推論速度は5〜8 token/s。
`-ngl 35` だと、VRAM約20GBで、5 token/s程度。
`-ngl 25` まで下げると、VRAM約16GBだけど、2〜3 token/sでかなり遅くなります。
`-ngl 0`(CPU only)だと、0.5 token/s。実用は厳しい。

40層載せられれば実用レベル
「ちょっと遅いけど、ちゃんと動く」状態になります。



4.【Tier 3】KV Cache最適化:推論中のメモリ爆発を抑える

KV Cacheとは

推論中に「過去の会話を覚えておく」ためのメモリ領域です。
コンテキストが長くなるほど、指数関数的にVRAMを食います

詳しくは別記事で解説しています:
なぜ4090のVRAMは『推論中』に尽きるのか? KV Cache完全理解

対策1:コンテキスト長を制限する

# コンテキストを4096に制限(デフォルトは8192など)
./main -m ./models/llama-3-70b.Q4_K_M.gguf \
  --ctx-size 4096

コンテキストを半分にすれば、KV Cacheも半分になります。
「長い会話」が不要なら、積極的に制限しましょう。

対策2:Flash Attention / Paged Attentionを使う

vLLMやTGI(Text Generation Inference)などの推論エンジンは、KV Cacheを効率的に管理する機能を持っています。

# vLLMの例
python -m vllm.entrypoints.openai.api_server \
  --model meta-llama/Llama-3-70B \
  --quantization awq \
  --gpu-memory-utilization 0.95

`--gpu-memory-utilization 0.95` で、VRAMを95%まで使い切る設定。

対策3:会話を「要約」して圧縮する

長い会話を続けるなら、途中で「これまでの会話を要約して」とLLMに頼み、コンテキストをリセットする運用も有効です。


5. 実測:Llama 3 70Bを24GBで動かした結果

検証環境

GPU:RTX 4090 24GB
CPU:Ryzen 9 7950X
RAM:128GB DDR5
モデル:Llama 3 70B Q4_K_M(GGUF)
ツール:llama.cpp(CUDA有効)

結果

`-ngl 99, ctx 8192` → OOM。動かない。

`-ngl 40, ctx 4096` → VRAM 22.5GB、6.2 token/s。実用レベル。

`-ngl 35, ctx 4096` → VRAM 20.1GB、5.1 token/s。実用レベル。

`-ngl 25, ctx 4096` → VRAM 16.3GB、2.8 token/s。遅いけど動く。

結論:`-ngl 40, ctx 4096` が最適解でした。
「ちょっと待つけど、ちゃんと賢い回答が返ってくる」レベル。

会話のレスポンスとしては、人間が読むスピードより速いので、体感上はストレスなしです。


6. それでもダメなら「2枚挿し」へ

ここまでの最適化を全部やっても、以下のケースでは限界があります。

コンテキスト8192以上が必須(長文処理、RAG)の場合。
バッチ処理で同時に複数リクエストを捌きたい場合。
**学習(Fine-tuning)**をローカルでやりたい場合。

この場合は、素直にハードウェアを増強しましょう。

→ RTX 3090 2枚挿し構築の極意

中古RTX 3090を2枚(約20万円)で、VRAM 48GBが手に入ります。
「ソフトウェアで稼いだ時間」を使って、資金を貯めましょう。


7. まとめ:ソフトウェアで稼げる時間は「半年」

VRAMの壁は、ソフトウェアで突破できます。

量子化(Q4_K_M) でVRAMを4分の1に。難易度は低い。
オフロード(-ngl調整) で載りきらない分をCPUへ。難易度は低い。
KV Cache最適化 で推論中の爆発を抑制。難易度は中程度。

今日からできることは、今日やる。
2枚挿しやRTX 5090を買うのは、その後でいい。

ただし、モデルは日々大型化しています。
Llama 4が出れば、また壁は高くなる。

ソフトウェア最適化で稼げる時間は、せいぜい半年
その間に次の一手(ハードウェア増強 or クラウド併用)を準備しておきましょう。


関連マガジン



次に読む

次に読む【保存版】なぜ4090のVRAMは『推論中』に尽きるのか? ローカルLLMの隠れた支配者「KV Cache」を完全理解する
迷ったらStart Here(読む順番ガイド)




個人的なおすすめ記事



#AI #GPU #VRAM #量子化 #ローカルLLM #RTX4090 #llama .cpp #KVCache #AI開発 #機械学習 #自作PC #Llama3 #最適化 #OOM


作成日: 2026年2月

いいなと思ったら応援しよう!