Apidog

オールインワン協働API開発プラットフォーム

API設計

APIドキュメント

APIデバッグ

APIモック

API自動テスト

vLLMとは何か?vLLMのインストールと使い方を解説

中村 拓也

中村 拓也

Updated on 4月 14, 2025

vLLMに関する包括的なガイドへようこそ!もしあなたが大規模言語モデル(LLM)の世界に関わっているなら、推論速度とスループットの課題に直面していることでしょう。これらの巨大なモデルを効率的に提供することはボトルネックになる可能性があります。そこで登場するのが、vLLMというゲームを変えるソリューションです。このチュートリアルでは、初心者として知っておくべきことすべてを説明します:vLLMとは何か、なぜ重要なのか、どのようにインストールするのか、オフラインバッチ処理やオンライン提供にどのように利用するのかについてです。

vLLMとは正確には何ですか?

vLLMは、大規模言語モデル(LLM)の推論と提供のために特別に設計された高スループットでメモリ効率の良いライブラリです。性能制限を克服することを目指した研究者やエンジニアによって開発され、vLLMはLLMから予測(推論)を取得するプロセスを大幅に加速します。

従来のLLM推論方法は、モデルの注意メカニズム(特にKVキャッシュ)の大きなメモリフットプリントを管理し、受信リクエストを効率的にバッチ処理することに苦労します。vLLMは、これらの課題に正面から取り組む新しい技術、特にPagedAttentionを導入します。これにより、はるかに高いスループット(1秒あたりに処理されるリクエスト数)が可能となり、並行リクエストを処理する際に、多くの標準Hugging Face Transformers実装や他の提供フレームワークと比較してモデルをより速く、低コストで提供できるようになります。

vLLMを、事前にトレーニングされたLLMを実行するための高度に最適化されたエンジンとして考えてください。あなたがモデルとプロンプトを提供すれば、vLLMが単一の大きなプロンプトのバッチまたは展開されたモデルと対話する多数の同時ユーザーのためにテキストを迅速かつ効率的に生成します。

LLM推論にvLLMを選ぶ理由

vLLMがLLMで作業する開発者や組織にとって好まれる選択肢となるいくつかの魅力的な理由があります:

  1. 最先端のパフォーマンス:vLLMは、多くのベースライン実装と比較して、大幅に高いスループットを提供します。これは、同時により多くのユーザーリクエストを処理したり、同じハードウェアで大規模なデータセットをより早く処理したりできることを意味します。
  2. 効率的なメモリ管理:コアイノベーションであるPagedAttentionは、KVキャッシュをより効果的に管理することでメモリの無駄を大幅に削減します。これにより、より大きなモデルをGPUに収めたり、既存のモデルをより少ないメモリオーバーヘッドで提供したりでき、ハードウェアコストの削減が期待できます。
  3. 連続バッチ処理:静的バッチ処理(サーバーが完全なバッチを待機する)のような従来の方法に代わり、vLLMはリクエストが到着するたびに動的に処理します。これにより、GPUの利用率が大幅に向上し、個別リクエストのレイテンシが低下します。
  4. OpenAI互換サーバー:vLLMにはOpenAI APIを模倣した内蔵サーバーが含まれています。これにより、OpenAI Pythonクライアントや互換性のあるツールを使用して構築されたアプリケーションのために、vLLMをドロップインの交換として使用することが非常に簡単になります。エンドポイントURLとAPIキーを切り替えることで、既存のコードが自己ホストされたvLLMインスタンスで動作することがよくあります。
  5. 使いやすさ:高度な内部を持ちながら、vLLMはオフライン推論(LLMクラス)とオンライン提供(vllm serveコマンド)の両方に対して比較的シンプルなAPIを提供します。
  6. 幅広いモデル互換性:vLLMはHugging Face Hub上の多くの人気オープンソースLLMをサポートしています(そして、ModelScopeにも対応する可能性があります)。
  7. 積極的な開発とコミュニティ:vLLMは活発にメンテナンスされているオープンソースプロジェクトで、成長するコミュニティがあり、継続的な改善、バグ修正、そして新しいモデルや機能へのサポートを確保しています。
  8. 最適化されたカーネル:vLLMは、さまざまな操作のために高度に最適化されたCUDAカーネルを利用し、NVIDIA GPUでのパフォーマンスをさらに向上させます。

