カスタム Model Serving を使用してカスタムLLMをデプロイ
プレビュー
この機能は パブリック プレビュー段階です。ワークスペース管理者は、 プレビュー ページからこの機能へのアクセスを制御できます。Databricksのプレビューを管理するを参照してください。
このページでは、Model Serving GPU Endpoint 上で独自の LLM をサーブする方法について説明します。vLLM がランするすべてのモデルは、OpenAI 互換 API を備えた本番運用 Endpoint になります。これは仕組みの例です:
- vllm などの推論サーバーを実行し、そのバージョンと設定を選択します。
- serverless GPU ノートブックでサーバーをテストします。デプロイ後ではなく、数秒で誤ったフラグまたはメモリ不足エラーが表示されます。
- 構築して動作を確認したものと同じコマンドおよび環境を、本番運用のサービングEndpointにデプロイします。
クイックスタート
次のノートブックをワークスペースにインポートし、A10 GPU を搭載した AI ランタイムで Run all をクリックします。約 15 分で、Qwen3.5-4B が使用可能になりますOpenAI 互換のチャットリクエストに応答する Endpoint。
vLLM で Qwen3.5-4B をサービングする
カスタムLLMサービスを使用するタイミング
次の場合にはカスタム LLM サービングを使用します。
- AI ランタイム で LLM をファインチューニングし、それをサービングする場合。例については、以下のセクションを参照してください。
- 新しい LLM、音声認識モデル、埋め込みモデルなど、基盤モデル APIs (FMAPI) がサポートしていないオープンモデルを提供したい場合。
- LLM のランタイムやアーキテクチャを変更したい場合や、ランタイムと環境の制御が必要な場合。
次の場合にはカスタム LLM サービングを使用しないでください。
- FMAPI は、必要なモデルを変更せずに提供します。FMAPI は使いやすく、高度に最適化されています。
- このモデルは、約 80 GB のメモリを持つ単一の GPU には収まりません。たとえば、Qwen3.8-27B や gpt-oss-120b は収まりますが、Kimi K3 や GLM 5.3 は収まりません。
- チューニングなしで、フロンティアレベルの throughput またはトークンあたりの価格が必要な場合。同じ GPU 上でオープンソースの vLLM と同等のパフォーマンスを発揮します。
要件
カスタムLLMサービングには次の要件があります。
- ワークスペースでServerless GPU コンピュートが有効になっている必要があります。
- Serverless GPU ノートブックからモデルをログに記録する必要があります。CPU環境からログに記録されたモデルはCPUの依存関係をパッケージ化しますが、GPU Endpointの起動に失敗します。
- Unity Catalog スキーマでモデルを作成する権限が必要です。
- モデルを
env_pack="databricks_model_serving"に登録する必要があります。カスタムLLMサービングは、ノートブックの環境をモデルとともにパッケージ化するExpressデプロイメントを基盤としています。 - MLflow 3.12 以上と、
databricks-sdk0.102.0 以上を使用する必要があります。AI v6環境には両方が含まれています。
スターター ノートブック
各ノートブックは、クイックスタートのように、Hugging Face からクエリーされた Endpoint に 1 つのモデルを持ち込みます。そのまま ラン を実行するか、そこから独自のモデルを提供するように起動します。
モデル | タスク | 環境 | ノートブック GPU | GPU Endpoint |
|---|---|---|---|---|
Chat | AI v6またはStandard v6 | A10 | A10G(AWS)、A100(Azure) | |
ツール呼び出しによるチャット | AI v6 | H100 | H100 (AWS)、A100 (Azure) | |
ツール呼び出しによるチャット | AI v6 | H100 | H100 (AWS)、A100 (Azure) | |
Chat | Standard v6 | H100 | H100 (AWS)、A100 (Azure) | |
音声認識 (speech to text) | AI v6 | A10 | A10G(AWS)、A100(Azure) | |
Embeddings | AI v6 | A10 | A10G(AWS)、A100(Azure) |
AI v6 および Standard v6 は AI ランタイム環境です。AI v6 には、vLLM、PyTorch、Transformers、およびその他の一般的なMachine Learningパッケージがプリインストールされており、すぐに使用できます。AI v6 パッケージの一覧については、AI v6 package list を参照してください。Standard v6 ノートブックは vLLM 自体をインストールするため、そのバージョンを選択します。Muse Glimmer のように、AI v6 に含まれるバージョンよりも新しい vLLM や transformers がモデルに必要な場合は、Standard v6 ノートブックを使用します。
独自のモデルをサービングする
別のモデルをサービングするには、同じタスクとモデルに必要な GPU を使用するスターターノートブックを選択します。MODEL_REPO_ID と vllm_command のフラグを変更し、ノートブックを実行します。すべてのノートブックは次のステップを実行します。
- download the model weights from Hugging Face, or get them from a トレーニングチェックポイントから取得します。
- ノートブックで vLLM を起動し、クエリーを実行します。
- vLLM コマンドを入力ポイントとしてモデルをログに記録し、エクスプレスデプロイメントとして Unity Catalog に登録します。
- 同じコマンドを起動するサービングEndpointを作成します。
- OpenAI クライアント、Databricks SDK、または SQL
ai_queryを使用して Endpoint にクエリーを実行します。
次の例では、モデルの metadata にタスクとエントリポイントが保持されます。
import mlflow
from mlflow.pyfunc.model import ChatCompletionResponse, ChatModel
# The endpoint runs the entrypoint and never calls predict, but MLflow needs a model class to log.
class Placeholder(ChatModel):
def predict(self, context, messages, params):
return ChatCompletionResponse.from_dict({"choices": []})
model_info = mlflow.pyfunc.log_model(
name="my-model",
python_model=Placeholder(),
artifacts={"model_dir": "my-model"}, # the weights folder, which --model names
metadata={
"task": "llm/v1/chat",
"entrypoint": (
"python -u -m vllm.entrypoints.openai.api_server "
"--model my-model --served-model-name my-model "
"--host 0.0.0.0 --port 8080 --max-model-len 16384"
),
},
)
mlflow.register_model(model_info.model_uri, "<catalog>.<schema>.my_model", env_pack="databricks_model_serving")
ファインチューニングされたモデルをサービングする
AI ランタイム でモデルをファインチューニングし、同じノートブックから提供します。例については、Qwen3.5-0.8B の教師ありファインチューニング(フル)とサービングを参照してください。このチュートリアルでは、単一の H100 上で Qwen3.5-0.8B のファインチューニングを実行し、トレーニング前後の回答を比較して、ファインチューニング済みモデルを提供します。
サポートされているタスク
モデルのメタデータ内のtaskにより、Endpointが提供するAPIが設定されます。サーバーは、そのタスクに対応するOpenAI互換APIを公開する必要があります。llm/v1/completionsなどの他のタスクはサポートされていません。次の表に、サポートされているタスクの一覧を示します。
| モデルのタイプ | 次を使用してクエリーを実行: |
|---|---|---|
| ビジョン言語モデルを含むチャットモデル |
|
| 埋め込みモデル |
|
| 音声認識モデル |
|
| 音声から英語への翻訳モデル |
|
GPU の選択
Databricksでは、使用するGPUと同じGPUで開発することを推奨しています。そうすることで、テストした設定がデプロイする設定になります。次の表に、カスタムLLMサービングに使用できるGPUを示します。
| GPU | 注 |
|---|---|---|
| 1x T4(16 GB) | 小規模モデル。 |
| 1x A10G(24 GB) | 約10Bパラメーターまでのモデル。一般利用可能です。 |
| 1x L40S (48GB) | 約15Bパラメーターまでのモデル。 |
| 1x H100(80GB) | 大規模な LLM に推奨されます。 |
| 1x RTX PRO 6000(96 GB) | H100よりもメモリは多いですが、LLM サービングに対する最適化は劣ります。 |
よくある問題
ノートブックを変更する場合、次の問題が最もよく発生します:
/Workspaceでは、複数GBのファイルを受け付けないため、downloadに失敗します。スターターノートブックと同様に、重みをローカルディスクにdownloadします。- ローカルサーバーが起動しません。Serverless GPU ノートブックではポート 3000 ~ 3999 のみが許可されるため、いずれかのポートでテストしてください。エントリーポイントのみがポート 8080 を使用するため、それ以外の場合はテストしたコマンドと一致させる必要があります。
- Endpoint が重みを見つけることができません。エントリポイントはモデルの アーティファクト フォルダで実行されるため、
--modelはログに記録した重みフォルダを指定する必要があります。 - 埋め込みモデルは埋め込みを提供しません。
--runner poolingで vLLM を起動します。 model_version.tarまたはmodel_environment.tarの upload 中にTimeoutError('Timed out after 0:05:00')で登録が失敗します。databricks-sdk0.102.0 以降にアップグレードし、モデルを再度登録します。
Endpointを作成
スターターノートブックで行われているように、サービング UI または Databricks SDK から Endpoint を作成します。workload_type が GPU を選択し、workload_size (Small、Medium、または Large) がレプリカ数を設定します。
ServedEntityInput(
entity_name="<catalog>.<schema>.<model>",
entity_version="<version>",
workload_type=ServingModelWorkloadType.GPU_MEDIUM,
workload_size="Small",
scale_to_zero_enabled=False,
)
ゼロへのスケーリングと容量
現在、カスタム llm の Endpoint は動的にオートスケールしないため、ピーク時のトラフィックに合わせてworkload_size などのサイズを設定してください。
「scale-to-zero」では、アイドル状態のEndpointはすべてのレプリカを停止します。次のリクエストでは、vLLM がモデルを再度ロードし、すべてのレプリカが起動するまでの間、1 分から数分間待機します。Databricks では、本番運用のトラフィックに対してスケールトゥゼロをオフにすることを推奨しています。
スケールアップ容量は保証されません。 作成時、workload_size の増加時、または Endpoint がゼロから復帰時など、Databricks が Endpoint 用の新しい GPU を取得する必要がある場合、クラウドプロバイダーのリージョンに GPU 容量がないとリクエストが失敗することがあります。Databricks は、ウォームプールと事前予約によってこれを軽減し、GPU 容量を利用可能な状態で常に準備しておきます。
GPU_XLARGE (1xH100) Endpoint は現在 scale_to_zero_enabled=True をサポートしていません。
Endpointにクエリー
準備完了したチャットEndpointが AI Playground に表示されます。次の例では、Databricks SDK、OpenAI クライアント、および REST を使用して Endpoint にクエリーを実行します。
- Databricks SDK
- OpenAI client
- REST: chat
- REST: embeddings
from databricks.sdk import WorkspaceClient
from databricks.sdk.service.serving import ChatMessage, ChatMessageRole
w = WorkspaceClient()
w.serving_endpoints.query(
name="<endpoint-name>",
messages=[ChatMessage(role=ChatMessageRole.USER, content="Hello")],
)
from openai import OpenAI
client = OpenAI(api_key=DATABRICKS_TOKEN, base_url=f"{DATABRICKS_HOST}/serving-endpoints")
client.chat.completions.create(model="<endpoint-name>", messages=[{"role": "user", "content": "Hello"}])
client.embeddings.create(model="<endpoint-name>", input=["The quick brown fox jumps over the lazy dog."])
with open("speech.flac", "rb") as audio:
client.audio.transcriptions.create(model="<endpoint-name>", file=audio)
curl -X POST \
-u "token:$DATABRICKS_TOKEN" \
-H "Content-Type: application/json" \
-d '{"messages":[{"role":"user","content":"Hello"}]}' \
https://<workspace-url>/serving-endpoints/<endpoint-name>/invocations
curl -X POST \
-u "token:$DATABRICKS_TOKEN" \
-H "Content-Type: application/json" \
-d '{"input":["The quick brown fox jumps over the lazy dog."]}' \
https://<workspace-url>/serving-endpoints/<endpoint-name>/invocations
一部の埋め込みモデルでは、search_query:やsearch_document:など、各入力にプレフィックスが必要です。モデルカードを確認してください。
エンドポイントを監視する
Endpointの Logs tabに、サーバーのstdoutとstderrがリアルタイムで表示されます。logs APIは同じ出力を返します。
Databricks は vLLM サーバーのメトリクスを転送し、エンドポイントの Metrics tab にチャート化します。
- レイテンシー: 最初のトークンまでの時間、出力トークンあたりの時間、リクエストのレイテンシー、およびキュー時間。
- ロード: 実行中および待機中のリクエスト
- KV キャッシュ: 使用量とヒット率。
- throughput:1秒あたりのプロンプトおよび生成トークン数。
エクスポートメトリクス API は Prometheus 形式の同じメトリクスを返すため、Prometheus や Datadog にスクレイピングできます。
テレメトリを有効にすると、DatabricksはサーバーのログとvLLM PrometheusメトリクスをUnity Catalogテーブルにも保存するため、より長期間にわたってクエリーできます。カスタムモデルサービングデータをUnity Catalogに永続化するを参照してください。
価格
GPU カスタムモデルサービングの他の場合と同様に、GPU インスタンス時間ごとに課金されます。モデルサービングの価格を参照してください。
制限事項と利用可能なリージョン
AIランタイムからカスタムLLMをログに記録するため、カスタムLLMサービングはServerless GPUコンピュートと同じリージョンで利用できます。AWSとAzureの米国リージョンです。GCPはサポートされていません。
以下の機能がまもなく追加されます:
- LoRA アダプター。
- クロスリージョン サービング。
- Databricks Runtime や Serverless などの AI Runtime 外部でモデルをログ記録する場合。
以下の機能はサポートされていません。
- KV キャッシュ対応ルーティング。
- ルート最適化。