🧠 まず概要:vLLM と llama.cpp の立ち位置
| 項目 |
vLLM |
llama.cpp |
| 作者/組織 |
UC Berkeley発 → vLLM Project |
Georgi Gerganov (Meta元) |
| 言語実装 |
Python + C++ + CUDA |
C/C++(単一バイナリ) |
| 対象環境 |
GPU前提(CUDA, ROCm) |
CPU / GPU / Metal / Vulkan 対応 |
| 目的 |
高スループット推論(サーバ用途) |
軽量・汎用実行(端末用途) |
| モデル互換 |
HuggingFace Transformers, LoRA, AWQ, GPTQ |
GGUF 形式(量子化モデル専用) |
| API 提供 |
OpenAI互換 API サーバ内蔵 |
なし(CLIツール or Embedding APIなど) |
| 並列処理 |
Continuous batching / tensor parallel |
1プロセス推論(複数セッション不可) |
| メモリ効率 |
高(PagedAttention) |
非常に高(量子化中心) |
| 運用想定 |
GPUサーバ、社内API、MLOps |
ローカル端末、エッジ、PoC環境 |
⚙️ 技術的な特徴比較
1️⃣ vLLM の特徴(サーバ向け)
✅ 強み
-
PagedAttention によりKVキャッシュをページ化 → 長文でも効率的にメモリ管理
-
Continuous Batching → 複数リクエストをまとめてGPU計算(高スループット)
-
OpenAI互換APIサーバ → 既存のクライアント資産を流用可能
- Hugging Face 形式そのまま使える(変換不要)
- LoRA, AWQ, GPTQ, Speculative decoding など最新機能をすぐサポート
⚠️ 弱点
- GPUメモリを多く使う(最低 12GB〜)
- セットアップが重め(Python依存, CUDA環境)
- CPU-only動作は実用的でない(遅い)
2️⃣ llama.cpp の特徴(軽量・汎用)
✅ 強み
-
単一バイナリで動く(ビルド後は即実行)
-
GGUF量子化モデルで圧倒的省メモリ(例: 7Bモデルが4〜8GBで可)
- GPUなしでも動作(CPU/Metal/Vulkan対応)
-
ネイティブC/C++実装で移植性抜群(Windows, macOS, Raspberry Piでも動く)
- Embeddings, RAG, ChatUIなど軽量ツール群が豊富(llama.cpp派生プロジェクト)
⚠️ 弱点
-
サーバ用途には不向き(1セッションずつ)
-
OpenAI互換APIなし(別途 web サーバ実装が必要)
- 長文処理では性能が頭打ち(KVキャッシュ最適化が限定的)
- HuggingFace 形式から GGUF 変換が必要
🔄 実運用での「使い分け」指針
| ユースケース |
推奨 |
理由 |
| 社内OpenAI APIサーバを自前構築 |
🟩 vLLM
|
OpenAI互換API / 高スループット / マルチユーザ対応 |
| クラウドGPU上で高速推論サーバ運用 |
🟩 vLLM
|
Batching + GPU効率最適化 |
| ローカルPCで軽く試す・PoC |
🟩 llama.cpp
|
セットアップ最小 / GPU不要 |
| Edge/IoT/モバイル実装 |
🟩 llama.cpp
|
CPUでも動く / クロスプラットフォーム |
| 研究・MLOps実験基盤で複数モデルを回す |
🟩 vLLM
|
モデル切替・ローディングが安定 |
| 生成AIアプリのフロントで簡易Chat機能 |
🟩 llama.cpp
|
軽量・低コストで内蔵可 |
| 大量同時アクセス(並列推論) |
🟩 vLLM
|
Continuous batching によりQPSが伸びる |
| 少数ユーザで軽量チャット |
🟩 llama.cpp
|
バイナリ単体で十分 |
💡 実際の性能感(参考値・単GPU)
| モデル |
GPU |
llama.cpp (Q4_K_M) |
vLLM (FP16) |
| Llama-3-8B |
RTX 4090 |
約25–30 tokens/s |
約120–180 tokens/s |
| Mistral-7B |
RTX 3090 |
約20 tokens/s |
約90–150 tokens/s |
| CPU-only (llama.cpp) |
Core i9 |
約5–10 tokens/s |
❌ 非現実的 |
🧩 vLLM は「スループット」に強く、
llama.cpp は「省メモリ・軽量性」に強い。
🧭 選び方チャート
💬 Q1: GPUがある? ── No → llama.cpp
↓Yes
💬 Q2: 複数ユーザ同時アクセスする? ── Yes → vLLM
↓No
💬 Q3: APIサーバとして使いたい? ── Yes → vLLM
↓No
💬 Q4: ローカルで軽く試したい? ── Yes → llama.cpp
🧰 実際の選定例(現場感)
| 目的 |
推奨構成 |
| 社内ChatGPT |
vLLM + OpenAI SDK + LangChain |
| ローカルLLMデモ |
llama.cpp + ollama |
| 推論API本番運用 |
vLLM + Docker + Nginx + systemd |
| オフラインAIノートPC |
llama.cpp + GGUFモデル + Metal |
| 学習済LoRAの検証 |
vLLM (--lora-modules) |
| エッジ組込み(Jetson, ARM) |
llama.cpp (GGUF量子化) |
📦 実例まとめ
vLLMサーバ起動例
vllm serve mistralai/Mistral-7B-Instruct-v0.3 --port 8000
llama.cpp実行例
./main -m ./models/llama-3-8b-q4.gguf -p "日本語で自己紹介して"
🧩 併用も可能(ハイブリッド構成)
たとえば:
-
vLLM:社内APIサーバ(GPU上で高速推論)
-
llama.cpp:クライアント端末で軽量オフラインモード
[Webアプリ]
│
├─> vLLM サーバ (GPU) … 高精度
│
└─> llama.cpp (端末) … 軽量フォールバック
🏁 まとめ:どう選ぶか
| 観点 |
vLLM |
llama.cpp |
| 目的 |
高速・大量推論 |
軽量・汎用 |
| 環境 |
GPUサーバ |
CPU / GPU / Edge |
| 導入難度 |
中〜高 |
低 |
| 速度 |
圧倒的に速い |
モデル・量子化次第 |
| API互換性 |
OpenAI互換あり |
なし |
| 用途例 |
社内AI・API基盤 |
ローカル・PoC・エッジ |
✅ GPUがあり複数ユーザ対応なら「vLLM」
✅ GPUがなくローカルで軽く動かしたいなら「llama.cpp」