スピード、効率、スケーラビリティがあなたのLLMアプリケーションにとって重要であれば、vLLMは真剣に考慮すべきテクノロジーです。

vLLMはどのモデルをサポートしていますか?

vLLMはHugging Face Hubでホストされる広範な人気のトランスフォーマーベースのモデルをサポートしています。これは、多くのバリエーションを含みます:

  • ラマ(Llama, Llama 2, Llama 3)
  • ミストラル&ミックスストラル
  • クウェン&クウェン2
  • GPT-2, GPT-J, GPT-NeoX
  • OPT
  • ブルーム
  • ファルコン
  • MPT
  • その他多く、マルチモーダルモデルも含まれます。

リストは常に成長しています。公式にサポートされているモデルの最新かつ包括的なリストについては、常に公式のvLLMドキュメントを参照してください:

vLLMサポートモデルリスト

モデルが明示的にリストされていない場合、そのアーキテクチャがサポートされているモデルに類似していれば、それでも動作する可能性がありますが、公式のサポートやテストなしでは互換性は保証されません。新しいモデルアーキテクチャを追加するには、通常、vLLMプロジェクトへのコードの提供が必要です。

いくつかの重要なvLLMの用語:

vLLMは表面的には使いやすいですが、いくつかのコア概念を理解することで、なぜそれが非常に効果的であるかを理解できます:

  • PagedAttention:これは、vLLMのフラッグシップ機能です。従来の注意メカニズムでは、生成のための中間結果を保存するキー・バリュー(KV)キャッシュは連続したメモリブロックを必要とします。これにより、断片化とメモリの無駄(内部および外部)が生じます。PagedAttentionは、オペレーティングシステムにおける仮想メモリのように機能します。KVキャッシュを非連続のブロック(ページ)に分割し、はるかに柔軟で効率的なメモリ管理を可能にします。これにより、メモリオーバーヘッドが大幅に削減され(開発者が報告した中には90%削減もあります)、メモリの重複なしで共有のプレフィックスのような機能も可能になります。
  • 連続バッチ処理:固定数のリクエストが到着するのを待つ代わりに(静的バッチ処理)、連続バッチ処理により、vLLMエンジンは、既存のシーケンスがバッチ内でトークンの生成を終えたのに伴い、新しいシーケンスの処理を始めることができます。これにより、GPUが常にアクティブになり、スループットが最大化され、リクエストの平均待機時間が短縮されます。

これら2つの技術が相互に作用し合うことで、vLLMの印象的なパフォーマンス特性が実現されています。

vLLMを始める前に確認すべきこと:

vLLMをインストールして実行する前に、システムが以下の要件を満たしていることを確認してください:

  1. オペレーティングシステム:Linuxが主にサポートされているOSです。他のOS(WindowsのWSL2やmacOS)に関するコミュニティの努力が存在するかもしれませんが、Linuxは最も簡単で公式にサポートされた体験を提供します。
  2. Pythonのバージョン:vLLMはPython 3.9、3.10、3.11、または3.12が必要です。Pythonの依存関係を管理するために、仮想環境を使用することを強く推奨します。
  3. NVIDIA GPUとCUDA:最適なパフォーマンスとコア機能へのアクセスには、PyTorchおよび必要なCUDAツールキットがサポートする計算能力のあるNVIDIA GPUが必要です。vLLMは最適化されたカーネルのためにCUDAに大きく依存しています。CPU専用の推論や他のアクセラレーター(AMD GPUやAWS Inferentia/Trainium)のサポートは利用可能または開発中ですが、主なパスはNVIDIAハードウェアになります。あなたの特定のGPUドライバーバージョンとCUDAの互換性を確認するには、公式のPyTorchウェブサイトを参照してください。
  4. PyTorch:vLLMはPyTorch上に構築されています。インストールプロセスは通常、互換性のあるバージョンのインストールを処理しますが、問題が発生した場合は、あなたのCUDAバージョンに適合する作業中のPyTorchインストールがあることを確認してください。

