LLM推論エンジン比較:Ollama vs vLLM vs llama.cpp でLLMをセルフホストする
オープンソースラボ編集部 ・ 2026年6月13日
LLM推論エンジン比較:Ollama vs vLLM vs llama.cpp でLLMをセルフホストする
GPT-4・Claude・Geminiなどのクラウドプロプライエタリ LLMではなく、Llama 3・Mistral・Qwen・Gemma等のオープンウェイトLLMを自社GPU・CPUサーバーで動かすためのOSS推論エンジンが急速に普及しています。Ollama(最も使いやすい・開発者向け)・vLLM(最高スループット・本番API)・llama.cpp(CPU対応・軽量・組み込み)の3つが2026年のデファクトスタンダードです。
セルフホストLLM推論エンジンを使う理由
- コスト削減: GPT-4 API($30/1Mトークン)→Llama 3 70B をA100 1台($3/時)で自社運用=100分の1以下のコスト
- プライバシー: ユーザーの入力・出力データが外部LLMプロバイダーに送信されない
- レイテンシ: インターネット往復なし→ローカルLLMは応答が高速(VPN不要)
- カスタマイズ: LoRA・QLoRAファインチューニングで自社ドメインに特化したモデルを運用
主要ツールの概要
Ollama
2023年公開、Go製のOSSです。GitHubスター115k+。最も使いやすいローカルLLM実行ツールで、ollama run llama3.2の1コマンドでLlama・Mistral・Qwen・Gemma・CodeLlamaなど100+モデルをダウンロードして実行できます。OpenAI互換のREST API(/api/generate・/v1/chat/completions)も提供します。
# Ollama インストールと実行
curl -fsSL https://ollama.ai/install.sh | sh
# モデルをダウンロードして実行
ollama run llama3.2 # Llama 3.2 3B(軽量・高速)
ollama run llama3.1:70b # Llama 3.1 70B(高品質)
ollama run qwen2.5-coder:14b # Qwen2.5 Coder 14B(コーディング特化)
ollama run nomic-embed-text # テキスト埋め込みモデル
# Docker でのOllama(GPU付き)
docker run -d --gpus=all -v ollama:/root/.ollama -p 11434:11434 ollama/ollama
# OpenAI互換APIとして使う
curl http://localhost:11434/v1/chat/completions -H "Content-Type: application/json" -d '{
"model": "llama3.2",
"messages": [{"role": "user", "content": "日本のOSS文化について教えて"}]
}'
# Python: Ollama API でLLMアプリを構築(OpenAI SDKで互換)
from openai import OpenAI
import ollama
# OpenAI SDK互換(base_urlをOllamaに変更するだけ)
client = OpenAI(
base_url='http://localhost:11434/v1',
api_key='ollama', # 任意の文字列
)
def chat(messages: list[dict], model: str = 'llama3.2') -> str:
resp = client.chat.completions.create(model=model, messages=messages)
return resp.choices[0].message.content
def streaming_chat(prompt: str, model: str = 'llama3.2'):
'''ストリーミング出力'''
stream = client.chat.completions.create(
model=model,
messages=[{'role': 'user', 'content': prompt}],
stream=True,
)
for chunk in stream:
if chunk.choices[0].delta.content:
print(chunk.choices[0].delta.content, end='', flush=True)
print()
def embed(text: str, model: str = 'nomic-embed-text') -> list[float]:
'''テキスト埋め込みベクトルを生成(RAG用)'''
resp = ollama.embeddings(model=model, prompt=text)
return resp['embedding']
# Next.jsバックエンドからの呼び出し例(TypeScript)
nextjs_example = '''
// app/api/chat/route.ts - ストリーミングLLMレスポンス
import { OpenAI } from 'openai'
const ollama = new OpenAI({
baseURL: process.env.OLLAMA_URL + '/v1',
apiKey: 'ollama',
})
export async function POST(req: Request) {
const { messages } = await req.json()
const stream = await ollama.chat.completions.create({
model: 'llama3.2',
messages,
stream: true,
})
return new Response(
new ReadableStream({
async start(controller) {
for await (const chunk of stream) {
const text = chunk.choices[0]?.delta?.content ?? ''
controller.enqueue(new TextEncoder().encode(text))
}
controller.close()
},
}),
{ headers: { 'Content-Type': 'text/event-stream' } }
)
}
'''
vLLM
2023年公開(UCバークレー)、Python製のOSSです。GitHubスター48k+。最高スループットの本番LLM推論エンジンで、PagedAttentionアルゴリズムによりGPUメモリを効率化して既存フレームワークの最大24倍のスループットを実現します。OpenAI互換APIサーバーをすぐに起動できます。
# vLLM インストールと起動(CUDA GPU必須)
pip install vllm
# OpenAI互換APIサーバーとして起動
python -m vllm.entrypoints.openai.api_server --model meta-llama/Llama-3.1-8B-Instruct --served-model-name llama3.1-8b --max-model-len 8192 --tensor-parallel-size 2 \ # 2 GPU で分散推論
--gpu-memory-utilization 0.9 --host 0.0.0.0 --port 8000
# Docker(GPU付き)
docker run --runtime nvidia --gpus all -v ~/.cache/huggingface:/root/.cache/huggingface -p 8000:8000 vllm/vllm-openai:latest --model meta-llama/Llama-3.1-8B-Instruct
# Python: vLLM でバッチ推論・高スループット処理
from vllm import LLM, SamplingParams
llm = LLM(
model='meta-llama/Llama-3.1-8B-Instruct',
tensor_parallel_size=2,
gpu_memory_utilization=0.9,
max_model_len=8192,
)
sampling_params = SamplingParams(temperature=0.7, max_tokens=512, top_p=0.95)
prompts = [
'日本のOSSエコシステムについて教えてください',
'Pythonのasync/awaitを初心者向けに説明してください',
'RustとGo言語の主な違いは何ですか?',
]
outputs = llm.generate(prompts, sampling_params)
for output in outputs:
print(f'回答: {output.outputs[0].text[:100]}...')
llama.cpp
2023年公開、C++製のOSSです。GitHubスター73k+。CPUのみでLLMを動作させる軽量高速推論エンジンで、4bit/8bit量子化(GGUF形式)によってLlama 70BモデルをCPUのみ・64GB RAMで動作させます。RaspberryPi・組み込みデバイス・M1/M2 MacのGPUでも高速動作します。
# llama.cpp ビルドと実行
git clone https://github.com/ggerganov/llama.cpp
cd llama.cpp && make -j
# GGUF形式のモデルをHugging Faceからダウンロード
wget https://huggingface.co/bartowski/Llama-3.2-3B-Instruct-GGUF/resolve/main/Llama-3.2-3B-Instruct-Q4_K_M.gguf
# テキスト生成
./llama-cli -m Llama-3.2-3B-Instruct-Q4_K_M.gguf -p "日本のOSSを教えて" -n 200
# OpenAI互換サーバーとして起動
./llama-server -m Llama-3.2-3B-Instruct-Q4_K_M.gguf --host 0.0.0.0 --port 8080 -c 4096
機能比較表
| 比較項目 | Ollama | vLLM | llama.cpp |
|---|---|---|---|
| CPU対応 | ✅ | ❌(GPU必須) | ✅ 最強 |
| スループット | 中 | ✅ 最高 | 低 |
| セットアップ | ✅ 最簡単 | 中 | 中 |
| OpenAI互換API | ✅ | ✅ | ✅ |
| GitHub Stars | 115k+ | 48k+ | 73k+ |
LLM推論エンジンはLLM Toolsカテゴリ/categories/llm-toolsのLiteLLM Proxyと組み合わせてOllamaをバックエンドの1プロバイダーとして設定し、クラウドLLMへのフォールバック設定で可用性を高める構成が採用されています。DevOpsカテゴリ/categories/devopsのKubernetes上でvLLMをGPU Deploymentとして運用してHPAで負荷に応じてGPU Podをスケールさせる本番AI推論クラスター構成が増えています。
FAQ
Q. OllamaでRAGシステムを構築する最小構成は?
A. **Ollama + nomic-embed-text(埋め込み) + Chroma(ベクターDB) + llama3.2(生成)**の4コンポーネントでRAGを構築できます。手順: ①ollama pull llama3.2 && ollama pull nomic-embed-text②pip install chromadb openai③ドキュメントをnomic-embed-textで埋め込み→Chromaに保存④質問をnomic-embed-textで埋め込み→Chromaで類似検索→上位チャンクを取得⑤llama3.2のプロンプトに「コンテキスト+質問」を渡して生成。コスト: すべてローカル実行→API費用ゼロ。最小メモリ要件: llama3.2 3B(Q4量子化)≈ 2GBのRAM→M1 MacBook Air(8GB RAM)でも動作。
Q. vLLMでLlama 3 70Bを2台のA100で動かすための設定は?
A. --tensor-parallel-size 2でテンソル並列分散推論を設定します。設定: python -m vllm.entrypoints.openai.api_server --model meta-llama/Meta-Llama-3-70B-Instruct --tensor-parallel-size 2 --gpu-memory-utilization 0.95。必要リソース: Llama 3 70B(fp16)= 140GB GPU VRAM→A100 80GB×2台で収まる(80×2=160GB)。量子化: --quantization awq(Activation-aware Weight Quantization)で70B→35GB相当に削減→A100 40GB×1台で動作可能。スループット: vLLMのPagedAttentionにより既存フレームワーク比8〜24倍→本番APIとして1000リクエスト/分以上を処理可能。
Q. llama.cppでM2 MacのGPU(Metal)を使って推論を高速化するには?
A. LLAMA_METAL=1 makeでビルドしてMetalバックエンドを有効化します。ビルド: LLAMA_METAL=1 make -j(M1/M2/M3 MacでMetal GPUを自動検出)。速度比較(Llama 3.2 3B Q4_K_M・M2 Pro): CPUのみ: 約15トークン/秒→Metal GPU: 約60トークン/秒(4倍高速)。-nglオプション: ./llama-cli -m model.gguf -ngl 33 -p "Hello"(-ngl 33でlayer数33をGPUにオフロード)→Metalで高速化。Mac用最適化: M2 Maxは最大96GB統合メモリ→Llama 3 70B Q4量子化(35GB)をGPUでフル実行可能。Apple Siliconeは統合メモリでCPU/GPU共有なので-ngl 99でほぼすべてのlayerをGPUに渡すと最速。
Q. OllamaとvLLMのどちらを本番APIとして使うべきですか?
A. 開発・小規模チーム・CPU環境ならOllama、本番・高スループット・GPU複数台・エンタープライズならvLLMが推奨です。Ollama優位: ①セットアップが最も簡単②Modelfileでカスタムシステムプロンプト・モデル設定を定義③Mac M1/M2で高速動作④モデル管理(pull・list・rm)がDockerライクで直感的。vLLM優位: ①PagedAttentionで最高スループット②テンソル並列・パイプライン並列で複数GPU分散推論③連続バッチ処理(Continuous Batching)でGPU利用率最大化④LoRA(Low-Rank Adaptation)の動的ロード→複数ファインチューニングモデルを1台のGPUで切り替え。本番構成: vLLMをAPI層+Ollamaを開発者向けローカルという組み合わせが多い。
まとめ
| ユースケース | 推奨ツール |
|---|---|
| 開発者ローカル・マルチモデル・最速セットアップ | Ollama |
| 本番API・高スループット・GPU複数台 | vLLM |
| CPU推論・軽量組み込み・Mac Metal | llama.cpp |