メインコンテンツまでスキップ

モデルサービングエンドポイントの管理

この記事では、 Serving UI と REST APIを使用してモデルサービングエンドポイントを管理する方法について説明します。 REST API リファレンスの サービングエンドポイント を参照してください。

モデルサービングエンドポイントを作成するには、次のいずれかを使用します。

モデル エンドポイントの状態を取得する

サービング UI では、エンドポイントの詳細ページの上部にある サービスエンドポイントの状態 インジケータからエンドポイントのステータスを確認できます。

REST API または MLflow Deployments SDK を使用して、エンドポイントの状態と詳細をプログラムで確認します。

Bash
GET /api/2.0/serving-endpoints/{name}

次の例では、Unity Catalog モデルレジストリに登録されている my-ads-model モデルの最初のバージョンを提供するエンドポイントを作成します。親カタログとスキーマを含む完全なモデル名を指定する必要があります (例: catalog.schema.example-model)。

次のレスポンスの例では、 state.ready フィールドは「READY」で、エンドポイントがトラフィックを受信する準備ができていることを意味します。state.update_state フィールドはNOT_UPDATINGされ、更新が正常に完了したため、pending_configは返されなくなりました。

JSON
{
"name": "unity-model-endpoint",
"creator": "customer@example.com",
"creation_timestamp": 1666829055000,
"last_updated_timestamp": 1666829055000,
"state": {
"ready": "READY",
"update_state": "NOT_UPDATING"
},
"config": {
"served_entities": [
{
"name": "my-ads-model",
"entity_name": "myCatalog.mySchema.my-ads-model",
"entity_version": "1",
"workload_size": "Small",
"scale_to_zero_enabled": false,
"state": {
"deployment": "DEPLOYMENT_READY",
"deployment_state_message": ""
},
"creator": "customer@example.com",
"creation_timestamp": 1666829055000
}
],
"traffic_config": {
"routes": [
{
"served_model_name": "my-ads-model",
"traffic_percentage": 100
}
]
},
"config_version": 1
},
"id": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
"permission_level": "CAN_MANAGE"
}

モデルサービングエンドポイントの停止

モデルサービングエンドポイントを一時的に停止し、後で開始することができます。 エンドポイントが停止すると、そのエンドポイントにプロビジョニングされたリソースはシャットダウンされ、エンドポイントは再度開始されるまでクエリを提供できなくなります。 停止できるのは、 カスタムモデルを提供し、 ルート最適化されておらず、進行中の更新がないエンドポイントのみです。 停止したエンドポイントは、リソースクォータにカウントされません。 停止したエンドポイントに送信されたクエリは 400 エラーを返します。

エンドポイントは、 サービング UI のエンドポイントの詳細ページから停止できます。

  1. 停止するエンドポイントをクリックします。
  2. 右上隅の [ 停止 ] をクリックします。

または、次のように REST API を使用して、サービスエンドポイントをプログラムで停止することもできます。

Bash
POST /api/2.0/serving-endpoints/{name}/config:stop

停止したモデルサービングエンドポイントを開始する準備ができたら、 サービング UIのエンドポイントの詳細ページから開始できます。

  1. 開始するエンドポイントをクリックします。
  2. 右上隅の 開始 をクリックします。

または、次のように REST API を使用して、停止した配信エンドポイントをプログラムで開始することもできます。

Bash
POST /api/2.0/serving-endpoints/{name}/config:start

モデルサービングエンドポイントの削除

モデルの配信を無効にするには、そのモデルが配信されているエンドポイントを削除します。

エンドポイントは、 Serving UI のエンドポイントの詳細ページから削除できます。

  1. サイドバーの サービング をクリックします。
  2. 削除するエンドポイントをクリックします。
  3. 上部のケバブメニューをクリックして、 削除 を選択します。

または、REST API または MLflow Deployments SDK を使用して、プログラムでサービス エンドポイントを削除することもできます