vLLMインストールのステップバイステップガイド

vLLMをインストールする推奨方法は、仮想環境内でパッケージマネージャを使用することです。これにより、他のPythonプロジェクトとの競合を防ぎます。以下は、人気のあるツールを使用した手順です:

pipを使用してvLLMをインストール

pipは、標準のPythonパッケージインストーラーです。

仮想環境を作成してアクティブ化(推奨):

python -m venv vllm-env
source vllm-env/bin/activate
# Windowsの場合は:vllm-env\\\\Scripts\\\\activate

vLLMをインストール:

pip install vllm

このコマンドは、vLLMの最新の安定バージョンおよびそのコア依存関係を含む、あなたの検出されたCUDAセットアップに対して互換性のあるバージョンのPyTorchをダウンロードしてインストールします(可能な限り)。

Condaを使用してvLLMをインストール

Condaは、特にデータサイエンスコミュニティで人気のあるもう一つの環境とパッケージマネージャです。

Conda環境を作成してアクティブ化:

conda create -n vllm-env python=3.11 -y # または3.9、3.10、3.12を使用
conda activate vllm-env

Conda内でpipを使用してvLLMをインストール:通常、Conda環境内でもpipを使用してvLLMをインストールすることを推奨し、最新の互換性のあるビルドを簡単に取得できます。

pip install vllm

別途Condaを通じてPyTorchをインストールする必要があるかもしれません、もしそれを好む場合は、それを管理することで互換性を確保します:conda install pytorch torchvision torchaudio pytorch-cuda=11.8 -c pytorch -c nvidia(必要に応じてCUDAのバージョンを調整)。その後、pip install vllmを実行します。

uvを使用してvLLMをインストール

uvは、新しく、非常に高速なPythonパッケージインストーラーおよび解決ツールです。

uvをインストール(まだインストールしていない場合):公式uvドキュメントの指示に従ってください。

uvを使用して環境を作成してアクティブ化:

uv venv vllm-env --python 3.12 --seed # または3.9、3.10、3.11を使用
source vllm-env/bin/activate
# Windowsの場合は:vllm-env\\\\Scripts\\\\activate

uvを使用してvLLMをインストール:

uv pip install vllm

vLLMインストールの確認

インストール後、PythonインタプリタでvLLMをインポートしようとしてすぐに確認できます:

# まずは仮想環境をアクティブ化してください(例:source vllm-env/bin/activate)
python -c "import vllm; print(vllm.__version__)"

これにより、エラーなしでインストールされたvLLMのバージョンが表示されます。

別の方法として、サーバーのヘルプコマンドを試してみてください(インストールが成功している必要があります):

vllm --help

vLLMを使用したオフラインバッチ推論の実行

オフラインバッチ推論とは、あらかじめ定義された入力プロンプトのリスト全体のテキストを一度に生成することを指します。これは、モデルを評価したり、データセットの応答を生成したり、結果を事前に計算したりするタスクに便利です。vLLMはそのLLMクラスを活用してこれを効率的に実行します。

vLLMのLLMクラスについての理解

vllm.LLMクラスはオフライン推論のためのメインエントリポイントです。使用するモデルを指定することで初期化します。

from vllm import LLM

# Hugging Face HubからモデルでLLMエンジンを初期化
# 選択したモデルに対してGPUメモリが十分であることを確認してください!
# 例:OPT-125mのような小さなモデルを使用する場合
llm = LLM(model="facebook/opt-125m")

# 例:Llama-3-8B-Instructのような大きなモデルを使用する場合(かなりのGPUメモリが必要です)
# llm = LLM(model="meta-llama/Meta-Llama-3-8B-Instruct")

