次の方法で共有


Model Serving エンドポイントに複数のモデルを提供する

この記事では、Azure Databricks Model Serving が利用されている CPU 提供エンドポイントに、複数のモデルを提供する方法について説明します。

外部モデルによって提供されるモデルなど、複数の生成 AI モデルの提供については、エンドポイントに対する複数の外部モデルの提供に関するページをご覧ください。

要件

モデル提供エンドポイントの作成の要件を参照してください。

モデル提供エンドポイントのアクセス制御オプション、およびエンドポイント管理のベスト プラクティスのガイダンスについて理解するには、「エンドポイント ACL の提供」を参照してください。

エンドポイントを作成し、初期トラフィック分割を設定する

モデル提供エンドポイントは、Databricks Machine Learning 提供 API または Databricks Machine Learning UI を使用して作成できます。 エンドポイントで提供するモデルは、モデル レジストリに登録されている登録済みの Python MLflow モデルであれば何でもかまいません。

次の API の例では、2 つのモデルを持つ単一のエンドポイントを作成し、それらのモデル間にエンドポイント トラフィック分割を設定します。 提供されたモデル currentmodel-A バージョン 1 をホストし、エンドポイント トラフィックの 90% を取得します。一方、提供されたもう 1 つモデル challengermodel-B バージョン 1 をホストし、エンドポイント トラフィックの 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 の例では、 提供されたモデル current を、エンドポイント トラフィックの 50% を取得するように設定し、もう一方のモデル challenger を、残りの 50% のトラフィックを取得するように設定します。

[構成の編集] ボタンを使用して、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 によって、すべての要求が提供されます。