複数のモデルを Model Serving エンドポイント に提供する
この記事では、Databricks Model Servingを利用するサービス エンドポイントに複数のモデルを提供する方法について説明します。
要件
「 Model Serving エンドポイント作成 の要件 」を参照してください。
モデルサービング エンドポイントのアクセス制御オプションとエンドポイント管理のベスト プラクティス ガイダンスを理解するには、 「エンドポイント ACL の提供」を参照してください。
エンドポイントを作成し、初期トラフィック分割 を設定する
モデルサービング エンドポイントは、Databricks Machine Learning API を使用して作成できます。 エンドポイントは、 Model Registryに登録されている登録済みの Python MLflow モデルを提供できます。
次の API 例では、2 つのモデルを持つ 1 つのエンドポイントを作成し、それらのモデル間でエンドポイント トラフィックを分割するように設定します。 サーブド モデル current
はバージョン 1 of model-A
をホストし、エンドポイント トラフィックの 90% を取得し、もう 1 つのサービス モデル challenger
はバージョン 1 of model-B
をホストし、エンドポイント トラフィックの 10% を取得します。
POST /api/2.0/serving-endpoints
{
"name":"multi-model"
"config":{
"served_entities":[
{
"name":"current",
"entity_name":"model-A",
"entity_version":"1",
"workload_size":"Small",
"scale_to_zero_enabled":true
},
{
"name":"challenger",
"entity_name":"model-B",
"entity_version":"1",
"workload_size":"Small",
"scale_to_zero_enabled":true
}
],
"traffic_config":{
"routes":[
{
"served_model_name":"current",
"traffic_percentage":"90"
},
{
"served_model_name":"challenger",
"traffic_percentage":"10"
}
]
}
}
}
配信モデル 間のトラフィック分割の更新
また、配信モデル間のトラフィック分割を更新することもできます。 次の API の例では、エンドポイント トラフィックの 50% を取得するようにサービス モデル current
を設定し、残りのトラフィックの残りの 50% を取得するように他のモデル challenger
を設定します。
この更新は、 Databricks Machine Learning UI の [配信 ] タブから [ 構成の編集 ] ボタンを使用して行うこともできます。
PUT /api/2.0/serving-endpoints/{name}/config
{
"served_entities":[
{
"name":"current",
"entity_name":"model-A",
"entity_version":"1",
"workload_size":"Small",
"scale_to_zero_enabled":true
},
{
"name":"challenger",
"entity_name":"model-B",
"entity_version":"1",
"workload_size":"Small",
"scale_to_zero_enabled":true
}
],
"traffic_config":{
"routes":[
{
"served_model_name":"current",
"traffic_percentage":"50"
},
{
"served_model_name":"challenger",
"traffic_percentage":"50"
}
]
}
}
クエリー エンドポイント の背後にある個々のモデル
シナリオによっては、エンドポイントの背後にある個々のモデルをクエリーしたい場合があります。
これを行うには、以下を使用します。
POST /serving-endpoints/{endpoint-name}/served-models/{served-model-name}/invocations
ここで提供される特定のモデルはクエリーです。 要求の形式は、エンドポイントのクエリと同じです。 個々のサービス モデルを照会している間、トラフィック設定は無視されます。
multi-model
エンドポイントの例のコンテキストでは、すべての要求が /serving-endpoints/multi-model/served-models/challenger/invocations
に送信された場合、すべての要求は challenger
サービスモデルによって処理されます。