print("vLLMエンジンが初期化されました。")

デフォルトでは、vLLMはHugging Face Hubからモデルをダウンロードします。もしモデルがModelScopeにホストされている場合、Pythonスクリプトを実行する前に環境変数VLLM_USE_MODELSCOPE=1を設定する必要があります。

vLLMのサンプリングパラメータの設定

生成されるテキストの制御のために、vllm.SamplingParamsクラスを使用します。これにより、以下のようなパラメータを設定できます:

  • temperature:ランダム性をコントロールします。低い値(例:0.2)は出力をより決定的で焦点を合わせたものにし、高い値(例:0.8)はランダム性を増加させます。
  • top_p(Nucleus Sampling):累積確率がtop_pを超える最も確率の高いトークンのみを考慮します。一般的な値は0.95です。
  • top_k:各ステップで最も確率の高いtop_kトークンのみを考慮します。
  • max_tokens:各プロンプトに対して生成するトークンの最大数です。
  • stop:生成された場合、その特定のプロンプトに対する生成プロセスを停止する文字列のリストです。
from vllm import SamplingParams

# サンプリングパラメータを定義する
# 指定しない場合、vLLMはモデルのgeneration_config.jsonからデフォルトを使用する可能性があります
sampling_params = SamplingParams(
    temperature=0.7,
    top_p=0.9,
    max_tokens=100, # 生成されるテキストの長さを制限
    stop=["\\\\n", " Human:", " Assistant:"] # これらのトークンが出現した場合、生成を停止
)

print("サンプリングパラメータが設定されました。")

重要な注意:デフォルトでは、vLLMはモデルに関連付けられたgeneration_config.jsonファイルから設定を読み込んで使用しようとします。これを無視して、SamplingParamsオブジェクトによって上書きされない限りvLLMのデフォルトのサンプリングパラメータを使用する場合、次のようにLLMクラスを初期化します:llm = LLM(model="...", generation_config="vllm")。もしgenerateメソッドにSamplingParamsオブジェクトを提供した場合、これらのパラメータは常にモデルの設定やvLLMのデフォルトを上書きします。

最初のvLLMバッチジョブを実行する

さて、LLMオブジェクト、SamplingParams、およびプロンプトのリストを組み合わせてテキストを生成します。

from vllm import LLM, SamplingParams

# 1. 入力プロンプトを定義する
prompts = [
    "フランスの首都は",
    "相対性理論を簡単な言葉で説明してください:",
    "雨の日についての短い詩を書いてください:",
    "「こんにちは、世界!」をドイツ語に翻訳してください:",
]

# 2. サンプリングパラメータを設定する
sampling_params = SamplingParams(temperature=0.7, top_p=0.95, max_tokens=150)

# 3. vLLMエンジンを初期化する(ハードウェアに適したモデルを使用)
try:
    # 相対的に小さくて使えるモデルを使用
    llm = LLM(model="mistralai/Mistral-7B-Instruct-v0.1")
    # または小さなGPUの場合:
    # llm = LLM(model="facebook/opt-1.3b")
    # llm = LLM(model="facebook/opt-125m")
except Exception as e:
    print(f"LLMの初期化中にエラーが発生しました:{e}")
    print("十分なGPUメモリがあり、CUDAが正しく設定されていることを確認してください。")
    exit()

# 4. プロンプトに対してテキストを生成する
# generateメソッドはプロンプトのリストとサンプリングパラメータを受け取ります
print("応答を生成中...")
outputs = llm.generate(prompts, sampling_params)
print("生成完了。")

# 5. 結果を表示する
# 出力はRequestOutputオブジェクトのリストです
for output in outputs:
    prompt = output.prompt
    generated_text = output.outputs[0].text # 最初に生成されたシーケンスからテキストを取得
    print("-" * 20)
    print(f"プロンプト: {prompt!r}")
    print(f"生成されたテキスト: {generated_text!r}")
    print("-" * 20)

