プロビジョニングされたスループットの基盤モデルAPI
プレビュー
この機能は パブリック プレビュー 段階であり、 us-east1
と us-central1
でサポートされています。
この記事では、プロビジョニング スループットAPIs基盤モデル を使用してモデルをデプロイする方法について説明します。Databricks では、本番運用ワークロードのプロビジョニング スループットを推奨し、パフォーマンスが保証された基盤モデルに最適化された推論を提供します。
プロビジョニングされたスループットとは
プロビジョニングされたスループットとは、エンドポイントに同時に送信できるトークン相当のリクエストの数を指します。 プロビジョニングされたスループットサービスエンドポイントは、エンドポイントに送信できるトークン/秒の範囲に基づいて設定された専用エンドポイントです。
詳細については、次のリソースを参照してください。
プロビジョン済み スループット エンドポイントでサポートされているモデル アーキテクチャの一覧については、 プロビジョン済み スループット 基盤モデル APIs を参照してください。
要件
要件を参照してください。微調整された基盤モデルのデプロイについては、「 微調整された基盤モデルのデプロイ」を参照してください。
[推奨]Unity Catalog から基盤モデルをデプロイする
プレビュー
この機能はパブリックプレビュー段階です。
Databricks では、Unity Catalog にプレインストールされている基盤モデルを使用することをお勧めします。 これらのモデルは、スキーマai
(system.ai
) のカタログsystem
の下にあります。
基盤モデルをデプロイするには:
カタログエクスプローラで
system.ai
に移動します。デプロイするモデルの名前をクリックします。
モデル ページで、[ このモデルを提供] ボタンをクリックします。
「 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になったら、次の手順でプロビジョニング スループット サービング エンドポイントを作成します。
ワークスペースの Serving UI に移動します。
[ サービング エンドポイントの作成] を選択します。
[エンティティ] フィールドで、Unity Catalog からモデルを選択します。対象モデルの場合、提供されるエンティティの UI には [プロビジョニングされたスループット ] 画面が表示されます。
[ Up to ] ドロップダウンでは、エンドポイントの 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))