llama.cpp と vLLM と Exllama
llama.cppは、個人利用向けのポータブルなエンジン(GGUF、CPU、Mac、あらゆるメーカーのGPU)であり、OllamaとLM Studioのエンジンでもあります。vLLMは、GPU上で継続的バッチ処理を行い、多数のユーザーに同時にサービスを提供するために作られています。Red Hatの測定では、A100上でvLLMが最大793トークン/秒だったのに対し、Ollamaは41トークン/秒でした。ExLlamaV2はアーカイブされており、開発はExLlamaV3で続けられています。
Ollama、LM Studio、または Jan の下には推論エンジンがあり、このエンジンが受け入れられる形式、利用可能なハードウェア、および負荷下での動作を決定します。本ガイドは、llama.cpp、vLLM、ExLlama、SGLang を、それぞれのリポジトリで検証可能な基準に基づいて比較し、誤解を修正し、選択のルールを示します。独自のスループットは公開せず、第三者による測定値のみを、出典を明記して掲載しています。
#推論エンジン:エンジン間で実際に異なる点
推論エンジンは、入力トークンを出力トークンに変換します。インストールするアプリケーション(Ollama、LM Studio、Jan)にはこれが組み込まれており、本番環境のサーバー(vLLM、SGLang)自体がこれにあたります。使用に影響する3つの違いがあります。それは、対応するモデル形式、利用可能なハードウェア、そして複数のリクエストを同時に処理する方法です。
| エンジン | ライセンス | 公表されている形式とハードウェア | 典型的な使用例 |
|---|---|---|---|
| llama.cpp | MIT | GGUF;CPU、Apple シリコン、NVIDIA(CUDA)、AMD(HIP)、Vulkan、SYCLほか | 個人用パソコン、ノートパソコン、軽量サーバー |
| vLLM | Apache 2.0 | Hugging Faceのモデル;FP8、INT4、GPTQ、AWQ、GGUF(実験的);NVIDIA、AMD、IntelのGPU、およびx86/ARMのCPU | 多くのユーザーを対象とした、本番環境での運用 |
| SGLang | Apache 2.0 | Hugging Faceモデル;FP4、FP8、INT4、AWQ、GPTQ | 高スループットのサーバー、共有プレフィックス |
| ExLlamaV3 | MIT | EXL3;NVIDIAの一般消費者向けGPU | 個人用GPUでのレイテンシー、TabbyAPIを使用 |
| MLX LM | MIT | Apple シリコン専用 | Mac:生成とファインチューニング |
#モデルの形式によって、使用できるエンジンが決まります
お使いのマシンで、プライベートかつ無料のChatGPTを1時間で構築 — LM Studio、Ollama、Open WebUI、ご自身のドキュメント、クラウド不要。
- 永久に利用できるオンラインスペース
- PDF + ファイル
- 生涯アップデート
速度を比較する前に、使いたいモデルがどの形式で公開されているかを確認してください。GGUFファイルはllama.cppで読み込めるため、Ollama、LM Studio、Janでも読み込めます。Hugging FaceのFP16やFP8の重み、またはAWQやGPTQで量子化された重みは、vLLMやSGLangで読み込めます。MLX向けに変換されたモデルはMac上のMLX LMで、EXL3モデルはExLlamaV3で読み込めます。エンジンを変更すると、モデルを別の形式でダウンロードし直す必要が生じることがよくあります。
| フォーマット | 標準的なエンジン | ほかに使えるエンジン |
|---|---|---|
| GGUF | llama.cpp(したがって、Ollama、LM Studio、Janも) | vLLM(実験的モード) |
| Hugging Faceのモデル重み(FP16、FP8) | vLLM, SGLang | 変換後はMac上のMLX LMでも使用可能 |
| AWQ、GPTQ | vLLM, SGLang | エンジンによるため、要確認 |
| EXL3 | ExLlamaV3 | なし |
| MLX | MLX LM | MLX対応を表明しているLM StudioとJan |
#llama.cpp:移植性に優れた定番
llama.cppは、依存関係のないC/C++実装です。掲げている目標は、幅広いハードウェアで、最小限の設定で推論を実行することです。Apple Siliconへの対応が優先されており(NEON、Accelerate、Metal)、x86 CPUではAVX、AVX2、AVX512、AMXに対応しています。GPUについては、NVIDIA(CUDA)、AMD(HIP)、Vulkan、SYCLをサポートしています。1.5~8ビットの量子化とCPU・GPUのハイブリッド推論を提供しており、利用可能なVRAM容量より大きいモデルも実行できます。
よくある誤解を訂正しておきます。llama.cppは、一度に1件のリクエストしか処理できないわけではありません。そのサーバーは、複数ユーザー向けの並列生成と、デフォルトで有効な継続的バッチ処理に対応すると案内されています。スロットは--parallelパラメータで設定できます。そのため、小規模なチームには十分対応できます。ただし、vLLMが備える大規模な本番運用向けの機能に並ぶことを目指しているわけではありません。
- 強み
- 移植性(Mac、Linux、Windows、Android)、広く普及したGGUF形式、CPUとGPUの併用、依存関係の少なさ。
- 制限
- vLLMと同等の分散デプロイ機能は提供されていません。コンテキスト、スロット、GPU上のレイヤーなどの設定を事前に把握する必要があります。
- エコシステム
- OllamaおよびLM Studioの基盤であり、Janによっても引用されています。
CUDA、Metal、またはVulkanでのコンパイルには、コンパイルガイドを参照してください。llama.cppに関する完全なガイドでは使用方法が詳しく説明されています。
#vLLM:多数のユーザー向けのサーバー
vLLMは、カリフォルニア大学バークレー校のSky Computing Labで生まれた、推論と配信用のライブラリです。アテンションのキーと値のメモリをページ単位で管理するPagedAttentionと、継続的なバッチ処理を基盤とし、チャンク単位のプリフィルとプレフィックスキャッシュを組み合わせています。FP8、INT4、GPTQ、AWQ、GGUFの各形式、OpenAI互換API、NVIDIA・AMD・IntelのGPU、およびx86・ARM・PowerPCのCPUへの対応をうたっています。
二つの誤解を正しておきましょう。第一に、vLLMはもはやNVIDIA専用ではなく、CPUにも対応しています。リポジトリには、複数の種類のGPUとCPUをサポートすると記載されています。第二に、GGUFにも対応するようになっています。ただしドキュメントでは、GGUF対応は非常に実験的で最適化も不十分であり、主にメモリ使用量を抑える目的で利用できると説明されています。GGUFを日常的に使うなら、llama.cppが基本的な選択肢です。
- 強み
- 負荷時のスループット、ページ単位でのキャッシュメモリ管理、OpenAI互換API、並列処理(テンソル、パイプライン、エキスパート)、多様な形式への対応。
- 制限
- llama.cppよりインストールや調整に手間がかかります。GPUサーバー向けに設計されており、GGUFは得意分野ではありません。
- エコシステム
- 複数の人やアプリケーションが同時に同じモデルに問い合わせる場合の標準的な選択肢です。
vLLMのガイドでは、このエンジンが何かを説明しています。本番環境へのデプロイのガイドでは、設定と監視を詳しく解説しています。
#ExLlama:V2はアーカイブ済み、V3は開発中
ExLlamaV2のリポジトリには、プロジェクトは現在アーカイブされており、開発はExLlamaV3で継続していると記されています。このページの旧版を含む多くの比較記事では、今もV2が最先端の選択肢として紹介されています。ExLlamaV3のリポジトリでは、EXL3量子化形式、テンソル並列およびエキスパート並列による推論、エキスパートモデル向けのCPUオフロード、連続バッチ処理、投機的デコーディング、そして推奨サーバーであるTabbyAPIを介したOpenAI互換APIが案内されています。
ExLlamaV3は一般向けGPUを対象としており、本番運用のサーバーやMacを対象にしたものではありません。NVIDIA製GPUを持っていて、品質とサイズの最適なバランスを求めるなら、EXL3量子化は試す価値があります。まず、使うモデルがリポジトリの対応アーキテクチャ一覧に含まれているか確認してください。
#SGLang、MLX LM、そのほかの選択肢
- SGLang
- 低レイテンシと高スループットを目指し、単一GPUから大規模クラスターまでを対象とする推論サービス用フレームワークとして紹介されています。プレフィックスキャッシュ用のRadixAttention、継続的バッチ処理、PagedAttention、投機的デコーディングを提供するとしています。サーバー向けではvLLMと競合しており、専用ガイドで詳しく解説しています。
- MLX LM
- Apple Silicon 上で MLX を使い、テキスト生成やモデルのファインチューニングを行うための Python パッケージです。Mac 以外では動作しません。「MLX と llama.cpp の比較」ガイドでは、Mac 上で両者を比較しています。
- TensorRT-LLM
- NVIDIA製のエンジンです。同社のGPUでは非常に高い性能を発揮しますが、導入時の制約が比較的多いため、本番環境でNVIDIA GPU群を運用する場合にのみ検討してください。
#公表された測定結果はどのような内容ですか
生成速度はハードウェア、モデル、量子化、リクエストの長さ、エンジンのバージョンに左右され、毎月変化します。そのため、このガイドでは独自の測定値を示していません。測定手順の説明がないトークン/秒の表には注意してください。ただし、第三者の情報源として、Red Hatが2025年8月に完全な測定手順を公開しています。
| 項目 | Red Hatが公表した値 |
|---|---|
| ハードウェア | NVIDIA A100-PCIE-40GBカード1枚 |
| モデル | Llama 3.1 8B Instruct(Ollama側はFP16) |
| バージョン | vLLM 0.9.1;Ollama 0.9.2 |
| テストツール | GuideLLM 0.2.1、同時ユーザー数1〜256人 |
| 最大スループット | vLLMは793トークン/秒、対するOllamaは41トークン/秒 |
| ピーク時のP99遅延 | vLLMは80ms、Ollamaは673ms |
留意点を踏まえて読む必要があります。この記事はRed Hat AI製品に関連しており、この分野の商業事業者が発信したものです。テスト対象はllama.cppそのものではなくOllamaで、デフォルト設定が使われています。また、テスト時点から複数のバージョン更新が行われています。確かな結論は定性的なものです。同時リクエストが多い状況では、積極的にバッチ処理を行う配信エンジンが、単独ユーザー向けに設計されたアプリケーションを上回ります。一人で使う場合、スループットの差が不利になる要因ではありません。
#メモリ:各エンジンが確保するメモリ
モデルに必要なメモリは、重み、コンテキストキャッシュ(KV)、余裕分で構成されます。重みのサイズは計算できます。80億パラメータのモデルは、FP16 で約16 GB(80億 × 2バイト)、Q4 で約5 GB を占めます。後者は当サイトの目安です。コンテキストキャッシュは、会話の長さと同時リクエスト数に応じて増加します。
| エンジン | ドキュメントに記載された動作 | 実際の影響 |
|---|---|---|
| llama.cpp | ユーザーが設定可能なコンテキスト;統合キャッシュを備えた並列スロット | コンテキストのサイズとスロット数を設定します |
| vLLM | GPUメモリの一部をキャッシュ用に事前に割り当て、デフォルトは92% | 24GBのカードでは、初期段階で約22GBが確保されます |
| ExLlamaV3 | キャッシュの量子化:2〜8ビット | キャッシュはVRAMに収まるように圧縮できます |
覚えておきたい点は、vLLMが最初からメモリを確保することです。そのため、推論サービスの提供には効率的ですが、他のアプリケーションと共有するGPUにはあまり向いていません。GPUを他の用途にも使う場合は、gpu_memory_utilizationパラメータの値を下げてください。
#どの用途にどのエンジンを使うべきか
| あなたの状況 | 推奨されるエンジン | 理由 |
|---|---|---|
| Mac、PC、ノートパソコンでの個人利用 | OllamaまたはLM Studio経由で利用するllama.cpp | 移植性が高く、シンプル |
| Apple SiliconのMacで、処理スループットを重視する場合 | MLX LM または llama.cpp | MLXはApple Silicon向けに設計されています。使用するモデルで比較する |
| チームまたはアプリケーションがモデルに問い合わせる | vLLM または SGLang | 継続的なバッチ処理、キャッシュページ |
| 一般向け NVIDIA カード1枚で、最高品質を求める場合 | ExLlamaV3 と TabbyAPI | EXL3量子化 |
| 異種ハードウェア環境、CPU、AMD、Intel | llama.cpp | 広範なハードウェア対応 |
| GGUF 限定モデル | llama.cpp | vLLMは実験的にのみ対応しています |
エンジンは併用できます。日常のチャットには Ollama、抽出バッチの処理にはオンデマンドで起動する vLLM を使用します。用途が異なる場合、1 つだけを残す理由はなく、同じモデルを 2 つの形式で保存するためのディスク容量を確保するだけです。例えば、チャット用に GGUF ファイル、サーバー用に Hugging Face の重みを使用します。
vLLM か llama.cpp か、どちらを選べばよいですか?+
Ollamaはllama.cppを使用していますか?+
vLLMはGGUFファイルを実行できますか?+
ExLlamaV2は現在メンテナンスされていますか?+
どのエンジンが最も速いですか?+
vLLMを使うためにNVIDIA GPUは必要ですか?+
- Ollama と llama.cpp の比較
- vLLM:完全ガイド
- ローカルLLMサーバーとしてのSGLang
- MLX と llama.cpp の Mac 上での比較
- llama.cpp:完全ガイド
- Ollama、LM Studio、Jan または GPT4All
ご意見、誤りのご指摘、補足はありますか?ぜひお知らせください。皆さんにとってより良いガイドにするために役立ちます。