このスクリプトは、vLLMを初期化し、プロンプトとパラメータを定義し、バッチでの生成プロセスを効率的に実行し、その後、各プロンプトの出力を表示します。llm.generate()呼び出しは、バッチ処理およびGPU実行の複雑さを内部的に処理します。

vLLM OpenAI互換サーバーのセットアップ

vLLMの最も強力な機能の1つは、OpenAI APIと同じ言語で通信する高性能バックエンドサーバーとして機能する能力です。これにより、自分自身のオープンソースモデルをホストし、OpenAI用に設計されたアプリケーションに統合することが容易になります。

vLLMサーバーを起動する

サーバーを起動するのは、ターミナルでvllm serveコマンドを使用することで簡単です。

vLLMがインストールされている仮想環境をアクティブ化してください。

source vllm-env/bin/activate

コマンドvllm serveを実行:提供したいモデルを指定する必要があります。

# Mistral-7B-Instructを使用する例
vllm serve mistralai/Mistral-7B-Instruct-v0.1

# Qwen2-1.5B-Instructのような小さなモデルを使用する例
# vllm serve Qwen/Qwen2-1.5B-Instruct

このコマンドは以下を行います:

  • 指定されたモデルをダウンロードします(既にキャッシュされていない場合)。
  • モデルをGPUにロードします。
  • (デフォルトでUvicornを使用して)ウェブサーバーを起動します。
  • 一般的にhttp://localhost:8000で受信するAPIリクエストを待機します。

一般的なオプション:

  • -model <model_name_or_path>:(必須)提供するモデル。
  • -host <ip_address>:サーバーをバインドするIPアドレス(例えば、0.0.0.0でネットワーク上でアクセス可能にします)。デフォルトはlocalhost
  • -port <port_number>:待機するポート。デフォルトは8000
  • -tensor-parallel-size <N>:マルチGPU提供のために、モデルをN GPUに分割します。
  • -api-key <your_key>:設定されている場合、サーバーは受信リクエストのAuthorization: Bearer <your_key>ヘッダーにこのAPIキーを期待します。VLLM_API_KEY環境変数を設定することもできます。
  • -generation-config vllm:モデルのgeneration_config.jsonの代わりにvLLMのデフォルトのサンプリングパラメータを使用します。
  • -chat-template <path_to_template_file>:トークナイザ設定で定義されたものではなく、カスタムJinjaチャットテンプレートファイルを使用します。

サーバーは、実行中でありリクエストを受け付ける準備が整っていることを示すログを出力します。

vLLMサーバーと対話する:Completions API

サーバーが実行中であれば、OpenAIの古いcompletions APIのように、/v1/completionsエンドポイントにリクエストを送信できます。

curlを使用:

curl <http://localhost:8000/v1/completions> \\\\
    -H "Content-Type: application/json" \\\\
    -d '{
        "model": "mistralai/Mistral-7B-Instruct-v0.1",
        "prompt": "サンフランシスコは",
        "max_tokens": 50,
        "temperature": 0.7
    }'

"mistralai/Mistral-7B-Instruct-v0.1"を実際に提供しているモデルに置き換えてください)

Pythonライブラリopenaiを使用:

from openai import OpenAI

# クライアントをvLLMサーバーのエンドポイントにポイントする
client = OpenAI(
    api_key="EMPTY", # --api-keyで設定した場合は"EMPTY"または実際のキーを使用
    base_url="<http://localhost:8000/v1>"
)

print("vLLMサーバーにリクエストを送信中(Completions)...")

try:
    completion = client.completions.create(
        model="mistralai/Mistral-7B-Instruct-v0.1", # モデル名は提供したものと一致する必要があります
        prompt="vLLMを使用する利点について説明してください:",
        max_tokens=150,
        temperature=0.5
    )

    print("応答:")
    print(completion.choices[0].text)

except Exception as e:
    print(f"エラーが発生しました:{e}")

(異なるモデルを提供している場合はモデル名を置き換え忘れないようにしてください)

