プロビジョニングされたスループットの基盤モデルAPI

プレビュー

この機能は パブリック プレビュー 段階であり、 us-east1us-central1でサポートされています。

この記事では、プロビジョニング スループットAPIs基盤モデル を使用してモデルをデプロイする方法について説明します。Databricks では、本番運用ワークロードのプロビジョニング スループットを推奨し、パフォーマンスが保証された基盤モデルに最適化された推論を提供します。

プロビジョニングされたスループットとは

プロビジョニングされたスループットとは、エンドポイントに同時に送信できるトークン相当のリクエストの数を指します。 プロビジョニングされたスループットサービスエンドポイントは、エンドポイントに送信できるトークン/秒の範囲に基づいて設定された専用エンドポイントです。

詳細については、次のリソースを参照してください。

プロビジョン済み スループット エンドポイントでサポートされているモデル アーキテクチャの一覧については、 プロビジョン済み スループット 基盤モデル APIs を参照してください。

要件

要件を参照してください。微調整された基盤モデルをデプロイするには、 「微調整された基盤モデルをデプロイする」を参照してください。

[推奨] Unity Catalogから基盤モデルをデプロイする

プレビュー

この機能は パブリックプレビュー版です。

Databricks では、Unity Catalog にプリインストールされている基盤モデルを使用することをお勧めします。 これらのモデルは、スキーマai (system.ai) のカタログsystemの下にあります。

基盤モデルをデプロイするには:

  1. 「カタログエクスプローラ」(Catalog Explorer) で「 system.ai 」() に移動します。

  2. デプロイするモデルの名前をクリックします。

  3. モデル ページで、[ このモデルを提供 ] ボタンをクリックします。

  4. [ サービス エンドポイントの作成 ] ページが表示されます。 「UI を使用してプロビジョニングされたスループット エンドポイントを作成する」を参照してください。

Databricks Marketplaceから基盤モデルをデプロイする

あるいは、 Databricks Marketplaceから Unity Catalog に基盤モデルをインストールすることもできます。

モデル ファミリを検索し、モデル ページから[アクセスを取得]を選択してログイン資格情報を入力し、モデルを Unity Catalog にインストールできます。

モデルをUnity Catalogにインストールしたら、Serving UI を使用してモデルサービングエンドポイントを作成できます。

きめ細かく調整された基盤モデルをデプロイする

system.aiスキーマ内のモデルを使用できない場合、または Databricks Marketplace からモデルをインストールできない場合は、Unity Catalog にログ記録することで、微調整された基盤モデルをデプロイできます。 このセクションと次のセクションでは、コードを設定して MLflow モデルを Unity Catalog に記録し、UI または REST API を使用してプロビジョニングされたスループット エンドポイントを作成する方法を示します。

要件

  • 微調整された基盤モデルのデプロイは、MLflow 2.11 以降でのみサポートされます。 Databricks Runtime 15.0 ML 以降では、互換性のある MLflow バージョンがプリインストールされます。

  • Databricks では、大規模なモデルのアップロードとダウンロードを高速化するために、Unity Catalog のモデルを使用することを推奨しています。

カタログ、スキーマ、モデル名の定義

微調整された基盤モデルをデプロイするには、ターゲットの Unity Catalog カタログ、スキーマ、および選択したモデル名を定義します。

mlflow.set_registry_uri('databricks-uc')
CATALOG = "catalog"
SCHEMA = "schema"
MODEL_NAME = "model_name"
registered_model_name = f"{CATALOG}.{SCHEMA}.{MODEL_NAME}"

モデルのログ記録

モデル エンドポイントのプロビジョニングされたスループットを有効にするには、MLflow transformers フレーバーを使用してモデルをログに記録し、 task 引数を "llm/v1/embeddings"で指定する必要があります。

この引数は、モデルサービング エンドポイントに使用される API シグネチャを指定します。 llm/v1/embeddings タスクとそれに対応する入力スキーマと出力スキーマの詳細については、MLflow のドキュメントを参照してください。

以下は、プロビジョニングされたスループットで提供できるように、モデル Alibaba-NLP/gte-large-en-v1.5 をログに記録する方法の例です。

model = AutoModel.from_pretrained("Alibaba-NLP/gte-large-en-v1.5")
tokenizer = AutoTokenizer.from_pretrained("Alibaba-NLP/gte-large-en-v1.5")
with mlflow.start_run():
    components = {
      "model": model,
      "tokenizer": tokenizer,
    }
    mlflow.transformers.log_model(
        transformers_model=components,
        artifact_path="model",
        task="llm/v1/embeddings",
        registered_model_name=registered_model_name,
        # model_type is required for logging a fine-tuned BGE models.
        metadata={
            "model_type": "gte-large"
        }
    )

