# SGLang

[SGLang](https://docs.sglang.ai) は、大規模言語モデル（LLM）向けの低レイテンシかつ高スループットな推論エンジンです。エージェント型ワークフローを構築するためのフロントエンド言語も含まれています。

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

```py
import sglang as sgl

llm = sgl.Engine("meta-llama/Llama-3.2-1B-Instruct", model_impl="transformers")
print(llm.generate(["The capital of France is"], {"max_new_tokens": 20})[0])
```

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

```bash
python3 -m sglang.launch_server \
  --model-path meta-llama/Llama-3.2-1B-Instruct \
  --model-impl transformers \
  --host 0.0.0.0 \
  --port 30000
```

## Transformers の統合

`model_impl="transformers"` を設定すると、SGLang はネイティブなモデルマッチングをスキップし、Transformers のモデルを直接使用するように指示されます。

1. [PreTrainedConfig.from_pretrained()](/docs/transformers/main/ja/main_classes/configuration#transformers.PreTrainedConfig.from_pretrained) loads the model's `config.json` from the Hub or your Hugging Face cache.
2. [AutoModel.from_config()](/docs/transformers/main/ja/model_doc/auto#transformers.AutoModel.from_config) は、config に基づいてモデルクラスを解決します。
3. 読み込み中に、`_attn_implementation` は `"sglang"` に設定されます。これにより、アテンションの呼び出しが SGLang の RadixAttention カーネルを介してルーティングされます。
4. SGLangの並列線形クラスは、テンソル並列性をサポートするために線形層を置き換えます。
5. [load_weights](https://github.com/sgl-project/sglang/blob/main/python/sglang/srt/models/transformers.py#L277) 関数は、safetensors ファイルから重みを読み込み、モデルに設定します。

このモデルは、Transformersのモデル構造を使用しながら、SGLangのすべての最適化の恩恵を受けることができます。

> [!WARNING]
> 対応するモデルには、SGLang がアテンションの実行を制御できるように `_supports_attention_backend=True` が必要です。詳細については、[推論用の対応モデルバックエンドの構築](./transformers_as_backend#model-implementation)ガイドを参照してください。

## リソース

- [SGLang docs](https://docs.sglang.ai/supported_models/transformers_fallback.html)には、Transformers をバックエンドとして使用する際の、より多くの使用例やヒントが記載されています。
- [Transformers backend integration in SGLang](https://huggingface.co/blog/transformers-backend-sglang) というブログ記事では、この統合によって何が実現できるかを説明しています。

