先週、読者からこんな質問が届いた。GPUなしマシンのvLLMでGGUFファイルが動かないのはなぜか、と。同じファイルはOllamaでは問題なく動くのに。先に短い答えを: はい、vLLMはGGUFを動かせます — 公式プラグイン経由で、GPU上のみ。 プラグイン名はvllm-gguf-plugin、構文はrepo:quant_type。CPUで試した瞬間、サポート対象ハードウェアの表の外に出ます。以下はすべてvLLM公式ドキュメントとvllm-project/vllmリポジトリの記録(2023年2月から9万2千スター超)に基づくもので、私のベンチ機の話ではありません。
GGUFモデルをvLLMでサーブするには?
手順は二つ。プラグインを入れ、vLLMをモデルに向ける。GGUFサポートはもうvLLM本体には住んでいません。ドキュメントは「vllm-gguf-pluginへ移行した」と明記しており、単なるpip install vllmでは足りません:
uv pip install vllm-gguf-plugin
# Hugging Faceから直接、repo_id:quant_type形式で:
vllm serve unsloth/Qwen3-0.6B-GGUF:Q4_K_M
--tokenizer Qwen/Qwen3-0.6B
# ダウンロード済みのローカルファイルなら:
vllm serve ./Qwen3-0.6B-Q4_K_M.gguf
--tokenizer Qwen/Qwen3-0.6B --tokenizerフラグは飾りではありません。公式ドキュメントはベースモデルのトークナイザーを使うよう推奨しています。GGUFからのトークナイザー変換は「時間がかかり不安定、特に語彙の大きなモデルで」そう起きるからです。これを省くのは、一行のフラグを長くて気難しい起動と交換するようなものです。
GPU2枚で1モデル: --tensor-parallel-size 2を付ければ同じGGUFを両カードに分割できます。テンソル並列はGGUFでも他の形式と同じく機能します。
なぜvLLMはCPUでGGUFを拒るのか?
ここが意外な部分です。GGUFの評判はCPUファースト — llama.cppがラップトップやRaspberry Piで名を築いた、まさにその形式です。ところがvLLM内では立場が逆になります。公式ハードウェア互換表でのGGUFはこうです:
| ハードウェア | vLLMでのGGUF |
|---|---|
| NVIDIA Volta / Turing / Ampere / Ada / Hopper | 対応 |
| AMD GPU | 対応 |
| Intel GPU | 非対応 |
| x86 CPU | 非対応 |
| Arm CPU | 非対応 |
出典: vLLM量子化ドキュメント。理由はアーキテクチャにあります。vLLMのGGUF経路はブロックを、バッチサーブ向けに作られたGPUカーネルへ非量子化します。背後にCPUカーネルはありません。vLLMはサーブ用エンジンであって、ラップトップのおもちゃではないからです。GPUのないマシンではどのフラグも救いになりません — llama.cppを使いましょう。
何が壊れるか: 限界の正直なリスト
同じドキュメントページには、そのまま引用する価値のある警告が載っています: 「vLLMにおけるGGUFサポートは高度に実験的で、最適化が不十分です」。具体的には:
- 量子化の対応範囲はllama.cppより狭い。 誰もがダウンロードするK-quant(Q4_K_Mなど)は動きますが、エキゾチックなスキームはそうとも限らない。形式のリファレンス実装はllama.cppのままです。
- アーキテクチャ対応は後を追う形。 新しいモデルファミリーはまずllama.cppに着地し、プラグインが後から続きます。
- mmap方式の遅延読み込みはない。 llama.cppはファイルをメモリにマップしますが、vLLMは通常のチェックポイントと同じく読み込みます。
- まずはメモリフットプリントの機能。 ドキュメントはGGUFをVRAM使用量を抑える手段として位置づけ、スループットの賭けとはしていません。
これらは隠されていません。すべて公式GGUFページの最初の段落にあります — ほとんどの実験的機能より正直です。
GGUFにはvLLMとllama.cpp、どちらが勝つか?
同じファイルを読む、別々の道具です:
| vLLM + GGUF | llama.cpp | |
|---|---|---|
| CPU推論 | 不可 | 可、第一級 |
| 同時ユーザー | continuous batching、そのために作られた | 限定的 |
| 量子化の対応範囲 | 部分集合、実験的 | リファレンス |
| セットアップ | vLLM + プラグイン | バイナリ1つ |
| 向いている場面 | 1枚のGPUで多くのユーザー | 1ユーザー、どんなハードでも |
1枚のGPUでチームにモデルをサーブするなら、vLLM + GGUFでlocal-LLM世界が共有する同じQ4_K_Mファイルを再利用できます。選択肢の詳細はGGUF量子化ガイドへ。エンジン全体の比較はllama.cpp vs OllamaとGGUFモデルをローカルで動かす方法をどうぞ。
一行のルール: 同じファイル、正反対の本能 — llama.cppはGGUFを「その形式」として扱い、vLLMは「選択肢の一つ」として扱う。
FAQ
vLLMはGGUFモデルを動かせますか?
はい。vllm-gguf-pluginをインストールし、repo:quant_type構文でserveします — ただしGPU上のみ。vLLMのCPU経路はGGUFをカバーしません。
vLLMはCPUでGGUFを動かせますか?
いいえ。公式のハードウェア互換表はGGUFをx86・Arm CPUで非対応と明記しています — CPU経路はllama.cppかOllamaのままです。
GGUFのサーブはvLLMとllama.cppのどちら?
1枚のGPUで多数の同時ユーザーに応えるならvLLM。GPUのないマシンや、量子化の対応範囲の広さを取るならllama.cppです。
— mrsaynothing
— mrsaynothing
AI・Linux・セルフホスティングの実地メモ。
次のハウツーをメールで受け取る
投稿ごとに1通。直して先へ進む。
これは何?デスクトップの128kコンテキストは嘘だ。KVキャッシュが食い潰した。
記事を楽しんでいただけましたか?私の本業はこのような構築です。 採用のご相談