カスタム モデルサービング エンドポイントの作成
この記事では、 モデルサービングを使用してDatabricksカスタムモデル を提供するモデルサービングエンドポイントを作成する方法について説明します 。
モデルサービングには、サービングエンドポイントの作成に関する次のオプションがあります。
- サービングUI
- REST API
- MLflow Deployments SDK
生成AI モデルを提供するエンドポイントの作成については、「 エンドポイントを提供する基盤モデルの作成」を参照してください。
必要条件
- ワークスペースは、サポートされているリージョンにある必要があります。
- カスタムライブラリまたはプライベートミラーサーバーのライブラリをモデルで使用する場合は、モデルエンドポイントを作成する前に、 モデルサービングでカスタム Python ライブラリを使用する を参照してください。
- MLflow Deployments SDK を使用してエンドポイントを作成するには、MLflow Deployment クライアントをインストールする必要があります。 インストールするには、次のコマンドを実行します。
import mlflow.deployments
client = mlflow.deployments.get_deploy_client("databricks")
アクセス制御
エンドポイント管理のためのモデルサービングエンドポイントのアクセスコントロールオプションを理解するには、「 モデルサービングエンドポイントのアクセス許可を管理する」を参照してください。
また、次のこともできます。
エンドポイントを作成する
- Serving UI
- REST API
- MLflow Deployments SDK
サービング UI を使用して、モデル・サービングのエンドポイントを作成できます。
-
サイドバーの 「Serving 」をクリックして、Serving UIを表示します。
-
サービングエンドポイントの作成 をクリックします。
ワークスペース モデルレジストリに登録されているモデルまたは Unity Catalog内のモデルの場合:
-
[ 名前 ] フィールドに、エンドポイントの名前を入力します。
-
[Served entities ] セクションで
-
[エンティティ ] フィールドをクリックして、[ 提供済みエンティティの選択 ] フォームを開きます。
-
サービスを提供するモデルのタイプを選択します。フォームは、選択内容に基づいて動的に更新されます。
-
提供するモデルとモデルバージョンを選択します。
-
配信モデルにルーティングするトラフィックの割合を選択します。
-
使用するコンピュートのサイズを選択します。 ワークロードには、CPUまたはGPUコンピュートを使用できます。 使用可能な GPU コンピュートの詳細については、「 GPU ワークロードの種類 」を参照してください。
-
[コンピュート スケールアウト ] で、このサーブ モデルが同時に処理できる要求の数に対応するコンピュート スケールアウトのサイズを選択します。この数値は、QPS x モデルの実行時間とほぼ等しくする必要があります。
- 使用可能なサイズは、0 から 4 の要求の場合は Small 、 要求は Medium 8 から 16、要求は Large です ( 16 から 64 の要求の場合)。
-
使用していないときにエンドポイントを 0 にスケーリングするかどうかを指定します。本番運用エンドポイントでは、ゼロにスケーリングすると容量が保証されないため、ゼロへのスケーリングは推奨されません。
-
「詳細設定」では、次のことができます。
- エンドポイントから AWS リソースに接続するためのインスタンスプロファイルを追加します。
- 環境変数を追加して、エンドポイントから リソースに接続する か、 特徴ルックアップ DataFrame をエンドポイントの推論テーブルに記録します。機能参照 DataFrame をログに記録するには、MLflow 2.14.0 以降が必要です。
-
-
[AI Gateway ] セクションでは、エンドポイントで有効にするガバナンス機能を選択できます。Mosaic AI Gatewayの紹介を参照してください。
-
[ ルートの最適化 ] セクションでは、エンドポイントのルート最適化を有効にできます。「サービスエンドポイントでのルート最適化」を参照してください。
-
作成 をクリックします。[ エンドポイントの提供中 ] ページが表示され、 提供エンドポイントの状態 が [準備ができていません] と表示されます。
REST API を使用してエンドポイントを作成できます。POST /api/2.0/serving-endpoints を参照してください。エンドポイント構成パラメーターの場合。
次の例では、Unity Catalog モデルレジストリに登録されている ads1
モデルの最初のバージョンを提供するエンドポイントを作成します。Unity Catalogからモデルを指定するには、親カタログとスキーマを含む完全なモデル名を指定します (例: catalog.schema.example-model
)。
POST /api/2.0/serving-endpoints
{
"name": "uc-model-endpoint",
"config":
{
"served_entities": [
{
"name": "ads-entity"
"entity_name": "catalog.schema.my-ads-model",
"entity_version": "3",
"workload_size": "Small",
"scale_to_zero_enabled": true
},
{
"entity_name": "catalog.schema.my-ads-model",
"entity_version": "4",
"workload_size": "Small",
"scale_to_zero_enabled": true
}
],
"traffic_config":
{
"routes": [
{
"served_model_name": "my-ads-model-3",
"traffic_percentage": 100
},
{
"served_model_name": "my-ads-model-4",
"traffic_percentage": 20
}
]
}
},
"tags": [
{
"key": "team",
"value": "data science"
}
]
}
応答の例を次に示します。エンドポイントの config_update
状態は NOT_UPDATING
で、提供済みモデルは READY
状態です。
{
"name": "uc-model-endpoint",
"creator": "user@email.com",
"creation_timestamp": 1700089637000,
"last_updated_timestamp": 1700089760000,
"state": {
"ready": "READY",
"config_update": "NOT_UPDATING"
},
"config": {
"served_entities": [
{
"name": "ads-entity",
"entity_name": "catalog.schema.my-ads-model-3",
"entity_version": "3",
"workload_size": "Small",
"scale_to_zero_enabled": true,
"workload_type": "CPU",
"state": {
"deployment": "DEPLOYMENT_READY",
"deployment_state_message": ""
},
"creator": "user@email.com",
"creation_timestamp": 1700089760000
}
],
"traffic_config": {
"routes": [
{
"served_model_name": "catalog.schema.my-ads-model-3",
"traffic_percentage": 100
}
]
},
"config_version": 1
},
"tags": [
{
"key": "team",
"value": "data science"
}
],
"id": "e3bd3e471d6045d6b75f384279e4b6ab",
"permission_level": "CAN_MANAGE",
"route_optimized": false
}
MLflow デプロイ には、作成、更新、削除タスク用の API が用意されています。これらのタスクの APIs は、エンドポイントを提供するための REST API と同じパラメーターを受け入れます。 POST /api/2.0/serving-endpoints を参照してください。エンドポイント構成パラメーターの場合。
次の例では、Unity Catalog モデルレジストリに登録されている my-ads-model
モデルの 3 番目のバージョンを提供するエンドポイントを作成します。親カタログとスキーマを含む完全なモデル名を指定する必要があります (例: catalog.schema.example-model
)。
from mlflow.deployments import get_deploy_client
client = get_deploy_client("databricks")
endpoint = client.create_endpoint(
name="unity-catalog-model-endpoint",
config={
"served_entities": [
{
"name": "ads-entity"
"entity_name": "catalog.schema.my-ads-model",
"entity_version": "3",
"workload_size": "Small",
"scale_to_zero_enabled": true
}
],
"traffic_config": {
"routes": [
{
"served_model_name": "my-ads-model-3",
"traffic_percentage": 100
}
]
}
}
)
また、次のこともできます。
- 複数のモデルを提供するようにエンドポイントを設定します。
- ルート最適化のためにエンドポイントを構成します。
- 推論テーブルを有効にして 、モデルサービングエンドポイントへの受信リクエストと送信レスポンスを自動的にキャプチャします。
- エンドポイントで推論テーブルが有効になっている場合は、 特徴量ルックアップ データフレーム を推論テーブルに記録できます。
GPU ワークロードの種類
GPU デプロイメントは、次のパッケージバージョンと互換性があります。
- PyTorch 1.13.0 - 2.0.1
- TensorFlow 2.5.0 - 2.13.0
- MLflow 2.4.0 以降
GPU を使用してモデルをデプロイするには、エンドポイントの作成時にエンドポイント設定に workload_type
フィールドを含めるか、API を使用してエンドポイント設定の更新として含めます。 Serving UI を使用して GPU ワークロードのエンドポイントを設定するには、 コンピュート タイプ ドロップダウンから目的の GPU タイプを選択します。
{
"served_entities": [{
"entity_name": "catalog.schema.ads1",
"entity_version": "2",
"workload_type": "GPU_MEDIUM",
"workload_size": "Small",
"scale_to_zero_enabled": false,
}]
}
次の表は、サポートされている使用可能な GPU ワークロードの種類をまとめたものです。
GPU ワークロードの種類 | GPU インスタンス | GPUメモリ |
---|---|---|
| 1xT4 | 16ギガバイト |
| 1xA10Gの | 24ギガバイト |
| 4xa10g | 96ギガバイト |
| 8xA10G | 192ギガバイト |
カスタムモデルのエンドポイントを変更する
カスタムモデルエンドポイントを有効にした後、必要に応じてコンピュート設定を更新できます。 この構成は、モデルに追加のリソースが必要な場合に特に役立ちます。 ワークロードのサイズとコンピュートの設定は、モデルを提供するためにどのリソースが割り当てられるかにおいて重要な役割を果たします。
新しい設定の準備が整うまで、古い設定は予測トラフィックを提供し続けます。 更新が進行中の間は、別の更新を行うことはできません。 ただし、進行中の更新は Serving UI からキャンセルできます。
- Serving UI
- REST API
- MLflow Deployments SDK
モデル エンドポイントを有効にした後、[ エンドポイントの編集 ] を選択して、エンドポイントのコンピュート構成を変更します。
次の操作を実行できます。
- いくつかのワークロードサイズから選択すると、オートスケールはワークロードサイズ内で自動的に設定されます。
- 使用していないときにエンドポイントを 0 にスケールダウンするかどうかを指定します。
- サービス済みモデルにルーティングするトラフィックの割合を変更します。
進行中の設定更新をキャンセルするには、エンドポイントの詳細ページの右上にある [更新のキャンセル ] を選択します。この機能は、サービングUIでのみ使用できます。
次に、REST API を使用したエンドポイント設定の更新例を示します。PUT /api/2.0/serving-endpoints/{name}/config を参照してください。
PUT /api/2.0/serving-endpoints/{name}/config
{
"name": "unity-catalog-model-endpoint",
"config":
{
"served_entities": [
{
"entity_name": "catalog.schema.my-ads-model",
"entity_version": "5",
"workload_size": "Small",
"scale_to_zero_enabled": true
}
],
"traffic_config":
{
"routes": [
{
"served_model_name": "my-ads-model-5",
"traffic_percentage": 100
}
]
}
}
}
MLflow Deployments SDK では、REST API と同じパラメーターが使用されます (「PUT /api/2.0/serving-endpoints/{name}/config」を参照)。要求と応答のスキーマの詳細については、を参照してください。
次のコード サンプルでは、 Unity Catalog モデルレジストリのモデルを使用しています。
import mlflow
from mlflow.deployments import get_deploy_client
mlflow.set_registry_uri("databricks-uc")
client = get_deploy_client("databricks")
endpoint = client.create_endpoint(
name=f"{endpointname}",
config={
"served_entities": [
{
"entity_name": f"{catalog}.{schema}.{model_name}",
"entity_version": "1",
"workload_size": "Small",
"scale_to_zero_enabled": True
}
],
"traffic_config": {
"routes": [
{
"served_model_name": f"{model_name}-1",
"traffic_percentage": 100
}
]
}
}
)
モデルエンドポイントのスコアリング
モデルをスコアリングするには、モデルサービング エンドポイントに要求を送信します。
- 「カスタムモデルのクエリ サービング エンドポイント」を参照してください。
- 基盤モデルの使用を参照してください。
追加のリソース
- モデルサービングエンドポイントを管理します。
- Mosaic AI Model Servingの外部モデル。
- Python を使用する場合は、 Databricks のリアルタイム サービング Python SDK を使用できます。
ノートブックの例
次のノートブックには、モデルサービングエンドポイントを使用して起動して実行するために使用できる、さまざまな登録済みモデル Databricks が含まれています。 その他の例については、「 チュートリアル: カスタム モデルのデプロイとクエリ」を参照してください。
モデルの例は、「 ノートブックのインポート」の指示に従ってワークスペースにインポートできます。 いずれかの例からモデルを選択して作成したら、 Unity Catalogで登録するモデルサービングの UI ワークフロー手順に従います。