[OSS紹介#71] vLLM:大規模言語モデルを手軽に活用するためのライブラリ

この記事について

この記事では、注目すべきオープンソースソフトウェア(OSS)「vLLM」を紹介します。連載第71回となる今回は、大規模言語モデル(LLM)の推論と提供を簡便に行うことができるライブラリに焦点を当てます。

近年、AI技術の進化と共に、大規模言語モデルの普及が進んでいますが、それに伴い高性能な推論エンジンや効率的なサーバー管理が求められています。従来のアプローチでは、パフォーマンスや柔軟性に限界があり、多くの開発者が利便性と速度の両方を満たすツールを必要としています。

「vLLM」は、これらのニーズに応える形で開発されたツールです。簡単に導入でき、高速かつ効率的なLLMの提供を可能にします。本記事では、vLLMの特長や活用方法、またその意義について詳しく掘り下げていきます。これにより、読者がこのツールを活用することで、自身のプロジェクトや開発ワークフローの改善に繋がることを期待しています。

リンク:https://github.com/vllm-project/vllm


本コンテンツは、弊社AI開発ツール「IXV」を用いたOSSツール紹介です。情報の正確性には努めておりますが、内容に誤りが含まれる可能性がございますのでご了承ください。

1. vLLMでできること

vLLMは、大規模言語モデル(LLM)の推論とサービングを迅速かつ容易に行うためのライブラリです。以下の機能を提供しています。

1.1 高速なサービングスループット

vLLMは、最先端のサービングスループットを実現しています。特に、注意キーと値のメモリ管理を効率化するためのPagedAttentionを活用しています。

1.2 リクエストの連続バッチ処理

到着するリクエストを連続的にバッチ処理することで、リソースの使用効率を最大化します。

1.3 高速なモデル実行

CUDA/HIPグラフを用いたモデル実行の最適化により、高速な推論が可能です。また、さまざまな量子化手法(GPTQ、AWQ、INT4、INT8、FP8など)をサポートしています。

1.4 柔軟なモデルサポート

Hugging Faceの様々な人気モデルとシームレスに統合されており、Tensor並列性やパイプライン並列性を利用した分散推論が可能です。さらに、OpenAI互換APIサーバーを提供し、多様なデコーディングアルゴリズム(パラレルサンプリング、ビームサーチなど)をサポートしています。また、vLLMは生成モデルとプーリングモデルの両方をサポートしており、ユーザーは多様なタスクをこなすことが可能です。

2. セットアップ手順

vLLMをインストールする手順は以下の通りです。

2.1 必要環境

vLLMはNVIDIA GPU、AMD CPUおよびGPU、Intel CPUおよびGPU、PowerPC CPU、TPU、AWS Neuronなど、幅広いハードウェア環境で動作します。OSはLinuxが推奨され、Pythonのバージョンは3.9から3.12まで対応しています。

2.2 インストール方法

以下のコマンドを使用して、pipでvLLMをインストールできます。

pipでインストール

pip install vllm

NVIDIA GPUを使用している場合、環境マネージャーuvを用いることが推奨されます。以下の手順を参考にしてください。

uvを使ったインストール

uv venv --python 3.12 --seed
source .venv/bin/activate
uv pip install vllm --torch-backend=auto

2.3 GPUに特化した手順

vLLMは特定のGPUに対して専用の手順も提供しています。以下の要件を満たすことが必要です。

  • OS: Linux
  • Python: 3.9 – 3.12
  • NVIDIA GPU: compute capability 7.0以上が必要(例:V100、T4、RTX20xx、A100など)。
  • AMD GPUs: ROCm 6.3が必要です。注意点として、AMD GPUを使用する場合、事前に構成されたDockerイメージを使用するか、ソースからvLLMをビルドする必要があります。

詳細なインストール手順については、公式ドキュメントを参照してください。

3. 簡単な使い方

vLLMの基本的な使用方法は以下の通りです。

3.1 モデルの読み込み

まずはHugging Faceからサポートされているモデルを読み込みます。

from vllm import VLLM
model = VLLM(model_name="モデル名")

3.2 リクエストの送信

モデルに対してリクエストを送信し、推論結果を受け取ります。

response = model.predict("入力テキスト")
print(response)

3.3 オフラインバッチ推論

オフライン推論を利用して、複数の入力プロンプトに対してテキストを生成することも可能です。以下は基本的な例です。

from vllm import LLM, SamplingParams

prompts = [
    "Hello, my name is",
    "The president of the United States is",
    "The capital of France is",
    "The future of AI is",
]
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: {prompt!r}, Generated text: {generated_text!r}")

3.4 OpenAI互換サーバーの立ち上げ

vLLMをOpenAI API形式でサーバーとして立ち上げることもできます。デフォルトでは`http://localhost:8000`で起動します。

vllm serve Qwen/Qwen2.5-1.5B-Instruct

このサーバーに対して、以下のようにリクエストを送ることができます。

curl http://localhost:8000/v1/completions \
    -H "Content-Type: application/json" \
    -d '{
        "model": "Qwen/Qwen2.5-1.5B-Instruct",
        "prompt": "San Francisco is a",
        "max_tokens": 7,
        "temperature": 0
    }'

クライアントコードの例は次のようになります。

from openai import OpenAI
client = OpenAI(api_key="EMPTY", base_url="http://localhost:8000/v1")
completion = client.completions.create(model="Qwen/Qwen2.5-1.5B-Instruct", prompt="San Francisco is a")

3.5 サポートされているモデル

vLLMは、さまざまな生成タスクを処理するために、多くのモデルをサポートしています。具体的には、テキスト生成やプーリングを行うために以下のモデルが用意されています:

  • 生成モデル:例えば、AquilaForCausalLMGPT2LMHeadModelLlamaForCausalLMなど。
  • プーリングモデル:例えば、BertModelRobertaModelなど。

サポートされているモデルの詳細はこちらから確認できます。

4. 結論

vLLMは、高速かつ効率的な大規模言語モデルのサービングを実現するための強力なツールです。特に、サポートされている多様なモデルと高い柔軟性により、研究者や開発者にとって非常に有用です。公式ドキュメントを参考にしながら、ぜひ自分のプロジェクトに組み込んでみてください。