このページでは、 Foundation Model API を用いたオンデマンドプロビジョニングスループットを用いてモデルをデプロイする方法を示します。
オンデマンドプロビジョニングスループットとは何ですか?
Azure Databricks でエンドポイントを提供するプロビジョニング済みスループット モデルを作成する場合は、提供する基盤モデルに一貫したスループットを確保するために、専用の推論容量を割り当てます。 基盤モデルにサービスを提供するモデル サービス エンドポイントは、 モデル ユニットのチャンクでプロビジョニングできます。 割り当てるモデル ユニットの数により、運用 AI アプリケーションを確実にサポートするために必要なスループットを正確に購入できます。
オンデマンドプロビジョニングスループットには期限コミットメントはありません。 割り当てた容量に対して料金を支払い、いつでも変更または削除が可能です。
プロビジョニングされたスループット エンドポイントでサポートされているモデル アーキテクチャの一覧については、「 モデル サービスでサポートされる基盤モデル」を参照してください。
専用の容量が不要な場合、Databricks では、Foundation Model API に対して優先順位の従量課金制トークンが推奨されます。
必要条件
要件を参照してください。
[推奨]Unity カタログから基盤モデルをデプロイする
Databricks では、Unity カタログにプレインストールされている基本モデルを使用することをお勧めします。 これらのモデルは、スキーマ system (ai) のカタログ system.ai にあります。
注
組織で 基盤モデル Unity カタログのアクセス許可 を使用してモデルのアクセスを制限する場合は、許可されていないモデルのプロビジョニング済みスループット エンドポイントを手動で削除する必要があります。
基盤モデルをデプロイするには:
- カタログ エクスプローラーで
system.aiに移動します。 - デプロイするモデルの名前をクリックします。
- [モデル] ページで、[このモデルを提供する] ボタンをクリックします。
- [サービング エンドポイントの作成] ページが表示されます。 「UIを使用してプロビジョニングされたスループット エンドポイントを作成する」を参照してください。
注
Unity カタログの system.ai から Meta Llama モデルをデプロイするには、該当する Instruct バージョンを選択する必要があります。 Meta Llama モデルの基本バージョンは、Unity カタログの system.ai からのデプロイではサポートされていません。
Databricks でホストされている基盤モデルがサポートする Meta Llama モデル バリアントを参照してください。
UI を使用してプロビジョニング済みスループット エンドポイントを作成する
ログに記録されたモデルが Unity カタログに入ったら、次の手順でプロビジョニング済みスループット サービス エンドポイントを作成します。
- ワークスペースの サービス UI に移動します。
- [サービング エンドポイントの作成] を選択します。
- [エンティティ] フィールドで、Unity カタログからモデルを選択します。 対象モデルの場合、提供されるエンティティの UI には [プロビジョニング スループット] 画面が表示されます。
- [最大] ドロップダウンで、エンドポイントの 1 秒あたりの最大トークン スループットを構成できます。
- プロビジョニングされたスループット エンドポイントは自動的にスケーリングされるため、[ の変更] を選択して、エンドポイントがスケールダウンできる 1 秒あたりの最小トークン数を表示できます。
プロビジョニング済みスループット
プロビジョニング スループットの
REST API を使用してプロビジョニング済みスループット エンドポイントを作成する
REST APIによるプロビジョニング済みスループットエンドポイントの作成リクエストは、基礎モデルがスループットバンドで容量を測定するかモデル単位で測定するかによって異なります。 どの指標がモデルに適用されるかを判別するには、 プロビジョニング済みスループットのモデル単位を参照してください。
Python を使用する場合は、MLflow Deployment SDK を使用して、エンドポイントを作成することもできます。
以下の例は 、スループットバンドを使用する基礎モデルのエンドポイントを作成します。 これらのモデルについては、リクエスト時に min_provisioned_throughput と max_provisioned_throughput のフィールドを指定する必要があります。 モデルに適したプロビジョニング済みスループットの範囲を特定するには、「プロビジョニング済みスループットを増分で取得する」を参照してください。
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 = {"Content-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))
以下の例は、 モデル単位を用いた基礎モデルのエンドポイントを作成します。 これらのモデルでは、リクエストで provisioned_model_units フィールドを指定し、POSTリクエストを /api/2.0/serving-endpoints/pt エンドポイントに送信します。
import requests
import json
# Set the name of the provisioned throughput endpoint
endpoint_name = "prov-throughput-endpoint"
# Name of the foundation model
model_name = "system.ai.gpt-oss-120b"
# Get the latest version of the foundation model
model_version = 1
# Get the API endpoint and token for the current notebook context
API_ROOT = "<YOUR-API-URL>"
API_TOKEN = "<YOUR-API-TOKEN>"
headers = {"Content-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['model_unit_chunk_size']
# Desired provisioned throughput
desired_model_units = 2 * 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,
"provisioned_model_units": desired_model_units,
}
]
},
}
response = requests.post(
url=f"{API_ROOT}/api/2.0/serving-endpoints/pt", json=data, headers=headers
)
print(json.dumps(response.json(), indent=4))
チャット完了タスクのログ確率
チャット完了タスクの場合は、logprobs パラメーターを使用して、大規模な言語モデル生成プロセスの一部としてサンプリングされるトークンのログ確率を指定できます。
logprobs は、分類、モデルの不確実性の評価、評価メトリックの実行など、さまざまなシナリオに使用できます。 パラメーターの詳細については、「 Chat Completions API 」を参照してください。
プロビジョニング スループットを増分で取得する
プロビジョニングされたスループットは、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": 1580
}
制限事項
- GPU 容量の問題が原因でモデルのデプロイが失敗し、エンドポイントの作成または更新中にタイムアウトが発生する可能性があります。 解決するには、Databricks アカウント チームにお問い合わせください。