モデルが Unity Catalogにログインしたら、「 UI を使用してプロビジョン済み スループット エンドポイントを作成する 」に進み、プロビジョン済み スループットを使用してモデルサービング エンドポイントを作成します。

UI を使用してプロビジョニングされたスループット エンドポイントを作成する

記録済みモデルがUnity Catalogに追加されたら、次のステップを使用してプロビジョニングされたスループットを提供するエンドポイントを作成します。

  1. ワークスペースのサービス提供 UIに移動します。

  2. [ サービス エンドポイントの作成] を選択します。

  3. [エンティティ] フィールドで、Unity Catalog からモデルを選択します。対象モデルの場合、提供されるエンティティの UI には [プロビジョニングされたスループット ] 画面が表示されます。

  4. [最大まで]ドロップダウンで、エンドポイントの 1 秒あたりの最大トークン スループットを構成できます。

    1. プロビジョニングされたスループット エンドポイントは自動的にスケールされるため、 [変更]を選択して、エンドポイントがスケールダウンできる 1 秒あたりの最小トークンを表示できます。

プロビジョニング済みスループット

REST API を使用してプロビジョニングされたスループット エンドポイントを作成する

REST API を使用してプロビジョニングされたスループット モードでモデルをデプロイするには、リクエストで min_provisioned_throughput フィールドと max_provisioned_throughput フィールドを指定する必要があります。 Python を使用する場合は、 MLflow デプロイ SDK を使用してエンドポイントを作成することもできます

モデルに適したプロビジョニングされたスループットの範囲を特定するには、 「プロビジョニングされたスループットを段階的に取得する」を参照してください。

import requests
import json

# Set the name of the MLflow endpoint
endpoint_name = "prov-throughput-endpoint"

# Name of the registered MLflow model
model_name = "ml.llm-catalog.foundation-model"

# Get the latest version of the MLflow model
model_version = 3

# Get the API endpoint and token for the current notebook context
API_ROOT = "<YOUR-API-URL>"
API_TOKEN = "<YOUR-API-TOKEN>"

headers = {"Context-Type": "text/json", "Authorization": f"Bearer {API_TOKEN}"}

optimizable_info = requests.get(
  url=f"{API_ROOT}/api/2.0/serving-endpoints/get-model-optimization-info/{model_name}/{model_version}",
  headers=headers)
  .json()

if 'optimizable' not in optimizable_info or not optimizable_info['optimizable']:
  raise ValueError("Model is not eligible for provisioned throughput")

chunk_size = optimizable_info['throughput_chunk_size']

# Minimum desired provisioned throughput
min_provisioned_throughput = 2 * chunk_size

# Maximum desired provisioned throughput
max_provisioned_throughput = 3 * chunk_size

# Send the POST request to create the serving endpoint
data = {
  "name": endpoint_name,
  "config": {
    "served_entities": [
      {
        "entity_name": model_name,
        "entity_version": model_version,
        "min_provisioned_throughput": min_provisioned_throughput,
        "max_provisioned_throughput": max_provisioned_throughput,
      }
    ]
  },
}

response = requests.post(
  url=f"{API_ROOT}/api/2.0/serving-endpoints", json=data, headers=headers
)

print(json.dumps(response.json(), indent=4))

プロビジョニングされたスループットを段階的に取得します

プロビジョニングされたスループットは、1 秒あたりのトークンの増分で利用できますが、具体的な増分はモデルによって異なります。 ニーズに適した範囲を特定するために、Databricks ではプラットフォーム内でモデル最適化情報 API を使用することをお勧めします。

GET api/2.0/serving-endpoints/get-model-optimization-info/{registered_model_name}/{version}

以下は API からの応答の例です。

ノートブックの例

次のノートブックは、プロビジョニングされたスループットの基盤モデル API を作成する方法の例を示しています。

GTE モデル ノートブックのプロビジョニングされたスループット

ノートブックを新しいタブで開く

BGE モデル ノートブックのプロビジョニングされたスループット サービス

ノートブックを新しいタブで開く

制限事項

  • GPU容量の問題が原因でモデルのデプロイメントが失敗し、エンドポイントの作成または更新中にタイムアウトが発生することがあります。 解決するには、Databricks アカウント チームにお問い合わせください。

  • 基盤モデル APIs の自動スケーリングは、CPU モデルサービングよりも低速です。 Databricks では、要求のタイムアウトを回避するためにオーバープロビジョニングを推奨しています。

  • GTE v1.5 (英語) および BGE v1.5 (英語) モデルのアーキテクチャのみがサポートされています。

  • GTE v1.5 (英語) では、正規化された埋め込みは生成されません。