Criar um endpoint de modelo de serviço personalizado

Este artigo descreve como criar um endpoint de modelo de serviço que serve modelos personalizados usando o modelo de serviço Databricks.

O servindo modelo oferece as seguintes opções para servir a criação do endpoint:

  • A UI de serviço

  • API REST

  • SDK de implantações do MLflow

Para criar um endpoint que sirva modelos de IA generativa, consulte Criar endpoint de IA generativa servindo modelo.

Requisitos

  • Seu workspace deve estar em uma região compatível.

  • Se você usar bibliotecas customizadas ou bibliotecas de um servidor espelho privado com seu modelo, consulte Usar bibliotecas Python customizadas com Model Serving antes de criar o endpoint de modelo.

  • Para criar um endpoint usando o SDK do MLflow Deployments, o senhor deve instalar o cliente do MLflow Deployment. Para instalá-lo, execute:

import mlflow.deployments

client = mlflow.deployments.get_deploy_client("databricks")

Controle de acesso

Para entender as opções de controle de acesso para o endpoint da servindo modelo para o gerenciamento endpoint, consulte gerenciar permissões em sua servindo modelo endpoint.

Você também pode:

Criar um ponto de extremidade

Você pode criar um endpoint para exibição de modelo com a IU de exibição .

  1. Clique em Envio na barra lateral para exibir a IU de Envio.

  2. Clique em Criar endpoint de veiculação.

    Painel de serviço de modelo na interface do usuário do Databricks

Para modelos cadastrados no workspace registro de modelo ou modelos no Unity Catalog:

  1. No campo Nome , forneça um nome para o seu endpoint.

  2. Na seção Entidades atendidas

    1. Clique no campo Entidade para abrir o formulário Selecionar entidade atendida .

    2. Selecione o tipo de modelo que você deseja servir. O formulário é atualizado dinamicamente com base na sua seleção.

    3. Selecione qual modelo e versão do modelo você deseja atender.

    4. Selecione a porcentagem de tráfego a ser encaminhada para seu modelo atendido.

    5. Selecione o tamanho do site compute a ser usado. O senhor pode usar a computação de CPU ou GPU para suas cargas de trabalho. Consulte Tipos de carga de trabalho de GPU para obter mais informações sobre a computação de GPU disponível.

    6. Em escalonamentocompute , selecione o tamanho do escalonamento compute que corresponde ao número de solicitações que esse modelo atendido pode processar ao mesmo tempo. Este número deve ser aproximadamente igual ao tempo de execução do modelo QPS x.

      1. Os tamanhos disponíveis são Pequeno para 0 a 4 solicitações, Médio 8 a 16 solicitações e Grande para 16 a 64 solicitações.

    7. Especifique se o endpoint deve escalar para zero quando não estiver em uso.

    8. Em Advanced configuration, o senhor pode adicionar um instance profile para se conectar ao AWS recurso do seu endpoint.

  3. Clique em Criar. A página Servindo endpoints aparece com o estado do endpoint de veiculação mostrado como Não pronto.

    Criar um endpoint de veiculação de modelo

Você pode criar endpoint usando a API REST. Consulte POSTendpoint para parâmetros de configuração endpoint .

O exemplo a seguir cria um endpoint que atende à primeira versão do modelo ads1 registrado no registro de modelo. Para especificar um modelo do Unity Catalog, forneça o nome completo do modelo, incluindo o catálogo pai e o esquema, como catalog.schema.example-model.

POST /api/2.0/serving-endpoints

{
  "name": "workspace-model-endpoint",
  "config":
  {
    "served_entities": [
      {
        "name": "ads-entity"
        "entity_name": "my-ads-model",
        "entity_version": "3",
        "workload_size": "Small",
        "scale_to_zero_enabled": true
      },
      {
        "entity_name": "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"
    }
  ]
}

A seguir está um exemplo de resposta. O estado config_update do endpoint é NOT_UPDATING e o modelo servido está em um estado READY .

{
  "name": "workspace-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": "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": "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
}

O MLflow Deployments fornece uma API para criar, atualizar e excluir tarefas. As APIs para essas tarefas aceitam os mesmos parâmetros que a API REST para servir o endpoint. Consulte POST /api/2.0/serving-endpoint para os parâmetros de configuração do endpoint.


from mlflow.deployments import get_deploy_client

client = get_deploy_client("databricks")
endpoint = client.create_endpoint(
    name="workspace-model-endpoint",
    config={
        "served_entities": [
            {
                "name": "ads-entity"
                "entity_name": "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
                }
            ]
        }
    }
)

