PUBLIC
AI INFERENCEGPU SERVING13 MIN READ

STACK / PYTHON · PYTORCH · ACCELERATOR

vLLM

多くのリクエストを、GPUへ効率よく流す

vLLMは、LLMの推論とサービングを高スループットで行うためのエンジンです。PagedAttentionでKVキャッシュのメモリを効率的に管理し、到着するリクエストをContinuous Batchingでまとめ、OpenAI互換APIを通じて複数の利用者へモデルを提供します。

01LOADモデルを配置する
02SCHEDULEリクエストをまとめる
03CACHEKVキャッシュをブロック管理
04SERVEトークンを配信する
INFERENCE FLOW

モデルを読み込み、プロンプトをトークンへ変換し、生成結果を順次返します。

CONTENTSこの記事の目次

01 — POSITION

vLLMとは
何か

vLLMは、Hugging Faceなどのモデルを読み込み、GPUを中心とした推論をスケジューラ・KVキャッシュマネージャ・モデルランナーによって最適化するサービングライブラリです。単発の推論だけでなく、同時に届く多数のリクエストを継続的に処理するオンラインサービングを主な強みとしています。

02 — INFERENCE PIPELINE

Promptが回答へ
変わるまで

ツールごとの最適化は違っても、推論の入口から出力までには共通の流れがあります。

CONCURRENT USERS多数の同時リクエストReq A (生成中: tok 45)Req B (完了退去 → Req Dが入る)Req C (新規到着: Prefill)PAGED ATTENTIONKVキャッシュ断片化ゼロOSの仮想記憶のように非連続なブロック単位で割当:Block 0ABlock 1BBlock 2ABlock 3CBlock 4Free最大スループット向上(無駄なパディングを排除してGPU使用率を最大化)OpenAI互換API (/v1/chat/completions) を標準提供し、既存のアプリやツールからそのまま差し替え可能
ARCHITECTURE

PagedAttentionでKVキャッシュの断片化を排除し、連続バッチングによって同時リクエストのGPU利用率とスループットを最大化します。

PROMPT → TOKENSMODEL INFERENCE
01LOAD

モデルを配置する

重みとトークナイザを読み込み、利用するGPUや並列化方式へ割り当てます。

02SCHEDULE

リクエストをまとめる

到着したプロンプトと生成中のシーケンスを、スケジューラが継続的にバッチへ組み込みます。

03CACHE

KVキャッシュをブロック管理

PagedAttentionがシーケンスごとのKVキャッシュをブロック単位で参照・再利用します。

04SERVE

トークンを配信する

生成結果をストリーミング配信し、処理が完了した空き枠へ次のリクエストを割り当てます。

PIPELINE

生成中は過去トークンのKey / ValueをKVキャッシュへ保持し、次のトークン計算へ再利用します。

03 — CORE CAPABILITIES

vLLMを
特徴づける3点

「モデルを動かす」という同じ目的でも、最適化している対象と運用の粒度が異なります。

01PAGED ATTENTION

メモリの断片化を抑える

シーケンス長が異なる複数のリクエストのKVキャッシュを固定ブロックとして管理し、必要な分だけ非連続に割り当てます。GPUメモリの利用効率を高めることを最優先にした設計です。

02CONTINUOUS BATCH

待ち時間を仕事に変える

固定バッチ全体の完了を待たずに、生成が終了したシーケンスの枠へ新しいリクエストを順次投入します。Prefix CachingやChunked Prefillなどの高速化技術も組み合わせられます。

03SCALE OUT

1枚からクラスタへ伸ばす

OpenAI互換サーバーを入口として、テンソル並列・パイプライン並列・データ並列・Expert並列などを選択し、複数GPUや複数ノードへ推論処理を分散できます。

04 — QUICK START

モデルをAPIサーバーにする

公式クイックスタートと同様のモデルを起動し、OpenAI形式のチャット補完リクエストを送信します。

terminalVLLM OPENAI SERVER
# Hugging Face modelを読み込んでserve
vllm serve Qwen/Qwen2.5-1.5B-Instruct \
  --dtype auto \
  --api-key local-token

# OpenAI互換endpointへrequest
curl http://localhost:8000/v1/chat/completions \
  -H "Authorization: Bearer local-token" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "Qwen/Qwen2.5-1.5B-Instruct",
    "messages": [
      {"role": "user", "content": "PagedAttentionとは?"}
    ]
  }'

01MODEL Hugging Faceリポジトリからモデルの重みを取得

02SERVER 既定ではlocalhost:8000でAPIサーバーが起動

03OPENAI 既存クライアントのbase_urlを変更するだけで利用可能

05 — GOOD FIT

どんな推論環境に
向いているか

GPUを共有する多数のリクエスト処理や、モデルAPIの本番運用、スループットを重視するサービング基盤に向いています。

01MULTI USER

同時リクエストをさばきたい

複数の利用者やアプリケーションが同じモデルに接続し、GPUの稼働率を高く保ちたい場合に向いています。

02OPENAI API

既存クライアントをつなぎたい

OpenAI互換のエンドポイントに既存のSDKやツールを接続し、自前運用のモデルへスムーズに移行できます。

03DISTRIBUTED

複数GPUへ拡張したい

1枚のGPUメモリに収まらない巨大モデルや高いトラフィックに対して、目的に応じた並列化方式を選んで構成できます。

06 — WATCH OUT

導入前に知る
3つの注意点

モデルが起動することと、安全・高速・安定して本番運用できることは別の段階です。

01

Throughputと1件のLatencyは同じではない

バッチサイズを大きくすればシステム全体での処理トークン数(スループット)は増えますが、個々のリクエストの待ち時間(レイテンシ)は長くなる場合があります。想定トラフィックをもとにTTFT・TPOT・スループットを計測して評価します。

02

モデルとハードウェアの対応を先に確認する

モデルのアーキテクチャ、量子化方式、Attentionバックエンド、GPUメモリ量の組み合わせによって利用可否や性能が大きく変わります。公式の対応モデル一覧や動作要件を事前に確認します。

03

OpenAI互換でも完全に同一ではない

対応するエンドポイントやパラメータ、チャットテンプレートは、モデルやvLLMのバージョンによって異なります。また、認証、TLS暗号化、ネットワーク制限、レート制限などは本番環境のゲートウェイ側で補う必要があります。

IN ONE SENTENCE

vLLMとは?

KVキャッシュ管理とバッチスケジューリングを最適化し、多数のLLM推論リクエストをGPUへ効率よく流すサービングエンジン。

KEEP EXPLORING

AIllama.cpp掲載中AIOllama掲載中CLOUDLoad Balancer掲載中DEVOPSKubernetes掲載中

SOURCES / OFFICIAL DOCS

vLLM — Official documentation ↗Quickstart ↗OpenAI-Compatible Server ↗Parallelism and Scaling ↗