Bash
DELETE /api/2.0/serving-endpoints/{name}

モデルサービングエンドポイントのデバッグ

エンドポイントの問題をデバッグするには、次のものを取得します。

  • モデルサーバーコンテナのビルドログ
  • モデルサーバーのログ

これらのログには、 エンドポイント UI の [ログ] タブからもアクセスできます。

提供されたモデルの ビルド ログ については、次の要求を使用できます。 詳細については、 モデルサービングのデバッグガイド を参照してください。

Bash

GET /api/2.0/serving-endpoints/{name}/served-models/{served-model-name}/build-logs
{
“config_version”: 1 // optional
}

モデルサービングにおける モデル サーバ ログについては、次の要求を使用できます。

Bash

GET /api/2.0/serving-endpoints/{name}/served-models/{served-model-name}/logs

{
“config_version”: 1 // optional
}

モデルサービングエンドポイントの権限を管理する

権限を変更するには、少なくともサービスエンドポイントに対する CAN MANAGE 権限が必要です。 アクセス許可レベルの詳細については、サービングエンドポイント ACLを参照してください。

配信エンドポイントのアクセス許可の一覧を取得します。

Bash
databricks permissions get servingendpoints <endpoint-id>

ユーザーに jsmith@example.com 、サービスエンドポイントに対する CAN QUERY 権限を付与します。

Bash
databricks permissions update servingendpoints <endpoint-id> --json '{
"access_control_list": [
{
"user_name": "jsmith@example.com",
"permission_level": "CAN_QUERY"
}
]
}'

また、Permissions API を使用して、配信エンドポイントのアクセス許可を変更することもできます。

モデルサービング エンドポイントのサーバレス 予算ポリシー

備考

プレビュー

この機能は パブリック プレビュー 段階であり、 外部モデルを提供するエンドポイントの提供には使用できません。

サーバレス 予算ポリシー を使用すると、組織はサーバレスの使用状況にカスタムタグを適用して、詳細な請求属性を実現できます。 ワークスペースでサーバレス 予算ポリシーを使用してサーバレスの使用状況を属性付けしている場合は、モデルサービング エンドポイントにサーバレス 予算ポリシーを追加できます。 サーバレス 予算ポリシーでの属性の使用を参照してください。

モデルサービングエンドポイントの作成中に、Serving UIの 予算ポリシー メニューからエンドポイントのサーバレス 予算ポリシーを選択できます。 サーバレス 予算ポリシーが割り当てられている場合は、[ 予算ポリシー ] メニューからポリシーを選択しなくても、作成するすべてのエンドポイントにそのサーバレス 予算ポリシーが割り当てられます。

Serving UI を使用してモデルサービング エンドポイントを作成する際に、サーバレス 予算ポリシーを追加します。

既存のエンドポイントに対する MANAGE 権限がある場合は、UI の エンドポイントの詳細 ページから、そのエンドポイントにサーバレス 予算ポリシーを編集および追加できます。

Serving UI を使用して、既存のモデルサービング エンドポイントでサーバレス 予算ポリシーを編集します。

注記

サーバレス 予算ポリシーが割り当てられている場合、既存のエンドポイントはポリシーで自動的にタグ付けされません。 既存のエンドポイントにサーバレス 予算ポリシーをアタッチする場合は、手動で更新する必要があります。

モデルサービング エンドポイント スキーマを取得する

備考

プレビュー

エンドポイント クエリ スキーマの提供のサポートは 、パブリック プレビュー段階です。 この機能は、 モデルサービング地域で使用できます。

サービング エンドポイント クエリ スキーマは、JSON 形式の標準 OpenAPI 仕様を使用したサッピング エンドポイントの正式な記述です。 これには、エンドポイントのパス、エンドポイントのクエリの詳細 (要求と応答の本文の形式など)、各フィールドのデータ型など、エンドポイントに関する情報が含まれています。 この情報は、再現性のシナリオや、エンドポイントに関する情報が必要だが、元のエンドポイントの作成者または所有者ではない場合に便利です。

