vLLMとは
PagedAttentionによりGPUメモリを効率利用する、高スループットなオープンソースLLM推論・サービングエンジン
ひとことで言うと
AIモデルをたくさんの人に同時に速く提供するための、オープンソースの実行エンジン。
概要
vLLM(ブイエルエルエム)とは、カリフォルニア大学バークレー校の研究チームが開発した、LLMの推論・サービングを高速化するオープンソースのエンジン。 KVキャッシュをOSの仮想メモリのようにページ単位で管理するPagedAttentionというアルゴリズムを用いることで、GPUメモリの断片化・無駄を減らし、同時に処理できるリクエスト数(スループット)を高めている。 OpenAI互換のAPIサーバーとして動作させられ、既存のLLMアプリケーションを大きく変更せずに導入しやすい点も特徴。 連続バッチ処理(Continuous Batching)にも対応しており、処理中のリクエスト列に新規リクエストを逐次差し込むことで、GPUを常に高稼働率に保ちながら多数のユーザーへ同時にサービス提供できる。
背景
従来のLLM推論実装は、リクエストごとに連続したメモリ領域をKVキャッシュ用に確保しており、系列長を事前に予測できないことによるメモリの過剰確保や断片化がGPU利用効率を下げる要因になっていた。 vLLMは、この課題をOSのページングの発想を応用して解決するために開発された。
歴史
2023年6月: カリフォルニア大学バークレー校のチームがPagedAttentionを提案する論文とともにvLLMを公開。 オープンソースのLLMサービングエンジンとして急速に普及した。
アーキテクチャ
KVキャッシュを固定サイズの小さなブロック(ページ)単位で管理し、空いている非連続なGPUメモリ領域を都度割り当てることで、メモリの断片化を防ぐ。 複数のリクエストを動的にバッチ化する連続バッチング(Continuous Batching)も組み合わせ、GPUを継続的に高稼働率で利用できるようにしている。
コード例
オフラインバッチ推論(概念例)
from vllm import LLM, SamplingParams
llm = LLM(model="meta-llama/Llama-3.1-8B-Instruct")
params = SamplingParams(temperature=0.7, max_tokens=200)
outputs = llm.generate(["日本の首都はどこですか?"], params)
print(outputs[0].outputs[0].text)利点
- PagedAttentionによりGPUメモリを効率的に利用でき、高いスループットを実現する
- OpenAI互換APIを備え、既存のクライアントコードをほぼそのまま利用できる
- 連続バッチングにより、多数の同時リクエストを効率よく処理できる
欠点
比較
関連用語
よくある質問
vLLMは個人のPCでも使える?
GPUが必要であり、主にサーバーやクラウド環境での大規模なサービング用途を想定している。 個人のローカル環境ではOllamaやllama.cppの方が手軽に使われることが多い。
vLLMはどんなモデルに対応している?
Llama・Qwen・Mistral等、Hugging Face上で公開されている主要なオープンウェイトモデルの多くに対応している。