「LLMをローカル環境で動かしてみたいけど、ツールが多すぎてどれを選べばいいかわからない…」 「Ollamaやvllmって聞くけど、何が違うの?自分のPCで動かせるの?」 ——そんな疑問を持つ方向けの記事です。
ChatGPTやGeminiのようなクラウドAIサービスは手軽に使える一方で、データが外部サーバーに送信されるプライバシーの問題や、API利用料が継続的に発生するコストの問題があります。
こうした課題を解決するのが、自分のPC上でLLMを動かすローカルLLMというアプローチです。ローカルLLMを実現するためのツール(推論エンジン)は数多く存在しますが、それぞれ特徴や得意分野が大きく異なります。
この記事では、代表的な5つの推論エンジン——Ollama、vLLM、llama.cpp、SGLang、TensorRT-LLM——を取り上げ、GPU要件・パフォーマンス・使い分けまでわかりやすく解説します。
なぜローカルでLLMを動かすのか?
まず、ローカルLLM実行のメリットを整理しておきましょう。
| 観点 | クラウドAPI(GPT-4等) | ローカルLLM |
|---|---|---|
| プライバシー | データがクラウドに送信される | データが外部に出ない |
| コスト | API利用料が継続的に発生 | ハードウェア費用のみ |
| インターネット | 常時接続が必要 | オフラインでも動作可能 |
| カスタマイズ | 制限あり | ファインチューニング自由 |
| レイテンシ | ネットワーク遅延がある | ネットワーク遅延なし |
特に、機密データを扱う企業や、インターネット接続が不安定な環境では、ローカルLLMの価値が非常に大きくなります。
推論エンジンとは?
LLMをローカルで動かすには、推論エンジン(Inference Engine)と呼ばれるソフトウェアが必要です。推論エンジンは、学習済みのモデルファイルを読み込み、テキストの生成(推論)を効率的に実行する役割を担います。
推論エンジンによって、対応するモデル形式、必要なハードウェア、生成速度などが大きく異なります。以下では、主要な5つの推論エンジンの特徴を詳しく見ていきましょう。
- Ollama — 最も手軽にローカルLLMを始められるツール
Ollamaは、ローカルLLMの入門に最適なツールです。内部でllama.cppをベースにしており、Docker風のシンプルなコマンドでモデルのダウンロードから実行までを一発で行えます。
主な特徴
- 圧倒的な手軽さ:
ollama run llama3.1のようにコマンド一つでモデルの取得から起動まで実行可能 - クロスプラットフォーム: Windows / macOS / Linux に対応
- モデル管理が簡単: Dockerイメージのようにモデルをpull / list / removeで管理
- OpenAI互換API: ローカルにOpenAI互換のAPIサーバーを立てられるため、既存のアプリケーションとの連携が容易
- 対応フォーマット: GGUF(llama.cppベース)
インストールと実行例
Ollamaは公式サイトからインストーラーをダウンロードするだけでセットアップが完了します。
# Llama 3.1 8Bモデルの実行(初回はモデルのダウンロードも自動で行われる)
ollama run llama3.1
# モデル一覧の確認
ollama list
# APIサーバーとして起動(デフォルトでlocalhost:11434)
ollama serveGPU要件
Ollamaはllama.cppベースのため、GPUがなくてもCPUのみで動作します。
ただし、CPUのみの場合は生成速度が遅くなります。
GPUがある場合は自動的にGPUを活用し、速度が大幅に向上します。
| 構成 | 推奨スペック |
|---|---|
| CPU only | 16GB以上のRAM |
| GPU利用 | NVIDIA GPU(VRAM 8GB以上推奨) |
| 推奨モデル | 7B〜8Bクラスの量子化モデル(Q4_K_M) |
- llama.cpp — 軽量・高速なC/C++実装の推論エンジン
llama.cppは、Georgi Gerganov氏によって開発された、C/C++で書かれた軽量な推論エンジンです。Ollamaの内部エンジンでもあり、GGUF形式の量子化モデルにおけるデファクトスタンダードと言える存在です。
主な特徴
- 軽量・依存関係なし: 外部ライブラリに依存しない純粋なC/C++実装
- 幅広いハードウェア対応: CPU、NVIDIA GPU(CUDA)、Apple Silicon(Metal)、AMD GPU(ROCm)、Vulkanなど
- GGUF形式の開発元: GGUFフォーマットの策定・開発を主導
- 豊富な量子化オプション: Q2_K〜Q8_0まで多様な量子化レベルをサポート
- エッジデバイス対応: Raspberry PiやJetsonのような低リソース環境でも動作
実行例
# ソースからビルド(NVIDIA GPU対応)
git clone https://github.com/ggerganov/llama.cpp
cd llama.cpp
cmake -B build -DGGML_CUDA=ON
cmake --build build --config Release
# モデルの実行
./build/bin/llama-cli -m models/llama-3.1-8b-Q4_K_M.gguf -p "AIとは何ですか?" -n 256
# APIサーバーとして起動
./build/bin/llama-server -m models/llama-3.1-8b-Q4_K_M.gguf --port 8080GPU要件
llama.cppの最大の強みは、GPUがなくても実用的に動作する点です。 CPUのみで8〜15トークン/秒(7B・4bitモデル)程度の速度が出ます。
| 構成 | パフォーマンス目安(7B Q4モデル) |
|---|---|
| CPU(32コアXeon) | 約8〜15トークン/秒 |
| NVIDIA RTX 3060(12GB) | 約30〜50トークン/秒 |
| Apple M2 Pro | 約20〜40トークン/秒 |
- vLLM — 高スループット本番環境向けの推論エンジン
vLLMは、UC Berkeleyの研究チームが開発した、高スループット・本番運用向けの推論エンジンです。 大量の同時リクエストを効率的に処理することに特化しており、企業のAIサービス基盤として広く採用されています。
主な特徴
- PagedAttention: GPUメモリ(KVキャッシュ)をOSのページングのように効率管理し、メモリ利用率を最大化
- Continuous Batching(連続バッチ処理): リクエストを動的にバッチ化し、GPUの稼働率を常に高く維持
- 高い同時処理性能: 128同時リクエストでも100%の成功率を維持
- OpenAI互換API: APIサーバーとして起動でき、既存アプリケーションとの連携が容易
- 対応フォーマット: HuggingFace形式、AWQ、GPTQ、FP8など
実行例
# インストール
pip install vllm
# APIサーバーとして起動
vllm serve meta-llama/Llama-3.1-8B-Instruct --dtype auto --max-model-len 4096
# Pythonから直接利用
python -c "
from vllm import LLM, SamplingParams
llm = LLM(model='meta-llama/Llama-3.1-8B-Instruct')
outputs = llm.generate(['AIとは何ですか?'], SamplingParams(max_tokens=256))
print(outputs[0].outputs[0].text)
"GPU要件
vLLMはNVIDIA GPU(CUDA対応)が必須です。 CPUのみでの動作はサポートされていません。
| GPU | 対応可能なモデルサイズ(FP16) |
|---|---|
| RTX 3090 / 4090(24GB) | 7B〜13B |
| A100(80GB) | 〜70B |
| H100(80GB) | 〜70B(高速推論) |
| 複数GPU(テンソル並列) | 70B以上 |
- SGLang — 構造化生成に強い高性能推論エンジン
SGLangは、vLLMと同様に高性能サービング向けの推論エンジンですが、構造化された出力生成(JSON出力など)とKVキャッシュの効率的な再利用に特化している点が特徴です。
主な特徴
- RadixAttention: KVキャッシュをRadixツリーで管理し、共通プレフィックスを持つリクエスト間でキャッシュを効率的に再利用
- 構造化生成に強い: JSON・正規表現による出力制約を高速に処理
- Python DSL: 複雑なプロンプトフローをPythonコードで記述可能
- vLLMを上回る場面も: 量子化モデルの同条件比較でvLLMを約17%上回るスループットを記録
- マルチハードウェア対応: NVIDIA GPU、AMD GPU、Google TPU、Intel XPU
実行例
# インストール
pip install sglang[all]
# APIサーバーとして起動
python -m sglang.launch_server --model-path meta-llama/Llama-3.1-8B-Instruct --port 8000
# Pythonから構造化生成
import sglang as sgl
@sgl.function
def qa(s, question):
s += sgl.user(question)
s += sgl.assistant(sgl.gen("answer", max_tokens=256))
state = qa.run(question="AIとは何ですか?")
print(state["answer"])GPU要件
SGLangも基本的にGPU(CUDA対応)が必要です。 vLLMと比較して、メモリ消費が少ないケースもあり、同じGPU構成でより効率的に動作する場合があります。
| GPU | 対応可能なモデルサイズ |
|---|---|
| RTX 4090(24GB) | 7B〜13B |
| A100(80GB) | 〜70B |
| H100 × 8(テンソル並列) | 405B(FP8量子化) |
- TensorRT-LLM — NVIDIA GPU最適化の高性能推論エンジン
TensorRT-LLMは、NVIDIAが開発した、NVIDIA GPU向けに徹底的に最適化された推論エンジンです。カスタムCUDAカーネルやFPの最適化により、NVIDIA GPUでの推論性能を極限まで引き出します。
主な特徴
- NVIDIA GPU専用最適化: カスタムカーネル、CUDAグラフ、カーネル融合による最大限のGPU活用
- 先進的な量子化: FP8、FP4、INT8、INT4をネイティブサポート
- Paged KV-Caching + In-flight Batching: メモリ効率とスループットを両立
- マルチGPU対応: テンソル並列・パイプライン並列による大規模モデルの分散推論
- Speculative Decoding: EAGLE-3などの投機的デコーディングで生成速度をさらに向上
実行例
# TensorRT-LLMのインストール(Docker経由が推奨)
docker pull nvcr.io/nvidia/tritonserver:24.12-trtllm-python-py3
# モデルの変換(事前コンパイルが必要)
python convert_checkpoint.py --model_dir ./llama-3.1-8b \
--output_dir ./trt_checkpoint --dtype float16
trtllm-build --checkpoint_dir ./trt_checkpoint \
--output_dir ./trt_engine --gemm_plugin float16
# 推論の実行
python run.py --engine_dir ./trt_engine --input_text "AIとは何ですか?"GPU要件
TensorRT-LLMはNVIDIA GPU専用です。モデルの事前コンパイル(ビルド)が必要なため、導入にはある程度の技術知識が求められます。
| GPU | 特徴 |
|---|---|
| RTX 4090(24GB) | コンシューマー最高峰の推論性能 |
| A100(80GB) | データセンター向け。 13Bモデルで180〜220リクエスト/秒 |
| H100(80GB) | 最新のFP8最適化に対応。最高峰の推論性能 |
| マルチGPU | パイプライン並列で超大規模モデルに対応 |
注意: TensorRT-LLMはモデルを特定のGPUアーキテクチャ向けにコンパイルするため、GPUの変更やモデルの更新時に再コンパイルが必要です。また、マルチGPUのフルサポートはLinux環境に限定されます。
5つの推論エンジンの比較
ここまで紹介した5つの推論エンジンの違いを一覧で比較します。
基本情報の比較
| 項目 | Ollama | llama.cpp | vLLM | SGLang | TensorRT-LLM |
|---|---|---|---|---|---|
| 開発元 | Ollama, Inc. | Georgi Gerganov | UC Berkeley | LMSYS | NVIDIA |
| 実装言語 | Go + llama.cpp | C/C++ | Python + C++ | Python + C++ | C++ + Python |
| ライセンス | MIT | MIT | Apache 2.0 | Apache 2.0 | Apache 2.0 |
| 主な対象 | 個人・開発者 | 開発者・ 組込み | 企業・ 本番環境 | 企業・研究 | 企業・ 最大性能 |
ハードウェア対応の比較
| 項目 | Ollama | llama.cpp | vLLM | SGLang | TensorRT-LLM |
|---|---|---|---|---|---|
| CPU | ✅ 対応 | ✅ 対応 | ❌ 非対応 | ❌ 非対応 | ❌ 非対応 |
| NVIDIA GPU | ✅ 対応 | ✅ 対応 | ✅ 対応 | ✅ 対応 | ✅ 対応 (専用) |
| AMD GPU | ⚠️ 限定的 | ✅ 対応 | ✅ 対応 | ✅ 対応 | ❌ 非対応 |
| Apple Silicon | ✅ 対応 | ✅ 対応 | ❌ 非対応 | ❌ 非対応 | ❌ 非対応 |
| マルチGPU | ❌ 非対応 | ⚠️ 限定的 | ✅ 対応 | ✅ 対応 | ✅ 対応 |
パフォーマンスの比較
| 項目 | Ollama | llama.cpp | vLLM | SGLang | TensorRT-LLM |
|---|---|---|---|---|---|
| シングルユーザー速度 | ◎ | ◎ | ○ | ○ | ◎ |
| マルチユーザー速度 | △ | △ | ◎ | ◎ | ◎ |
| スループット(大量処理) | △ | △ | ◎ | ◎ | ◎◎ |
| メモリ効率 | ○ | ○ | ○ | ◎ | ◎ |
ベンチマーク参考値(Llama 3.1 8B・NVIDIA GPU)
以下は、同一モデル・同一ハードウェアにおけるベンチマーク参考値です。
| 項目 | Ollama | vLLM | SGLang | TensorRT-LLM |
|---|---|---|---|---|
| シングルユーザー(トークン/秒) | 約62 | 約50〜60 | 約50〜60 | 約60〜80 |
| 高負荷時スループット(トークン/秒) | 約484 | 約8,033 | 約6,395 | 約8,000〜10,000 |
| 128並列時の成功率 | 低下あり | 100% | 100% | 100% |
※ ベンチマーク値は測定環境(GPU型番、量子化方式、バッチサイズ等)によって大きく変動します。上記は公開されている複数のベンチマーク結果を参考にした概算値です。
機能面の比較
| 項目 | Ollama | llama.cpp | vLLM | SGLang | TensorRT-LLM |
|---|---|---|---|---|---|
| セットアップ難易度 | ◎(最も簡単) | ○ (ビルド必要) | ○ (pip install) | ○ (pip install) | △(コンパイル必要) |
| OpenAI互換API | ✅ | ✅ | ✅ | ✅ | ⚠️ Triton経由 |
| 構造化出力(JSON等) | ⚠️ 基本的 | ⚠️ 基本的 | ○ | ◎(最も強い) | ○ |
| GGUF対応 | ✅ | ✅ | ❌ | ❌ | ❌ |
| AWQ / GPTQ対応 | ❌ | ❌ | ✅ | ✅ | ✅ |
| Continuous Batching | ❌ | ❌ | ✅ | ✅ | ✅ |
どのエンジンを使えばいいのか
結局どの推論エンジンを使えばいいのか?ということで、以下にユースケースと推奨エンジンをまとめました。
初めてローカルLLMを試す場合
おすすめ: Ollama
ローカルLLMの入門には、Ollamaが圧倒的におすすめです。インストールからモデルの実行まで数分で完了し、難しい設定は一切不要です。まずOllamaで「ローカルLLMとはどんなものか」を体験し、必要に応じて他のエンジンに移行するのが効率的です。
GPUがない/限られたリソースで動かしたい場合
おすすめ: llama.cpp(または Ollama)
GPUがない環境では、CPU推論に対応したllama.cppが最適です。GGUF形式の量子化モデル(Q4_K_M推奨)を使えば、16GBのRAMがあれば7Bモデルを動かせます。コマンドラインに慣れていない方はOllamaを使いましょう。
Webサービスやチャットボットの本番運用
おすすめ: vLLM または SGLang
複数ユーザーが同時にアクセスする本番環境では、Continuous Batchingによる高スループットが不可欠です。vLLMは実績と安定性、SGLangは構造化出力とメモリ効率に強みがあります。
NVIDIA GPUで最大限の性能を引き出したい場合
おすすめ: TensorRT-LLM
推論コストが事業の重要な指標となる大規模サービスでは、TensorRT-LLMのハードウェア最適化による性能向上が大きな価値を持ちます。ただし、モデルの事前コンパイルやNVIDIAエコシステムへの理解が求められるため、導入難易度は最も高くなります。
エッジデバイスやIoT機器での推論
おすすめ: llama.cpp
Raspberry Pi、NVIDIA Jetsonなどのエッジデバイスでは、依存関係のない軽量なllama.cppが最適です。極小の量子化モデル(Q2_K等)を使えば、限られたメモリ環境でもLLMを動作させることができます。
推奨するワークフロー
実際のプロジェクトでは、目的に応じてツールを使い分けるハイブリッドアプローチが一般的です。
開発・プロトタイプ段階 → Ollama / llama.cpp
↓ モデルと要件が固まったら
本番運用検討 → vLLM / SGLang のベンチマーク比較
↓ 最大性能が必要なら
最適化フェーズ → TensorRT-LLM でのチューニング- まずはOllamaで素早くプロトタイプ: モデルの選定や動作確認を手軽に行う
- 次にvLLM / SGLangでサービング検証: 同時接続やスループットの要件を確認
- 最後にTensorRT-LLMで最適化: 推論コストが重要な場合のみ
GPU選びの目安
ローカルLLMを始めるにあたって、GPU選びは重要なポイントです。モデルサイズ別の推奨GPUを以下にまとめます。
| モデルサイズ | 量子化 | 必要VRAM目安 | 推奨GPU例 |
|---|---|---|---|
| 3B以下 | Q4_K_M | 約2〜3GB | GTX 1660以上 / CPU only可 |
| 7B〜8B | Q4_K_M | 約4〜6GB | RTX 3060(12GB)以上 |
| 13B | Q4_K_M | 約7〜10GB | RTX 3080(10GB)以上 |
| 70B | Q4_K_M | 約35〜40GB | RTX 4090(24GB)×2 / A100(80GB) |
| 70B | FP16 | 約140GB | H100 × 2 / A100 × 2 |
迷ったら、まずは7B〜8Bクラスのモデル(Q4_K_M量子化)から始めてみましょう。VRAM 8GB以上のNVIDIA GPUがあれば十分に動作します。GPUがない場合でも、OllamaやLlama.cppを使えばCPUのみで体験できます。
まとめ
今回は、ローカル環境でLLMを動かすための主要な推論エンジン5種を比較しました。
- Ollama: 圧倒的な手軽さで入門に最適。まずはここから始めよう
- llama.cpp: 軽量・ポータブルで、GPUなしでも動作する。エッジデバイスにも対応
- vLLM: 高スループット本番環境の定番。PagedAttentionによる効率的なメモリ管理が強み
- SGLang: 構造化出力とKVキャッシュ再利用に強い。vLLMを上回る場面も
- TensorRT-LLM: NVIDIA GPU専用の最高性能エンジン。大規模サービスのコスト最適化に威力を発揮
ローカルLLMの世界は急速に進化しており、各エンジンも日々改善が続いています。 重要なのは、自分の用途・環境・スキルレベルに合ったツールを選ぶことです。 まずはOllamaでローカルLLMを体験し、そこから自分のニーズに合わせてステップアップしていきましょう。