【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枚(約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月
