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

プレビュー

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

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

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

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

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

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

要件

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

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

プレビュー

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

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

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

  1. カタログエクスプローラで system.ai に移動します。

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

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

  4. Create serving endpoint 」ページが表示されます。 「 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. ワークスペースの Serving UI に移動します。

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

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

  4. [ Up to ] ドロップダウンでは、エンドポイントの 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 (英語) では、正規化された埋め込みは生成されません。