カスタム モデル サービスを使用してカスタム LLM を提供する

Important

この機能は パブリック プレビュー段階です。 ワークスペース管理者は、[ プレビュー] ページからこの機能へのアクセスを制御できます。 Manage Azure Databricks プレビューを参照してください。

このページでは、Model Serving GPUエンドポイント上で独自の LLM をデプロイする方法を示します。 vLLMが実行するあらゆるモデルは、OpenAI互換APIを持つ本番エンドポイントとなります。 仕組みはこうです:

  • vLLM などの推論サーバーを実行し、そのバージョンと設定を選択します。
  • サーバーレスGPUノートブック内でサーバーをテストします。 間違ったフラグやメモリ不足エラーは、デプロイ後ではなく数秒で表示されます。
  • 自分で作り、機能することが分かっているコマンドと環境を、本番用のサービング エンドポイントにデプロイします。

クイック スタート

以下のノートブックをワークスペースにインポートし、A10 GPU を使用する AI Runtime で [すべて実行] をクリックします。 約15分で、OpenAI互換チャットリクエストに対応するQwen3.5-4Bエンドポイントが完成します。

vLLM で Qwen3.5-4B を提供する

ノートブックを入手

カスタム LLM サービスを使用する場合

カスタムLLMを以下のケースで使用します:

  • AI ランタイムで LLM を微調整し、それをデプロイしたいと考えているます。 例は 以下のセクション をご覧ください。
  • Foundation Model API(FMAPI)がサポートしないオープンモデル、例えば新しいLLM、音声からテキストへのモデル、埋め込みモデルなどを提供したいのです。
  • LLMのランタイムやアーキテクチャを変更したい場合、ランタイムや環境の制御が必要です。

以下の場合、カスタムLLMサービングは使わないでください。

  • FMAPIは必要なモデルをそのまま提供します。 FMAPIは使いやすく、非常に最適化されています。
  • このモデルは約80GBのメモリを持つ単一のGPUには収まりません。 例えば、Qwen3.8-27Bやgpt-oss-120bは合いますが、Kimi K3やGLM 5.3は合いません。
  • チューニングなしでフロンティアレベルのスループットやトークンあたりの価格が必要です。 同じGPU上でオープンソース vLLMと性能が同等です。

Requirements

カスタムLLMサービングには以下の要件があります:

  • ワークスペースは サーバーレスGPUコンピュートでなければなりません。
  • その場合、サーバーレス GPU ノートブックからモデルを記録する必要があります。 CPU 環境で記録されたモデルは CPU 依存関係をパッケージ化し、GPU エンドポイントが起動しなくなります。
  • Unity Catalogスキーマでモデルを作成するには権限が必要です。
  • モデルを env_pack="databricks_model_serving" に登録しなければなりません。 カスタムLLMの提供は、ノートブックの環境をモデルとともにパッケージ化するエクスプレスデプロイメントに基づいて構築されています。
  • MLflow 3.12以上およびdatabricks-sdk 0.102.0以上を使用する必要があります。 AI v6環境にはその両方が含まれています。

スターターノートブック

各ノートブックは、Hugging Face の 1 つのモデルを、quickstart のようにクエリ対象のエンドポイントに送ります。 そのまま実行するか、それをベースにして自分のモデルを提供するために利用します。

Model Task 環境 ノートブック GPU エンドポイントGPU
Qwen3.5-4B チャット AI v6 または Standard v6 A10 A10G (AWS), A100 (Azure)
Qwen3.8-27B ツール呼び出しでチャット AI v6 H100 H100 (AWS), A100 (Azure)
Gemma 4 26B-A4B ツールコールでチャット AI v6 H100 H100 (AWS), A100 (Azure)
ミューズ グリマー 30B チャット 標準v6 H100 H100 (AWS), A100 (Azure)
Whisper large-v3-turbo 音声からテキストへ変換 AI v6 A10 A10G (AWS), A100 (Azure)
Qwen3-Embedding-0.6B Embeddings AI v6 A10 A10G (AWS), A100 (Azure)

AI v6とStandard v6は AIランタイム環境です。 AI v6にはvLLM、PyTorch、Transformers、その他の一般的な機械学習パッケージがプリインストールされ、すぐに使える状態です。 AI v6パッケージリストをご覧ください。 Standard v6 ノートブックは vLLM 自体をインストールするため、バージョンを選択できます。 モデルがAI v6に含まれるものより新しいvLLMやtransformersを必要とする場合は、Muse GlimmerのようにStandard v6ノートブックを使いましょう。

自分のモデルを提供する

別のモデルを使用するには、同じタスクに対応し、そのモデルに必要な GPU を備えたスターター ノートブックを選びます。 MODEL_REPO_IDとvllm_commandのフラグを変更してからノートブックを実行してください。 すべてのノートブックで以下のステップが実行されます:

  1. モデルの重みはHugging Faceからダウンロードするか、トレーニングチェックポイントから入手できます。
  2. ノートブックでvLLMを起動し、クエリを行ってください。
  3. vLLMコマンドをエントリーポイントとしてモデルを記録し、Unity Catalog にエクスプレス デプロイメントとして登録します。
  4. 同じコマンドを起動するServing Endpointを作成します。
  5. OpenAIクライアント、Databricks SDK、またはSQL ai_queryでエンドポイントをクエリしてください。

以下の例では、モデルの 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のサービングを参照してください。 チュートリアルでは、Qwen3.5-0.8Bを単一のH100で微調整し、トレーニング前後の回答を比較し、ファインチューニングしたモデルを提供します。

サポートされているタスク

