# vLLM

[vLLM](https://github.com/vllm-project/vllm)は、大規模なLLMのサービングに使用される高スループットの推論エンジンです。リクエストを継続的にバッチ処理し、PagedAttentionによってKVキャッシュのメモリをコンパクトに保ちます。

`model_impl="transformers"` を設定すると、Transformers のモデリングバックエンドを使用してモデルを読み込むことができます。

```py
from vllm import LLM

llm = LLM(model="meta-llama/Llama-3.2-1B", model_impl="transformers")
print(llm.generate(["The capital of France is"]))
```

オンラインサービングでは、`vllm serve` コマンドに `--model-impl transformers` を渡します。

```bash
vllm serve meta-llama/Llama-3.2-1B \
    --task generate \
    --model-impl transformers
```

## Transformers の統合

1. [AutoConfig.from_pretrained()](/docs/transformers/main/ja/model_doc/auto#transformers.AutoConfig.from_pretrained) は、Hub または Hugging Face のキャッシュからモデルの `config.json` を読み込みます。vLLM は `architectures` フィールドを内部のモデルレジストリと照合して、使用する vLLM のモデルクラスを決定します。
2. モデルがレジストリに存在しない場合、vLLM は [AutoModel.from_config()](/docs/transformers/main/ja/model_doc/auto#transformers.AutoModel.from_config) を呼び出して、Transformers のモデル実装を読み込みます。
3. [AutoTokenizer.from_pretrained()](/docs/transformers/main/ja/model_doc/auto#transformers.AutoTokenizer.from_pretrained) はトークナイザーのファイルを読み込みます。vLLM は推論時のオーバーヘッドを軽減するために、トークナイザーの内部状態の一部をキャッシュします。
4. モデルの重みを、safetensors形式でHubからダウンロードします。

`model_impl="transformers"` を設定すると、vLLM のモデルレジストリをバイパスして Transformers から直接読み込みます。vLLM は Transformers のモデル構造を維持したまま、ほとんどのモデルモジュール（MoE、アテンション、線形層）を独自の最適化されたバージョンに置き換えます。

## リソース

- 使用例やヒントの詳細については、[vLLM docs](https://docs.vllm.ai/en/latest/models/supported_models.html#transformers)を参照してください。
- [Hugging Face への統合](https://docs.vllm.ai/en/latest/design/huggingface_integration/)では、vLLM が Transformers とどのように統合されるかを説明しています。

