Servir vários modelos para um ponto de extremidade Model Serving

Este artigo descreve como servir vários modelos para um endpoint de serviço que utiliza Databricks Model Serving.

Requisitos

Consulte Requisitos para criação de terminal Model Serving .

Para entender as opções de controle de acesso para o endpoint do modelo Servindo e as orientações de práticas recomendadas para o gerenciamento do endpoint, consulte Servindo ACLs do endpoint .

Crie um endpoint e defina a divisão de tráfego inicial

Você pode criar endpoint de modelo interativo com a API Databricks Machine Learning. Um endpoint pode servir qualquer modelo Python MLflow registrado no Model Registry.

O exemplo de API a seguir cria um único endpoint com dois modelos e define a divisão do tráfego do endpoint entre esses modelos. O modelo servido, current, hospeda a versão 1 de model-A e obtém 90% do tráfego do endpoint, enquanto o outro modelo servido, challenger, hospeda a versão 1 de model-B e obtém 10% do tráfego do endpoint.

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

Atualize a divisão de tráfego entre os modelos servidos

Você também pode atualizar a divisão de tráfego entre os modelos atendidos. O exemplo de API a seguir define o modelo fornecido, current, para obter 50% do tráfego endpoint e o outro modelo, challenger, para obter os 50% restantes do tráfego.

Você também pode fazer essa atualização na guia Servindo na IU do Databricks Machine Learning usando o botão Editar configuração .

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

Consultar modelos individuais por trás de um endpoint

Em alguns cenários, você pode querer query modelos individuais por trás do endpoint.

Você pode fazer isso usando:

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

Aqui o modelo servido específico é query. O formato da solicitação é o mesmo que consultar o endpoint. Ao consultar o modelo servido individual, as configurações de tráfego são ignoradas.

No contexto do exemplo endpoint multi-model, se todas as solicitações forem enviadas para /serving-endpoints/multi-model/served-models/challenger/invocations, todas as solicitações serão atendidas pelo modelo atendido challenger.

Notebook: Empacote vários modelos em um modelo

Para economizar nos custos compute , você também pode agrupar vários modelos em um modelo.

Empacote vários modelos MLflow em um Notebookmodelo MLflow

Abra o bloco de anotações em outra guia