Você também pode:

Tipos de carga de trabalho de GPU

A implantação de GPU é compatível com as seguintes versões de pacote:

  • PyTorch 1.13.0 - 2.0.1

  • TensorFlow 2.5.0 - 2.13.0

  • MLflow 2.4.0 e acima

Para implantar seus modelos usando GPUs, inclua o campo workload_type na configuração do endpoint durante a criação do endpoint ou como uma atualização da configuração do endpoint usando a API. Para configurar seu endpoint para cargas de trabalho de GPU com a UI de serviço, selecione o tipo de GPU desejado em compute Type dropdown.

{
  "served_entities": [{
    "name": "ads1",
    "entity_version": "2",
    "workload_type": "GPU_MEDIUM",
    "workload_size": "Small",
    "scale_to_zero_enabled": false,
  }]
}

A tabela a seguir resume os tipos de carga de trabalho de GPU disponíveis com suporte.

Tipo de carga de trabalho da GPU

Instância de GPU

Memória GPU

GPU_SMALL

1xT4

16 GB

GPU_MEDIUM

1xA10G

24 GB

MULTIGPU_MEDIUM

4xA10G

96 GB

GPU_MEDIUM_8

8xA10G

192 GB

GPU_LARGE_8

8xA100-80GB

320 GB

Modificar um endpoint de modelo personalizado

Depois de ativar um endpoint de modelo personalizado, o senhor pode atualizar a configuração do compute conforme desejar. Essa configuração é particularmente útil se o senhor precisar de recurso adicional para o seu modelo. O tamanho da carga de trabalho e a compute configuração key do site desempenham um papel importante em quais recursos são alocados para atender ao seu modelo.

Até que a nova configuração esteja pronta, a configuração antiga continua atendendo ao tráfego de previsão. Enquanto houver uma atualização em andamento, outra atualização não poderá ser feita. No entanto, o senhor pode cancelar uma atualização em andamento na interface de usuário do Serving.

Depois de ativar um endpoint modelo, selecione Editar endpoint para modificar a configuração compute do seu endpoint.

Você pode fazer o seguinte:

  • Escolha entre alguns tamanhos de carga de trabalho e autoscale é configurado automaticamente dentro do tamanho da carga de trabalho.

  • Especifique se o endpoint deve ser reduzido a zero quando não estiver em uso.

  • Modifique a porcentagem de tráfego para rotear para seu modelo servido.

O senhor pode cancelar uma atualização de configuração em andamento selecionando Cancel update (Cancelar atualização ) no canto superior direito da página de detalhes do endpoint. Essa funcionalidade só está disponível na UI de serviço.

A seguir, um exemplo de atualização de configuração de endpoint usando a API REST. Consulte PUT /api/2.0/serving-endpoint/{{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
        }
      ]
    }
  }
}

O SDK do MLflow Deployments usa os mesmos parâmetros da API REST, consulte PUT /api/2.0/serving-endpoint/{name}/config para obter detalhes do esquema de solicitação e resposta.

O exemplo de código a seguir usa um modelo do site Unity Catalog registro de modelo:

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

Pontuação de um endpoint de modelo

Para pontuar seu modelo, envie solicitações para o endpoint servindo modelo.

exemplos Notebook

O Notebook a seguir inclui diferentes modelos registrados do Databricks que você pode usar para começar a funcionar com o modelo de instalação endpoint.

Os exemplos de modelos podem ser importados para o site workspace seguindo as instruções em Import a Notebook. Depois de escolher e criar um modelo a partir de um dos exemplos, registre-o em Unity Catalog e, em seguida, siga o fluxo de trabalho UI os passos para servir o modelo.

ensinar e registrar um modelo Scikit-Learn para modelo servindo Notebook

Abra o bloco de anotações em outra guia

ensinar e registrar um modelo HuggingFace para modelo servindo Notebook

Abra o bloco de anotações em outra guia