UbuntuでvLLMを使用した高スループットサービング

laptop_mac macOS Sonoma Intermediate schedule 8 min read
Author by Alex Rivera • May 14, 2024

複数の同時接続ユーザーを持つアプリケーションを構築しているなら、OllamaやLM Studioでは力不足です。エンタープライズグレードの推論エンジンが必要です。vLLMが必要です。

Step 1 はじめに

vLLMは、高スループットかつメモリ効率に優れたLLMサービングエンジンです。PagedAttentionと呼ばれる技術を使用してアテンションキーと値を効率的に管理し、標準的なHuggingFace Transformersと比較して2〜4倍高いスループットを実現します。

本ガイドは、少なくとも1基の高性能NVIDIA GPU(例:RTX 3090、4090、またはA100)を搭載したLinuxサーバーで実行していることを前提としています。

Step 2 前提条件

vLLMにはPythonとCUDAが必要です。condaまたは標準的なvenvなどの仮想環境の使用を強く推奨します。

Terminal
sudo apt update
sudo apt install python3-pip python3-venv

# Create and activate environment
python3 -m venv vllm-env
source vllm-env/bin/activate

Step 3 vLLMのインストール

vLLMをPyPIから直接インストールします。これにより、PyTorchおよび必要なCUDA依存関係が自動的にダウンロードされます。

Terminal
pip install vllm

Step 4 OpenAI互換サーバーの起動

vLLMはOpenAI APIプロトコルをネイティブにサポートしています。コマンドラインから直接モデルをサービングできます。ここではLlama 3 8Bを例として使用します。

Terminal
python3 -m vllm.entrypoints.openai.api_server   --model meta-llama/Meta-Llama-3-8B-Instruct   --dtype auto   --api-key your-secret-key   --port 8000

主要パラメータの解説: - --model: HuggingFaceリポジトリのID。vLLMが自動的にダウンロードします。 - --dtype auto: 最大パフォーマンスのためにbfloat16またはfloat16を自動的に使用します。 - --api-key: エンドポイントを保護し、不特定のインターネットユーザーがGPUを無断利用できないようにします。

Step 5 APIへの接続

標準のOpenAI Python SDKを使用し、base_urlを切り替えるだけでこのサーバーにアクセスできます。

Terminal
from openai import OpenAI

client = OpenAI(
    base_url="http://localhost:8000/v1",
    api_key="your-secret-key"
)

response = client.chat.completions.create(
    model="meta-llama/Meta-Llama-3-8B-Instruct",
    messages=[
        {"role": "user", "content": "Explain PagedAttention."}
    ],
)

print(response.choices[0].message.content)

Step 6 本番環境向けの最適化

複数のGPUを搭載している場合(例:RTX 3090を2基)、テンソル並列処理を使用して大規模な70Bモデルをそれらに分散させることができます。--tensor-parallel-sizeフラグを追加するだけです:

Terminal
python3 -m vllm.entrypoints.openai.api_server   --model meta-llama/Meta-Llama-3-70B-Instruct   --tensor-parallel-size 2

vLLMが稼働することで、お使いのLinuxサーバーはレイテンシの劣化なしに、数十件の同時リクエストを並行して処理できるようになります。