モデルのメタデータ内の task は、エンドポイントがどの API を提供するかを設定します。 サーバーはそのタスクのためにOpenAI互換APIを公開しなければなりません。 llm/v1/completionsなどの他のタスクはサポートされていません。 以下の表はサポートされたタスクを示しています。

task モデルの種類 を使用したクエリ
llm/v1/chat チャットモデル、ビジョン言語モデルを含む chat.completions
llm/v1/embeddings モデルの埋め込み embeddings
llm/v1/audio/transcriptions 音声テキスト変換モデル audio.transcriptions
llm/v1/audio/translations 音声から英語への翻訳モデル audio.translations

GPUを選択

Azure Databricksは、デプロイ先と同じGPU上で開発することを推奨しているので、テストする設定はデプロイする設定になります。 以下の表はカスタムLLMサービング用のGPU一覧です。

workload_type GPU 注記
GPU_SMALL T4 x 1 (16 GB) 約5Bパラメータまでのモデル。
GPU_LARGE A100 1台(80 GB) 大型モデル。 一般提供されています。
GPU_LARGE_RTX RTX PRO 6000 1台(96 GB) A100よりもメモリ容量が大きく、速度も速いです。 southeastasiaとwestus2で提供されています。

一般的な問題

ノートブックを交換する際に最もよく起こる問題は以下の通りです:

  • ダウンロードは /Workspace で失敗します。これは数 GB のファイルを受け付けません。 スターターノートブックと同様に、ウェイトをローカルディスクにダウンロードしてください。
  • ローカルサーバーは起動しません。 サーバーレスGPUノートブックはポート3000から3999までしか許可していないので、そのいずれかのポートでテストしてください。 エントリーポイントだけがポート8080を使用しており、それ以外はテストしたコマンドと一致しなければなりません。
  • エンドポイントが重みを見つけられないのです。 エントリーポイントはモデルの成果物フォルダ内で動作するため、--model は、記録した重みフォルダーを指定する必要があります。
  • 埋め込みモデルは埋め込みを提供しません。 --runner pooling で vLLM を開始します。
  • model_environment.tarまたはTimeoutError('Timed out after 0:05:00')のアップロード中にmodel_version.tarで登録が失敗します。 databricks-sdk 0.102.0以上にアップグレードして、再度モデルを登録してください。

エンドポイントの作成

エンドポイントはServing UIから作成するか、スターターノートブックと同様にDatabricks SDKで作成します。 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 エンドポイントは動的に自動スケールしないため、ピークトラフィックに合わせたサイズ workload_size にする必要があります。

ゼロにスケーリングする場合、アイドル状態のエンドポイントでは、すべてのレプリカが停止します。 次のリクエストはvLLMがモデルを再度読み込み、すべてのレプリカが起動するまで1〜数分待ちます。 Azure Databricksは、本番トラフィックのscale-to-zeroをオフにすることを推奨しています。

警告

スケールアップ容量は保証されません。 Azure Databricks がエンドポイント用に新しい GPU を取得する必要がある場合、たとえばエンドポイント作成時、workload_size 増加時、またはエンドポイントがゼロから復帰したときに、クラウド プロバイダーにお客様のリージョンで利用可能な GPU 容量がないと、要求が応答しなくなる可能性があります。 これは、すべての GPU の種類に適用されます。 Databricksは、ウォームプールと事前予約によってこの問題を軽減し、GPU容量を利用可能ですぐに使える状態に保ちます。

エンドポイントに問い合わせを実行する

AI プレイグラウンドに Ready Chat エンドポイントが表示されます。 以下の例は、Databricks SDK、OpenAIクライアント、RESTを使ってエンドポイントをクエリします。

Databricks SDK

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")],
)

OpenAI クライアント

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)

REST: chat

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

REST: 埋め込み

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:のように各入力に接頭辞を期待します。 モデルカードを確認してください。

エンドポイントを監視する

エンドポイントの [ログ] タブにはサーバーの stdout と stderr がライブで表示されます。 logs APIも同じ出力を返します。

Azure DatabricksはvLLMサーバーのメトリクスを転送し、エンドポイントのメトリクスタブにチャート化します:

  • レイテンシ:最初のトークンまでの時間、出力トークンごとの時間、リクエストレイテンシ、キュー時間。
  • ロード: 実行中および待機中の要求
  • KVキャッシュ: 使用状況とヒット率。
  • スループット:プロンプトトークン数および1秒あたりのトークン生成数。

エクスポートメトリクスAPIは同じメトリクスをPrometheus形式で返すので、それらをPrometheusやDatadogにスクレイピングできます。

テレメトリをオンにすると、Azure Databricksはまた、サーバーログやvLLM Prometheusの指標をUnity Catalogのテーブルに保存するため、それらをより長期間にわたってクエリできます。 Unity カタログにデータを提供するカスタム モデルを保持するを参照してください。

Pricing

GPUインスタンス時間ごとに課金され、他のGPUカスタムモデルサービングと同様です。 モデル サービングの価格設定を参照してください。

制限事項とリージョンの可用性

AI Runtime からカスタム LLM を登録するため、サーバーレス GPU コンピュートと同じリージョンでカスタム LLM の提供が可能です。 それらはAWSとAzureの米国リージョンです。 GCPはサポートされていません。

以下の機能が近日公開されます:

  • LoRAアダプター。
  • 地域横断サービス。
  • 例えば、Databricks Runtime や CPU サーバーレスなど、AI Runtime 外でモデルをログに記録すること。

次の機能はまだサポートされていません。

  • KVキャッシュ対応ルーティング。
  • ルート最適化。