vLLMサーバーと対話する:Chat Completions API

vLLMは、会話型モデルや構造化メッセージ形式(システム、ユーザー、アシスタントの役割)に適したより現代的な/v1/chat/completionsエンドポイントもサポートしています。

curlを使用:

curl <http://localhost:8000/v1/chat/completions> \\\\
    -H "Content-Type: application/json" \\\\
    -d '{
        "model": "mistralai/Mistral-7B-Instruct-v0.1",
        "messages": [
            {"role": "system", "content": "あなたは役に立つアシスタントです。"},
            {"role": "user", "content": "vLLMにおけるPagedAttentionの主な利点は何ですか?"}
        ],
        "max_tokens": 100,
        "temperature": 0.7
    }'

(必要に応じてモデル名を置き換えてください)

Pythonライブラリopenaiを使用:

from openai import OpenAI

# クライアントをvLLMサーバーのエンドポイントにポイントする
client = OpenAI(
    api_key="EMPTY", # "EMPTY"または実際のキーを使用
    base_url="<http://localhost:8000/v1>"
)

print("vLLMサーバーにリクエストを送信中(Chat Completions)...")

try:
    chat_response = client.chat.completions.create(
        model="mistralai/Mistral-7B-Instruct-v0.1", # モデル名は提供したものと一致する必要があります
        messages=[
            {"role": "system", "content": "あなたは役に立つプログラミングアシスタントです。"},
            {"role": "user", "content": "階乗を計算するシンプルなPython関数を書いてください。"}
        ],
        max_tokens=200,
        temperature=0.5
    )

    print("応答:")
    print(chat_response.choices[0].message.content)

except Exception as e:
    print(f"エラーが発生しました:{e}")

(必要があればモデル名を置き換え忘れないようにしてください)

OpenAI互換サーバーを使用することは、既存のアプリケーションロジックに最小限の変更で、高性能なLLM推論エンドポイントを展開するための強力な方法です。

vLLMのアテンションバックエンドについてお話ししましょう

vLLMは、アテンションメカニズムを効率的に計算するために特化した「バックエンド」を利用しています。これらのバックエンドは、主にNVIDIA GPUをターゲットとした異なるライブラリや技術を活用した最適化された実装です。バックエンドの選択は、性能やメモリ使用量に影響を与える可能性があります。主なものには以下が含まれます:

  1. FlashAttention: FlashAttentionライブラリ(バージョン1および2)を使用します。FlashAttentionは、計算を大幅に加速し、GPUのハイ・バンドウィズ・メモリ(HBM)内に大きな中間注意マトリックスを具現化する必要がないことでメモリ使用量を減らす非常に最適化された注意アルゴリズムです。それは、多くの現代GPU(Ampere、Hopperアーキテクチャなど)とシーケンスの長さにおいて、しばしば最も高速なオプションです。vLLMは通常、FlashAttentionサポートを含む事前ビルドされたホイールを含みます。
  2. Xformers: Meta AIによって開発されたxFormersライブラリを活用します。xFormersは、メモリ効率の良い最適化された注意実装(MemoryEfficientAttentionのように)も提供します。それはさまざまなGPUアーキテクチャに対する広範な互換性を提供し、FlashAttentionが利用できないまたは特定のシナリオで最適ではない場合の良好な代替またはフォールバックとなる可能性があります。vLLMの標準インストールにはxFormersのサポートが含まれています。
  3. FlashInfer: FlashInferライブラリを利用した最近のバックエンドオプションです。FlashInferは、LLMをデプロイするために特に調整された非常に最適化されたカーネルを提供し、特にさまざまな事前補充やデコーディングのシナリオ、推測デコーディングやページ化されたKVキャッシュの効率的な処理のような機能に焦点を当てています。通常、vLLMにFlashInferを含む事前ビルドされたホイールはありません。したがって、これを使用する前に、環境内に別途インストールする必要があります。このバックエンドを使用する予定であれば、FlashInferの公式ドキュメントやvLLMのDockerfileを参照してインストール手順を確認してください。

