はじめに
大規模言語モデル(LLM)の実用化が進む中、巨大なモデルを効率的にサービングすることは重要な技術課題となっています。本稿では、UC Berkeley発のLLMサービングエンジン「vLLM(Versatile Language Model)」について、vLLM公式GitHubリポジトリとvLLM公式ブログ、そして研究論文「Efficient Memory Management for Large Language Model Serving with PagedAttention」をもとに解説します。
vLLMは、LLMの推論とサービングのための高速で使いやすいライブラリとして開発され、そのPagedAttentionという革新的なメモリ管理技術により、従来のシステムと比較して圧倒的な性能向上を実現しています。
引用元記事
- タイトル: vLLM: A high-throughput and memory-efficient inference and serving engine for LLMs
- 発行元: vLLM Project(GitHub)
- 発行日: 2023年6月(初回リリース)
- URL: https://github.com/vllm-project/vllm
- タイトル: vLLM: Easy, Fast, and Cheap LLM Serving with PagedAttention
- 発行元: vLLM Blog
- 発行日: 2023年6月20日
- URL: https://blog.vllm.ai/2023/06/20/vllm.html
- タイトル: Efficient Memory Management for Large Language Model Serving with PagedAttention
- 発行元: arXiv
- 発行日: 2023年9月12日
- URL: https://arxiv.org/abs/2309.06180
要点
- vLLMは、カリフォルニア大学バークレー校のSky Computing Labで開発されたLLMサービングエンジンのこと。
- vLLMはPagedAttentionという革新的なアテンション・アルゴリズムを採用することで、LLMサービングにおけるメモリ効率とスループットを劇的に改善する。
- 従来のシステムがKVキャッシュメモリの60〜80%を無駄にしていたのに対し、vLLMは4%未満の無駄で済むように最適化されている。
- 連続バッチング(Continuous Batching)、分散推論(テンソル並列・パイプライン並列)、量子化(GPTQ、AWQ、INT4/8、FP8)などの先進的な技術を実装している。
- OpenAI互換APIを提供し、既存のアプリケーションからの移行が容易である。
- TensorRT-LLMやHugging Face TGIなどが他の主要なサービングエンジンとしてある。
詳細解説
vLLMとは何か
vLLMは、カリフォルニア大学バークレー校のSky Computing Labで開発され、現在はアカデミアと産業界の両方からの貢献によるコミュニティ主導のプロジェクトとして進化しているLLMサービングエンジンです。
その最大の特徴は、PagedAttentionという独自のメモリ管理アルゴリズムにあります。PagedAttentionは、オペレーティングシステムの仮想メモリとページングの古典的なアイデアに着想を得たアテンション・アルゴリズムです。
vLLM V1の登場
2025年1月27日、vLLMチームはvLLM V1のアルファリリースを発表しました。これは、過去1.5年間のvLLM開発で学んだ教訓に基づいて、コアアーキテクチャを全面的に再設計したメジャーアップグレードです。
V1の主な特徴:
- 1.7倍の高速化を実現
- スケジューラ、KVキャッシュマネージャー、ワーカー、サンプラー、APIサーバーなどのコアコンポーネントの包括的な再設計
- ゼロ設定で機能・最適化をデフォルトで有効化
- VLLM_USE_V1=1環境変数を設定するだけで、既存のAPIを変更することなくV1を有効化可能
ただし、V1はまだアルファ段階であり、いくつかの制限があります。エンコーダー・デコーダーアーキテクチャ(マルチモーダルLlama 3.2など)、Mambaベースのモデル(Jambaなど)、埋め込みモデルはまだサポートされていません。vLLMのロードマップでは、2025年のQ2フェーズにv1.0.0安定版のリリースに向けて、さらなるモジュール化が計画されています。
PagedAttentionの革新性
従来のアテンション・アルゴリズムでは、各シーケンスのKVキャッシュ(Key-Valueキャッシュ)を連続したメモリ空間に格納する必要がありました。これは以下の3つの問題を引き起こします:
- 内部フラグメンテーション:システムがモデルが生成するトークン数を事前に知ることができないため、メモリを過剰に確保してしまう
- 外部フラグメンテーション:固定メモリブロック間のギャップが使用されない
- メモリ共有の非効率性:並列サンプリングなどで同じプロンプトから複数の出力を生成する際に、メモリを重複して使用する
PagedAttentionは、KVキャッシュを固定サイズのブロックに分割し、各ブロックには固定数のトークンのキーと値を含むことで、これらの問題を解決します。ブロックはメモリ内で連続している必要がないため、OSの仮想メモリのようにより柔軟な方法でキーと値を管理できるようになります。
PagedAttention v2への進化
現在、vLLMコミュニティではPagedAttention v2の設計が進行中です。v2では、Flash Decodingの統合などにより、さらなるメモリ圧縮と高速デコードが予定されています。これにより、既に革新的なPagedAttentionの性能がさらに向上することが期待されています。
他の類似フレームワークとの違い
TensorRT-LLMとの比較
TensorRT-LLMはNVIDIA専用で、GPUアクセラレータを活用して高性能を実現します。ベンチマークによると、TensorRT-LLMはLlama 3 70B Q4モデルでA100 80GB GPUを使用して100人の同時ユーザーで毎秒700トークンに達するという優れた性能を示しています。
一方、vLLMはNVIDIA CUDA、AMD ROCm、AWS Neuron、CPUをサポートし、多様なセットアップに対して幅広い互換性を提供しています。vLLMは全てのレベルの同時ユーザーでクラス最高のTTFT(Time to First Token)を達成しており、レイテンシーを重視するアプリケーションに適しています。
Hugging Face TGIとの比較
Hugging Face TGIはvLLMと同様のパフォーマンスを提供し、パフォーマンスと使いやすさのバランスを提供します。しかし、vLLMの方がより高度なメモリ管理技術を持っており、特に大規模なデプロイメントでの効率性に優れています。
LMDeployとの比較
LMDeployはトークン生成速度で優れており、特に小さなモデルではトークン生成率が高く、量子化された大規模モデルではTTFTが低いという特徴があります。
LMDeployのTurboMindエンジンは、4ビット推論においてFP16の2.4倍の性能を示し、vLLMよりも最大1.8倍高いリクエストスループットを実現しています。これは、永続バッチング、ブロック化されたKVキャッシング、高度に最適化されたCUDAカーネルなどの技術によるものです。
ただし、TurboMindはスライディングウィンドウアテンションメカニズムを使用するモデル(MistralやQwen 1.5など)のサポートが限定的であり、NVIDIA GPU以外では遅いPyTorchエンジンを使用する必要があるという制限があります。
ハードウェアサポートの拡大
2024年以降、vLLMのハードウェアサポートは大幅に拡大しました:
- NVIDIA GPU:H100に対する第一級の最適化と、V100以降のすべてのNVIDIA GPUのサポート
- AMD GPU:MI200、MI300、Radeon RX 7900シリーズのサポート(特にMI300Xでの採用が急速に拡大)
- Google TPU:TPU v4、v5p、v5e、最新のv6eのサポート
- AWS Inferentia/Trainium:trn1/inf2インスタンスのサポート
- Intel Gaudi(HPU)およびGPU(XPU):AIワークロード向けのIntel GPUおよびGaudiアーキテクチャの活用
- PowerPC CPU:エンタープライズ環境でのCPUベースの推論
この幅広いハードウェアサポートにより、vLLMは多様な環境での展開が可能となり、組織の既存のインフラストラクチャに柔軟に適応できるようになっています。
vLLMの使い方
インストール方法
vLLMのインストールは非常に簡単です。NVIDIAのGPUを使用している場合は、pipで直接インストールできます。
# vLLMのインストール
pip install vllm
より高速なパッケージマネージャーであるuvを使用することも推奨されています。
※uvは、Rustで実装された超高速なPythonパッケージマネージャ兼仮想環境マネージャです。従来の pip や python -m venv を置き換える形で、機能を提供します。
# uvのインストール後
uv venv myenv --python 3.12 --seed
source myenv/bin/activate
uv pip install vllm --torch-backend=auto
オフライン推論の実行
vLLMを使用した基本的なオフライン推論は以下のように実行できます。
from vllm import LLM, SamplingParams
# プロンプトの準備
prompts = [
"こんにちは、私の名前は",
"日本の首都は",
"AIの未来は",
]
# サンプリングパラメータの設定
sampling_params = SamplingParams(temperature=0.8, top_p=0.95)
# モデルの初期化
llm = LLM(model="facebook/opt-125m")
# 推論の実行
outputs = llm.generate(prompts, sampling_params)
# 結果の表示
for output in outputs:
prompt = output.prompt
generated_text = output.outputs[0].text
print(f"プロンプト: {prompt!r}, 生成されたテキスト: {generated_text!r}")
OpenAI互換APIサーバーの起動
vLLMはOpenAI API互換のサーバーとして実行できます。これにより、既存のOpenAI APIを使用しているアプリケーションからの移行が容易になります。
# サーバーの起動
vllm serve meta-llama/Meta-Llama-3-8B-Instruct --host 0.0.0.0 --port 8000
起動したサーバーは、OpenAI APIと同じインターフェースで使用できます。
from openai import OpenAI
# クライアントの設定
client = OpenAI(
base_url="http://localhost:8000/v1",
api_key="dummy-key", # vLLMはAPIキーを必要としない
)
# チャット補完の実行
completion = client.chat.completions.create(
model="meta-llama/Meta-Llama-3-8B-Instruct",
messages=[
{"role": "user", "content": "大規模言語モデルについて簡単に説明してください。"}
],
temperature=0.7,
)
print(completion.choices[0].message.content)
vLLMの技術的特徴
高度な最適化技術
vLLMは以下の最適化技術を実装しています。
- 連続バッチング(Continuous Batching):入力リクエストの連続的なバッチングにより、GPUの利用効率を最大化
- CUDA/HIPグラフ:高速なモデル実行のためのCUDA/HIPグラフを使用
- 量子化サポート:GPTQ、AWQ、INT4、INT8、FP8などの量子化に対応
- 最適化されたCUDAカーネル:FlashAttentionとFlashInferとの統合を含む最適化されたCUDAカーネル
- 投機的デコーディング:推論速度を向上させる投機的デコーディング機能
- チャンク化されたプリフィル:メモリ使用量を削減するチャンク化されたプリフィル機能
分散推論のサポート
vLLMは大規模モデルの分散推論をサポートしています。
- テンソル並列性:モデルを複数のGPUに分割して並列処理
- パイプライン並列性:モデルの層を異なるGPUに配置して処理
これにより、単一のGPUに収まらない大規模なモデルでも効率的に実行できます。
パフォーマンスベンチマーク
vLLMは他のLLMサービングエンジン(TensorRT-LLM、SGLang、LMDeploy)と比較したパフォーマンスベンチマークを提供しています。
最新のベンチマーク結果(2024年Q4時点):
- TTFT(Time to First Token):vLLMは全ての同時ユーザーレベルでクラス最高のTTFTを達成し、約123msという非常に低いレイテンシーを実現(Cerebriumによる測定)。H100単機では約110msまで短縮されたという報告もあります
- スループット:
- LMDeployのTurboMindエンジンは、Llama 3 70B Q4モデルで100人の同時ユーザーに対して毎秒700トークンを達成(A100 80GB GPU使用)
- TensorRT-LLMも同様に毎秒700トークンを達成
- vLLMは毎秒600-650トークンで、TGIと同等の性能
- SGLangは特定のワークロードでvLLMを上回る性能を示し、バッチサイズ64で毎秒460トークンを達成
- SGLang Runtimeとの比較:2024年7月のLMSYSの報告によると、SGLang Runtimeはオンラインとオフラインの両方のシナリオで、Llama-8BからLlama-405B、A100とH100 GPUで、FP8とFP16を使用して、一貫して優れた、または競争力のあるパフォーマンスを提供しています
重要な点として、これらのベンチマーク結果は測定時期、GPU、量子化設定によって大きく変動することに注意が必要です。vLLMは依然として最速のTTFTを維持しており、レイテンシーを重視するアプリケーションに最適な選択肢となっています。
その他より詳しく知りたいときのアクセス先
vLLMについてさらに詳しく学びたい方は、以下のリソースを参照してください:
- 公式ドキュメント:https://docs.vllm.ai/
- インストール方法、使用方法、APIリファレンスなどの詳細な情報
- GitHubリポジトリ:https://github.com/vllm-project/vllm
- ソースコード、イシュー、ディスカッション
- 研究論文:https://arxiv.org/abs/2309.06180
- PagedAttentionの技術的詳細と評価結果
- vLLMブログ:https://blog.vllm.ai/
- 最新の機能アップデートや技術解説
- コミュニティフォーラム:https://discuss.vllm.ai/
- ユーザー同士の議論や質問
- 開発者Slack:https://slack.vllm.ai/
- 貢献者向けの協調と機能についての議論
まとめ
vLLMは、PagedAttentionという革新的なメモリ管理技術により、LLMサービングの効率性を大幅に向上させた画期的なフレームワークです。従来のシステムが抱えていたメモリの無駄を96%以上削減し、高いスループットと低いレイテンシーを実現しています。
また、OpenAI API互換のインターフェースを提供することで、既存のアプリケーションからの移行を容易にし、幅広いハードウェアプラットフォームのサポートにより、多様な環境での利用が可能です。
LLMの実用化が進む中、効率的なサービングは重要な技術課題となっています。vLLMは、その課題に対する優れたソリューションを提供し、今後もコミュニティ主導で進化を続けていくことでしょう。
コメント