プロビジョニング スループット 基盤モデル API
プレビュー
この機能は パブリック プレビュー 段階であり、 us-east1
と us-central1
でサポートされています。
この記事では、基盤モデルAPI プロビジョニング スループットを使用してモデルをデプロイする方法について説明します。Databricks では、本番運用ワークロードのプロビジョニング スループットを推奨し、パフォーマンスが保証された基盤モデルに最適化された推論を提供します。
プロビジョニングされたスループットとは
プロビジョニングされたスループットとは、エンドポイントに同時に送信できるトークン相当のリクエストの数を指します。 プロビジョニングされたスループットサービスエンドポイントは、エンドポイントに送信できるトークン/秒の範囲に基づいて設定された専用エンドポイントです。
詳細については、次のリソースを参照してください。
プロビジョニング スループット エンドポイントでサポートされているモデル アーキテクチャの一覧については、「 プロビジョニング スループット 」を参照してください。
必要条件
要件を参照してください。ファインチューンされた基盤モデルのデプロイについては、「 ファインチューンされた基盤モデルのデプロイ」を参照してください。
[推奨]Unity Catalog から基盤モデルをデプロイする
プレビュー
この機能は パブリック プレビュー段階です。
Databricks では、Unity Catalog にプレインストールされている基盤モデルを使用することをお勧めします。 これらのモデルは、スキーマai
(system.ai
) のカタログsystem
の下にあります。
基盤モデルをデプロイするには:
- カタログエクスプローラで
system.ai
に移動します。 - デプロイするモデルの名前をクリックします。
- モデル ページで、 このモデルをサービング ボタンをクリックします。
- サービングエンドポイントの作成 ページが表示されます。 UI を使用してプロビジョニングされたスループットエンドポイントを作成するを参照してください。
Unity Catalog の system.ai
から Meta Llama モデルをデプロイするには、該当する Instruct バージョンを選択する必要があります。Meta Llama モデルの基本バージョンは、Unity Catalog からのデプロイではサポートされていません。プロビジョニングされたスループットの制限を参照してください。
Databricks Marketplace からの基盤モデルのデプロイ
または、 Databricks Marketplace から Unity Catalog に基盤モデルをインストールすることもできます。
モデルファミリーを検索し、モデルページから アクセスを取得 を選択し、ログイン資格情報を入力して、モデルを Unity Catalog にインストールできます。
モデルを Unity Catalogにインストールしたら、サービング 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になったら、次の手順でプロビジョニング スループット サービング エンドポイントを作成します。
- ワークスペースの サービング UI に移動します。
- サービング エンドポイントの作成 を選択します。
- エンティティ フィールドで、Unity Catalog からモデルを選択します。対象モデルの場合、提供されるエンティティの UI には プロビジョニングされたスループット 画面が表示されます。
- 最大 ドロップダウンでは、エンドポイントの 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アカウントチームに連絡して解決してください。
- 基盤モデル API のオートスケーリングは、CPUモデルサービングよりも遅くなります。 Databricks では、要求のタイムアウトを回避するために、オーバープロビジョニングをお勧めします。
- GTE v1.5 (英語) では、正規化されたエンベディングは生成されません。