Udostępnij za pośrednictwem


Udostępnianie wielu modeli punktowi końcowemu obsługującemu model

W tym artykule opisano sposób udostępniania wielu modeli punktowi końcowemu obsługującemu procesor CPU, który korzysta z usługi Azure Databricks Model Serving.

Aby obsługiwać wiele modeli generacyjnych sztucznej inteligencji, takich jak te udostępniane przez modele zewnętrzne, zobacz Obsługa wielu modeli zewnętrznych do punktu końcowego.

Wymagania

Zobacz Wymagania dotyczące tworzenia punktu końcowego obsługującego model.

Aby poznać opcje kontroli dostępu dla punktów końcowych obsługujących model i wskazówki dotyczące najlepszych rozwiązań dotyczących zarządzania punktami końcowymi, zobacz Obsługa list ACL punktów końcowych.

Tworzenie punktu końcowego i ustawianie początkowego podziału ruchu

Możesz utworzyć model obsługujący punkty końcowe za pomocą interfejsu API obsługującego usługę Machine Learning usługi Databricks lub interfejsu użytkownika usługi Machine Learning usługi Databricks. Punkt końcowy może obsługiwać dowolny zarejestrowany model języka Python MLflow zarejestrowany w rejestrze modeli.

Poniższy przykład interfejsu API tworzy pojedynczy punkt końcowy z dwoma modelami i ustawia podział ruchu punktu końcowego między tymi modelami. Obsługiwany model, current, hostuje wersję 1 i model-A pobiera 90% ruchu punktu końcowego, podczas gdy drugi obsługiwany model, challengerhostuje wersję 1 i model-B pobiera 10% ruchu punktu końcowego.

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"
            }
         ]
      }
   }
}

Aktualizowanie podziału ruchu między obsługiwanymi modelami

Można również zaktualizować podział ruchu między obsługiwanymi modelami. Poniższy przykład interfejsu API ustawia obsługiwany model, current, aby uzyskać 50% ruchu punktu końcowego i inny model, challenger, aby uzyskać pozostałe 50% ruchu.

Tę aktualizację można również wprowadzić na karcie Obsługa w interfejsie użytkownika usługi Machine Learning usługi Databricks przy użyciu przycisku Edytuj konfigurację.

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"
         }
      ]
   }
}

Wykonywanie zapytań dotyczących poszczególnych modeli za punktem końcowym

W niektórych scenariuszach możesz chcieć wykonywać zapytania dotyczące poszczególnych modeli za punktem końcowym.

Możesz to zrobić przy użyciu:

POST /serving-endpoints/{endpoint-name}/served-models/{served-model-name}/invocations

W tym miejscu zostanie zapytany określony obsługiwany model. Format żądania jest taki sam jak wykonywanie zapytań względem punktu końcowego. Podczas wykonywania zapytań względem pojedynczego obsługiwanego modelu ustawienia ruchu są ignorowane.

W kontekście przykładu punktu końcowego multi-model , jeśli wszystkie żądania są wysyłane do /serving-endpoints/multi-model/served-models/challenger/invocationsusługi , wszystkie żądania są obsługiwane przez challenger model obsługiwany.