モデルサービング エンドポイント スキーマを取得するには、提供されるモデルにモデル署名がログに記録され、エンドポイントが READY 状態である必要があります。

次の例は、 REST APIを使用してモデルサービングエンドポイントスキーマをプログラムで取得する方法を示しています。 Feature Servingエンドポイントスキーマについては、Databricks Feature Servingとはを参照してください。

API によって返されるスキーマは、OpenAPI 仕様に準拠した JSON オブジェクトの形式です。

Bash

ACCESS_TOKEN="<endpoint-token>"
ENDPOINT_NAME="<endpoint name>"

curl "https://example.databricks.com/api/2.0/serving-endpoints/$ENDPOINT_NAME/openapi" -H "Authorization: Bearer $ACCESS_TOKEN" -H "Content-Type: application/json"

スキーマ応答の詳細

応答は JSON 形式の OpenAPI 仕様であり、通常は 、 openapiinfoserverspathsなどのフィールドが含まれます。 スキーマ応答は JSON オブジェクトであるため、一般的なプログラミング言語を使用して解析し、サードパーティのツールを使用して仕様からクライアント コードを生成できます。また、Swagger Editor などのサードパーティ ツールを使用して OpenAPI 仕様を視覚化することもできます。

応答の主なフィールドは次のとおりです。

  • info.title フィールドには、サービス エンドポイントの名前が表示されます。
  • servers フィールドには常に1つのオブジェクトが含まれます。通常は、エンドポイントのベースURLである url フィールドです。
  • 応答の paths オブジェクトには、エンドポイントでサポートされるすべてのパスが含まれています。 オブジェクトのキーはパスのURLです。 各 path は複数の入力形式をサポートできます。 これらの入力は oneOf フィールドに記載されています。

エンドポイントスキーマのレスポンスの例を次に示します。

JSON
{
"openapi": "3.1.0",
"info": {
"title": "example-endpoint",
"version": "2"
},
"servers": [{ "url": "https://example.databricks.com/serving-endpoints/example-endpoint" }],
"paths": {
"/served-models/vanilla_simple_model-2/invocations": {
"post": {
"requestBody": {
"content": {
"application/json": {
"schema": {
"oneOf": [
{
"type": "object",
"properties": {
"dataframe_split": {
"type": "object",
"properties": {
"columns": {
"description": "required fields: int_col",
"type": "array",
"items": {
"type": "string",
"enum": ["int_col", "float_col", "string_col"]
}
},
"data": {
"type": "array",
"items": {
"type": "array",
"prefixItems": [
{
"type": "integer",
"format": "int64"
},
{
"type": "number",
"format": "double"
},
{
"type": "string"
}
]
}
}
}
},
"params": {
"type": "object",
"properties": {
"sentiment": {
"type": "number",
"format": "double",
"default": "0.5"
}
}
}
},
"examples": [
{
"columns": ["int_col", "float_col", "string_col"],
"data": [
[3, 10.4, "abc"],
[2, 20.4, "xyz"]
]
}
]
},
{
"type": "object",
"properties": {
"dataframe_records": {
"type": "array",
"items": {
"required": ["int_col", "float_col", "string_col"],
"type": "object",
"properties": {
"int_col": {
"type": "integer",
"format": "int64"
},
"float_col": {
"type": "number",
"format": "double"
},
"string_col": {
"type": "string"
},
"becx_col": {
"type": "object",
"format": "unknown"
}
}
}
},
"params": {
"type": "object",
"properties": {
"sentiment": {
"type": "number",
"format": "double",
"default": "0.5"
}
}
}
}
}
]
}
}
}
},
"responses": {
"200": {
"description": "Successful operation",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"predictions": {
"type": "array",
"items": {
"type": "number",
"format": "double"
}
}
}
}
}
}
}
}
}
}
}
}