プロビジョニング スループット 基盤モデル API
この記事では、基盤モデル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を使用してプロビジョニング スループット エンドポイントを作成するようにコードを設定する方法について説明します。
サポートされている Meta Llama 3.1、3.2、3.3 のファインチューンモデルとそのリージョンの可用性については、プロビジョニングされたスループットの制限 を参照してください。
必要条件
- ファインチューンされた基盤モデルのデプロイは、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/completions"
"llm/v1/chat"
"llm/v1/embeddings"
これらの引数は、モデルサービング エンドポイントに使用される API シグネチャを指定します。 これらのタスクと対応する入出力スキーマの詳細については 、MLflow のドキュメント を参照してください。
MLflow を使用してログに記録されたテキスト入力候補言語モデルをログに記録する方法の例を次に示します。
model = AutoModelForCausalLM.from_pretrained("mosaicml/mixtral-8x7b-instruct", torch_dtype=torch.bfloat16)
tokenizer = AutoTokenizer.from_pretrained("mosaicml/mixtral-8x7b-instruct")
with mlflow.start_run():
components = {
"model": model,
"tokenizer": tokenizer,
}
mlflow.transformers.log_model(
transformers_model=components,
artifact_path="model",
# Specify the llm/v1/xxx task that is compatible with the model being logged
task="llm/v1/completions",
# Specify an input example that conforms to the input schema for the task.
input_example={"prompt": np.array(["Below is an instruction that describes a task. Write a response that appropriately completes the request.\n\n### Instruction:\nWhat is Apache Spark?\n\n### Response:\n"])},
# By passing the model name, MLflow automatically registers the Transformers model to Unity Catalog with the given catalog/schema/model_name.
registered_model_name=registered_model_name
# Optionally, you can set save_pretrained to False to avoid unnecessary copy of model weight and gain more efficiency.
save_pretrained=False
)
2.12 より前の MLflow を使用している場合は、代わりに同じ mlflow.transformer.log_model()
関数の metadata
パラメーター内でタスクを指定する必要があります。
metadata = {"task": "llm/v1/completions"}
metadata = {"task": "llm/v1/chat"}
metadata = {"task": "llm/v1/embeddings"}
プロビジョニングされたスループットは、基本 GTE 組み込みモデルと大規模な GTE 埋め込みモデルの両方もサポートします。 以下は、プロビジョニングされたスループットで提供できるように、モデル 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))
チャット完了タスクのログ確率
チャット完了タスクの場合、 logprobs
パラメーターを使用して、大規模言語モデル生成プロセスの一部としてトークンがサンプリングされるログ確率を提供できます。 logprobs
は、分類、モデルの不確実性の評価、評価メトリクスの実行など、さまざまなシナリオに使用できます。パラメーターの詳細については、「 チャット タスク 」を参照してください。
プロビジョニングされたスループットを段階的に取得
プロビジョニングされたスループットは、1 秒あたりのトークンの増分で使用でき、特定の増分はモデルによって異なります。 ニーズに適した範囲を特定するために、Databricks では、プラットフォーム内でモデル最適化情報 API を使用することをお勧めします。
GET api/2.0/serving-endpoints/get-model-optimization-info/{registered_model_name}/{version}
API からの応答の例を次に示します。
{
"optimizable": true,
"model_type": "llama",
"throughput_chunk_size": 980
}
{
"optimizable": true,
"model_type": "gte",
"throughput_chunk_size": 980
}
ノートブックの例
次のノートブックは、プロビジョニング スループット 基盤モデル APIを作成する方法の例を示しています。
GTE モデル ノートブックのプロビジョニングされたスループット
BGE モデルノートブック用のプロビジョニング済みスループット
次のノートブックは、DeepSeek R1 蒸留 Llama モデルを Unity Catalogでダウンロードして登録する方法を示しています。そのため、プロビジョニング スループット エンドポイント API 基盤モデルを使用してデプロイできます。
DeepSeek R1 蒸留 Llama モデル のプロビジョニング済みスループットサービングノートブック
制限
- GPU 容量の問題により、モデルのデプロイが失敗する場合があり、その結果、エンドポイントの作成または更新中にタイムアウトが発生します。 Databricksアカウントチームに連絡して解決してください。
- 基盤モデル API のオートスケーリングは、CPUモデルサービングよりも遅くなります。 Databricks では、要求のタイムアウトを回避するために、オーバープロビジョニングをお勧めします。
- GTE v1.5 (英語) では、正規化されたエンベディングは生成されません。