「自宅のRTX 3090でLLMを動かしたいけど、モデルがVRAMに収まらなかったらどうなるの?」
そんな疑問を持ったことはありませんか?実はローカルLLM推論の世界では、VRAMの壁をどう乗り越えるかが、パフォーマンスを大きく左右するんですよね。
今回は、vLLM・llama.cpp・Ollamaという3大推論エンジンを、RTX 3090(24GB VRAM)+128GB RAMという構成で徹底ベンチマークした海外の実験結果をもとに、日本語読者向けにわかりやすく解説します🚀
🔍 3つのエンジン、何が違う?
まず、ざっくりとした特徴をおさえておきましょう。
- vLLM:サーバー向け。連続バッチ処理(Continuous Batching)が強みで、複数リクエストを並列処理するのが得意
- llama.cpp:C++製の軽量エンジン。CPUとGPUのハイブリッド推論(CPUオフロード)が柔軟にできる
- Ollama:llama.cppをラップした使いやすいツール。手軽さが最大の魅力
イメージとしては、vLLMは「高性能な業務用サーバー」、llama.cppは「カスタマイズ自在な工作機械」、Ollamaは「誰でも使えるオールインワン家電」という感じです😄
📊 24GB以内に収まるモデル:vLLMが圧倒的
モデルサイズがVRAMに収まる場合、同時リクエスト数が増えるほどvLLMが圧倒的に有利になります。
並列リクエスト数を1→8に増やしたとき、スループット(処理量)の倍率はこうなります。
- vLLM:3.9倍〜5.4倍に向上 🎉
- llama.cpp:1.2倍〜1.9倍にとどまる
これはvLLMのContinuous Batching(連続バッチ処理)のおかげです。つまり、複数のリクエストをまとめてGPUに流し込むことで、GPUの稼働率を最大化しているわけですね。
🧊 VRAMを超えるモデル:llama.cppの出番
一方、モデルがVRAMに収まらない場合は話が変わります。
vLLMはGPUメモリに全レイヤーを載せることを前提に設計されているため、VRAMが足りない場合は動作自体が難しくなります。
そこで活躍するのがllama.cppです。--n-gpu-layersオプションで「どこまでGPUに載せるか」を細かく制御できます。
# llama.cppでCPUオフロードを使う例
# --n-gpu-layers でGPUに載せるレイヤー数を指定
./llama-server \
--model ./models/llama3-70b.gguf \
--n-gpu-layers 40 \ # 40レイヤーをGPUへ、残りはCPU+RAM
--ctx-size 4096 \
--host 0.0.0.0 \
--port 8080
ポイントをまとめるとこんな感じです👇
--n-gpu-layersを増やす → GPU使用率UP・速度UP- VRAMが足りなければ残りのレイヤーをRAM+CPUで処理
- 128GBのRAMがあれば100B超のモデルも動かせる
💡 どれを選べばいい?
結論としては、用途によって使い分けるのがベストです。
- ✅ API経由で複数人が同時利用する→ vLLM一択
- ✅ VRAMに収まらない大きいモデルを動かしたい→ llama.cpp
- ✅ とにかく手軽に試したい→ Ollama(内部はllama.cppなので大モデルもOK)
まとめ
24GB VRAMの壁にぶつかったとき、vLLMはスループット特化・llama.cppはVRAM超えに柔軟、という使い分けが基本戦略です。
自宅ラボでLLMを動かしてみたい方は、まずOllamaでサクッと試して、用途が明確になったらvLLMやllama.cppに移行するのがおすすめですよ。ぜひ試してみてください!🛠️





