# サーバーの最適化

`transformers serve`には、スループットを向上させ、メモリ使用量を削減するための最適化が含まれています。

## 連続バッチ処理

[Continuous batching](../continuous_batching)は、GPU上のフォワードパスを共有するために、リクエストを動的にグループ化してインターリーブします。他のリクエストがプリフィルフェーズを進める間に、新しいリクエストがバッチに参加します。デコードが完了したリクエストはバッチから離脱します。これにより、レイテンシを犠牲にすることなく、GPUの利用率とスループットを向上させることができます。

`--continuous-batching` を追加して有効にします。

```sh
transformers serve \
  --continuous-batching \
  --attn-implementation "sdpa"
```

## 量子化

[Quantization](../quantization/overview)は、重みを低い精度にマッピングすることでメモリ使用量を削減します。`transformers serve`は、TransformersのすべてのQuantization手法に対応しています。事前Quantization済みモデルと実行時Quantizationの両方をサポートしています。

事前量子化モデルは、いかなる変更も必要ありません。パフォーマンスと精度のバランスが最も優れています。適切な量子化ライブラリをインストールしてください。その後、Hubからの事前量子化モデルを`model`引数に渡します。

```sh
curl http://localhost:8000/v1/responses \
  -H "Content-Type: application/json" \
  -d '{
    "model": "Qwen/Qwen3-8B-GGUF",
    "stream": true,
    "input": "Tell me a three sentence bedtime story about a unicorn."
  }'
```

`--quantization` を使用して、モデルをランタイム時に量子化します。これは、事前量子化された重みを持たない新しいチェックポイントやファインチューンに有用です。サポートされているのは、[bitsandbytes](../quantization/bitsandbytes) による 4 ビットおよび 8 ビットの量子化のみです。

```sh
transformers serve \
  --quantization bnb-4bit
```

## アテンションバックエンド

最適化された[attention バックエンド](../attention_interface)により、メモリ効率の向上と推論の高速化が実現されます。

```sh
transformers serve \
  --continuous-batching \
  --attn-implementation "flash_attention_2"
```

### Apple Silicon（Metal flash attention）

MPS で `--continuous-batching` を使用する場合、[kernels](https://github.com/huggingface/kernels) をインストールして [kernels-community/metal-flash-sdpa](https://huggingface.co/kernels-community/metal-flash-sdpa) に切り替えます。`generate_batch` (gsm8k, Qwen2.5-0.5B-Instruct, fp16) では SDPA より 1.66 倍高速で、グリーディデコーディング下ではトークン単位で一致します。

```sh
pip install kernels
transformers serve --continuous-batching
```

連続バッチ処理を行わない場合、モデルはデフォルトの注意機構（SDPA）を維持します。`--attn-implementation` を渡すことで、`kernels-community/metal-flash-sdpa` など別の注意機構を試すことができます。

## コンパイル

[torch.compile](../perf_torch_compile) はデコードループをトレースしてコンパイルし、推論を高速化します。

> [!NOTE]
> Compile は連続バッチ処理と互換性がありません。

```sh
transformers serve \
  --compile
```

## データ型

`"bfloat16"` または `"float16"` の [データ型](../models#model-data-type) は、メモリを節約しスループットを向上させます。

```sh
transformers serve \
  --continuous-batching \
  --dtype "bfloat16"
```