自動バックエンド選択:デフォルトで、vLLMはハードウェア(GPUアーキテクチャ)、インストールされているライブラリ(FlashAttention/xFormers/FlashInferが利用可能かどうか)、および使用される特定のモデルに基づいて最も適したパフォーマンスバックエンドを自動的に検出します。互換性を確認し、手動設定なしで優れたパフォーマンスを提供することを目指します。

手動バックエンド選択:いくつかの高度な使用ケースやベンチマーク目的では、特定のバックエンドを強制的に使用することもあります。vLLMプロセスを起動する前に、VLLM_ATTENTION_BACKEND環境変数を設定することで、これを行うことができます(オフラインスクリプトまたはサーバーのいずれか)。

# 例:FlashAttentionを強制的に使用(インストールされており、互換性がある場合)
export VLLM_ATTENTION_BACKEND=FLASH_ATTN
python your_offline_script.py
# または
# export VLLM_ATTENTION_BACKEND=FLASH_ATTN
# vllm serve your_model ...

# 例:xFormersを強制的に使用
export VLLM_ATTENTION_BACKEND=XFORMERS
python your_offline_script.py

# 例:FlashInferを強制的に使用(事前にインストールが必要)
export VLLM_ATTENTION_BACKEND=FLASHINFER
python your_offline_script.py

初心者の方には、vLLMの自動バックエンド選択に依存することをお勧めします。バックエンドを手動で設定することは、通常、実験や特定のパフォーマンス問題のトラブルシューティングのために予約されます。

一般的なvLLMインストールおよび使用問題のトラブルシューティング

vLLMは使いやすさを目指していますが、特にセットアップ中にいくつかの一般的な障害に直面するかもしれません。ここでは、頻繁な問題とその潜在的な解決策を紹介します:

  1. CUDAのメモリ不足(OOM)エラー:
  • 問題:torch.cuda.OutOfMemoryError: CUDA out of memoryのようなエラーが表示されます。
  • 原因:読み込もうとしているLLMが、ハードウェア上で利用可能なGPU VRAMよりも多くのメモリを必要とします。大きなモデル(例:7Bパラメータ以上)は、膨大なメモリを消費します。
  • 解決策:
  • 小さいモデルを使用:opt-1.3bQwen/Qwen2-1.5B-Instructのような小さなバリアントの読み込みを試み、セットアップが機能することを確認してください。
  • バッチサイズの削減(サーバー):vLLMはバッチ処理を動的に管理しますが、非常に高い同時接続がメモリを超えることがあります。使用量を監視してください。
  • 量子化の使用:モデルの量子化されたバージョンを読み込む(例:AWQ、GPTQ、GGUF - vLLMドキュメントでサポートされている量子化タイプを確認)。量子化はメモリフットプリントを減らし、しばしばわずかな正確さのトレードオフがあります。例:llm = LLM(model="TheBloke/Mistral-7B-Instruct-v0.1-AWQ")。特定の量子化ライブラリにはインストールが必要な場合があります。
  • テンソル並列処理:複数のGPUがある場合、サーバー起動時に-tensor-parallel-size N引数を使用するか、LLMクラスを初期化する際にtensor_parallel_size=Nを使用してモデルをN GPUに分割します。
  • 他のプロセスの確認:他のアプリケーションが重要なGPUメモリを消費していないことを確認してください。ターミナルでnvidia-smiを使用してメモリ使用量を確認します。
  1. インストールエラー(CUDA/PyTorch互換性):
  • 問題:pip install vllmがCUDA、PyTorch、またはコンパイル拡張に関連するエラーで失敗します。
  • 原因:インストール済みのNVIDIAドライバー、CUDA Toolkitのバージョン、vLLMがインストールまたは使用しようとしているPyTorchバージョンとの不一致。
  • 解決策:
  • 互換性の確認:お使いのNVIDIAドライバーバージョンが、使用する