3行でいうと

  • OllamaのREADMEは、対応するバックエンド(中で動くエンジン)としてllama.cppを挙げています。
  • vLLMは多人数向けの配信、MLXはApple Silicon、TensorRT-LLMはNVIDIA GPUが前提です。
  • llama.cppのサーバーは、複数の利用者を「スロット」で同時に扱い、連続バッチ処理が標準で有効です。
  • OllamaのFAQでは、同時リクエスト数(OLLAMA_NUM_PARALLEL)の既定値は1です。

この記事は、実際に使って確かめた記録ではありません。この記事は公式の文書やREADMEを読んでまとめたものです。

先に結論

見立てです。5つは、同じ土俵で競う「優劣」ではなく、置かれる場所が違います。

迷ったら、「同時に使う人数」と「持っているGPU(またはMac)」の二つで絞るのが早いと思います。

前提:推論エンジンの役割

5つの守備範囲(早見表)

エンジン 開発元・性格 得意な場面 読んだ範囲で分かった前提・制約
llama.cpp C/C++製。ggmlライブラリが土台 少ない準備で、幅広いハードで動かす 幅広い対応先(CPU、Metal、CUDA、HIP、Vulkan、SYCLなど)
vLLM UCバークレーのSky Computing Labが発端 多人数への配信(サービング) NVIDIA・AMD GPUとCPUが中心。Apple Siliconはプラグイン(vLLM-Metal)
MLX(mlx-lm) Appleの機械学習研究グループ Macでの推論と微調整 Apple silicon向け。大きなモデルの高速化にはmacOS 15以上が必要
TensorRT-LLM NVIDIA。Apache 2ライセンス NVIDIA GPUでの高性能化 LinuxとNVIDIA GPU(Ampere以降が対象)。FP8はH100以降
Ollama 手軽に使えるコマンドとREST API 手元で最初に試す バックエンドとしてllama.cppを挙げている

各エンジンの中身

llama.cpp

READMEは、目的を「最小限の準備で、最先端の性能で、幅広いハードウェア上で推論する」ことと述べています。C/C++だけで書かれ、外部の依存がありません。

vLLM

vLLMの文書は「LLMの推論と配信のための、速くて使いやすいライブラリ」と自己紹介しています。

MLX(mlx-lm)

MLXは「Apple siliconで効率的に機械学習をするための、NumPyに似た配列フレームワーク」で、Appleの機械学習研究グループが開発しています。特徴として、統一メモリ(CPUとGPUが同じメモリを共有するので、データのコピーが要りません)と、遅延評価(値が必要になるまで計算しない)が挙がっています。詳しい位置づけは、別の記事で扱います。

その上のmlx-lmは、MLXでテキスト生成とLLMの微調整をするPythonパッケージです。READMEによると、Hugging Face Hubのモデルを1コマンドで動かし、量子化し、アップロードできます。微調整は低ランク(LoRA)と全体の両方で、量子化したモデルにも使えるとあります。

TensorRT-LLM

NVIDIAのオープンソースのライブラリで、PyTorchの上に作られています。概要ページには、次のことが書かれています。

サポート表のページには、OSとしてLinux(x86_64またはaarch64)、GPUとしてNVIDIAのBlackwell、Grace Hopper、Hopper、Ada、Ampereが載っていました。「載っていないGPUは、チームが開発・テストしない」とも書かれています。

Ollama

OllamaのREADMEは、コマンドラインとREST API(localhost:11434)、PythonとJavaScriptのライブラリを紹介しています。対応するバックエンドの欄には、llama.cppが一つだけ書かれていました。

公式文書のインポートの説明では、GGUFのファイルは取り込むときに量子化されません。事前にllama.cppのllama-quantizeなどで量子化しておく必要があります。

同時利用に関わる設定の値(llama-serverとOllama)

llama-server(公式READMEより)

  • -np, --parallel N:サーバーのスロット数。既定は-1(自動)。自動のときの数は文書に書かれていませんでした。
  • 連続バッチ処理は既定で有効。--no-cont-batchingで無効にできます。
  • /slotsは既定で有効、/metrics(Prometheus用)は--metricsが必要です。

Ollama(公式FAQより)

設定 意味 既定値
OLLAMA_NUM_PARALLEL 1つのモデルへの同時リクエスト数 1
OLLAMA_MAX_LOADED_MODELS 同時に読み込むモデル数 GPU数×3(CPUのみなら3)
OLLAMA_MAX_QUEUE 待ち行列の上限(超えると503) 512
keep_alive 使い終わってから読み込みを保つ時間 5分
OLLAMA_KV_CACHE_TYPE KVキャッシュの精度(FlashAttention有効時) f16

FAQには、並列数を増やすと実質の文脈が増える(2Kの文脈で4並列なら8K分)、RAMはOLLAMA_NUM_PARALLEL×OLLAMA_CONTEXT_LENGTHに比例して増える、とあります。KVキャッシュのq8_0はf16の約半分のメモリ、q4_0は約4分の1で、精度の低下が大きくなりうる、との説明です。

選び方の目安

見立てです。上の資料からは、次の順で決めると整理しやすいと思います。

  1. GPUの種類:NVIDIAだけならvLLMもTensorRT-LLMも候補。AMDならvLLM(ROCm)かllama.cpp(HIP)。Macなら、MLXかllama.cpp(Metal)か、Ollama。
  2. 同時に使う人数:1人ならOllamaやllama.cppで十分。数人以上が同時に使うなら、バッチ処理を前提に作られたvLLMやTensorRT-LLMが候補。
  3. モデルの形式:GGUFを使うならllama.cppとOllama。MLX用に変換したモデルならmlx-lm。vLLMでもGGUFは読めますが、文書は「非常に実験的で、最適化が不十分」としています。
  4. 運用の手間:Ollamaが最も軽く、TensorRT-LLMは性能を出すぶん、NVIDIA固有の知識が要ると思います(これは僕らの推測です)。

よくあるつまずき

気をつけること

出典

更新履歴