gerenciamento de controle do modelo endpoint

Visualização

O Mosaic AI Model Serving está em Public Preview e é compatível com os sites us-east1 e us-central1.

Este artigo descreve como gerenciar o endpoint de modelo de serviço usando a UI de serviço e REST API. Consulte Serving endpoint na referência REST API .

Para criar um endpoint de modelo de serviço, use um dos seguintes procedimentos:

Obtenha o status do endpoint do modelo

Na IU de exibição , você pode verificar o status de um endpoint no indicador de estado do endpoint de exibição na parte superior da página de detalhes do seu endpoint.

Verifique o status e os detalhes de um endpoint programaticamente usando a API REST ou o SDK do MLflow Deployments:

GET /api/2.0/serving-endpoints/{name}

O exemplo a seguir cria um endpoint que serve a primeira versão do modelo my-ads-model que está registrado no Unity Catalog registro de modelo. Você deve fornecer o nome completo do modelo, incluindo o catálogo principal e o esquema, como catalog.schema.example-model.

No exemplo de resposta a seguir, o campo state.ready é “READY”, o que significa que o endpoint está pronto para receber tráfego. O campo state.update_state é NOT_UPDATING e pending_config não é mais retornado porque a atualização foi concluída com êxito.

{
  "name": "unity-model-endpoint",
  "creator": "customer@example.com",
  "creation_timestamp": 1666829055000,
  "last_updated_timestamp": 1666829055000,
  "state": {
    "ready": "READY",
    "update_state": "NOT_UPDATING"
  },
  "config": {
    "served_entities": [
      {
        "name": "my-ads-model",
        "entity_name": "myCatalog.mySchema.my-ads-model",
        "entity_version": "1",
        "workload_size": "Small",
        "scale_to_zero_enabled": false,
        "state": {
          "deployment": "DEPLOYMENT_READY",
          "deployment_state_message": ""
        },
        "creator": "customer@example.com",
        "creation_timestamp": 1666829055000
      }
    ],
    "traffic_config": {
      "routes": [
        {
          "served_model_name": "my-ads-model",
          "traffic_percentage": 100
        }
      ]
    },
    "config_version": 1
  },
  "id": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
  "permission_level": "CAN_MANAGE"
}
from mlflow.deployments import get_deploy_client

client = get_deploy_client("databricks")
endpoint = client.get_endpoint(endpoint="chat")
assert endpoint == {
    "name": "chat",
    "creator": "alice@company.com",
    "creation_timestamp": 0,
    "last_updated_timestamp": 0,
    "state": {...},
    "config": {...},
    "tags": [...],
    "id": "88fd3f75a0d24b0380ddc40484d7a31b",
}

Parar de servir o modelo endpoint

O senhor pode interromper temporariamente um modelo de serviço endpoint e começar a usá-lo mais tarde. Quando um endpoint é interrompido, o provisionamento de recursos para ele é encerrado e o endpoint não consegue atender às consultas até que seja iniciado novamente. Somente os pontos de extremidade que atendem a modelos personalizados e não têm atualizações em andamento podem ser interrompidos. Os pontos de extremidade interrompidos não contam para a cota de recursos. As consultas enviadas a um endpoint interrompido retornam um erro 400.

O senhor pode interromper um endpoint na página de detalhes do endpoint na UI de serviço.

  1. Clique no endpoint que o senhor deseja interromper.

  2. Clique em Parar no canto superior direito.

Como alternativa, o senhor pode interromper um endpoint de serviço programaticamente usando a API REST da seguinte forma:

POST /api/2.0/serving-endpoints/{name}/config:stop

Quando o senhor estiver pronto para começar a parar de servir o modelo endpoint, poderá fazê-lo na página de detalhes do endpointna UI de serviço.

  1. Clique no endereço endpoint que o senhor deseja começar.

  2. Clique em começar no canto superior direito.

Como alternativa, o senhor pode começar a servir endpoint de forma programática usando o REST API da seguinte forma:

POST /api/2.0/serving-endpoints/{name}/config:start

Excluir um endpoint de modelo de atividade

Para desabilitar a veiculação de um modelo, você pode excluir o endpoint em que ele é veiculado.

Você pode excluir um endpoint da página de detalhes do endpoint na IU do Serving .

  1. Clique em Exibição na barra lateral.

  2. Clique no endpoint que você deseja excluir.

  3. Clique no menu kebab na parte superior e selecione Excluir.

Como alternativa, o senhor pode excluir um endpoint de serviço programaticamente usando a API REST ou o SDK do MLflow Deployments

DELETE /api/2.0/serving-endpoints/{name}
from mlflow.deployments import get_deploy_client

client = get_deploy_client("databricks")
client.delete_endpoint(endpoint="chat")

Depure seu endpoint de modelo específico

Para depurar quaisquer problemas com o endpoint, você pode buscar:

  • logsde compilação do contêiner do servidor modelo

  • logsdo servidor modelo

Esses logs também podem ser acessados na endpoint UI tabna Logs .

Para a construção logs de um modelo servido, o senhor pode usar a seguinte solicitação. Para obter mais informações, consulte o guia de depuração para manutenção do modelo.

GET /api/2.0/serving-endpoints/{name}/served-models/{served-model-name}/build-logs
{
  “config_version”: 1  // optional
}

Para os logs do servidor modelo de um modelo de atendimento, você pode usar a seguinte solicitação:

GET /api/2.0/serving-endpoints/{name}/served-models/{served-model-name}/logs

{
  “config_version”: 1  // optional
}

gerenciar permissões em seu modelo de serviço endpoint

O senhor deve ter pelo menos a permissão CAN MANAGE em um endpoint de serviço para modificar as permissões. Para obter mais informações sobre os níveis de permissão, consulte Serving endpoint ACLs.

Obtém a lista de permissões no endpoint de serviço.

databricks permissions get servingendpoints <endpoint-id>

Conceder ao usuário jsmith@example.com a permissão CAN QUERY no endpoint de serviço.

databricks permissions update servingendpoints <endpoint-id> --json '{
  "access_control_list": [
    {
      "user_name": "jsmith@example.com",
      "permission_level": "CAN_QUERY"
    }
  ]
}'

O senhor também pode modificar as permissões do endpoint de atendimento usando a API de permissões.

Obter um esquema servindo modelo endpoint

Visualização

O suporte para atender a esquemas de consulta de endpoint está em Public Preview. Essa funcionalidade está disponível nas regiões do modelo servindo.

Um esquema de consulta endpoint é uma descrição formal do serviço endpoint usando a especificação padrão da OpenAPI no formato JSON. Ele contém informações sobre o endpoint, incluindo o caminho do endpoint, detalhes para consultar o endpoint, como o formato do corpo da solicitação e da resposta, e o tipo de dados de cada campo. Essas informações podem ser úteis em cenários de reprodutibilidade ou quando o senhor precisar de informações sobre o endpoint, mas não for o criador ou proprietário original do endpoint.

Para obter o esquema servindo modelo endpoint, o modelo servido deve ter um registro de assinatura de modelo e o endpoint deve estar em um estado READY.

Os exemplos a seguir demonstram como obter programaticamente o esquema servindo modelo endpoint usando o REST API.

O esquema retornado pela API está no formato de um objeto JSON que segue a especificação OpenAPI.

ACCESS_TOKEN="<endpoint-token>"
ENDPOINT_NAME="<endpoint name>"

curl "https://example.databricks.com/api/2.0/serving-endpoints/$ENDPOINT_NAME/openapi" -H "Authorization: Bearer $ACCESS_TOKEN" -H "Content-Type: application/json"

Detalhes da resposta do esquema

A resposta é uma especificação da OpenAPI no formato JSON, normalmente incluindo campos como openapi, info, servers e paths. Como a resposta do esquema é um objeto JSON, o senhor pode analisá-la usando linguagens de programação comuns e gerar código de cliente a partir da especificação usando ferramentas de terceiros. O senhor também pode visualizar a especificação OpenAPI usando ferramentas de terceiros, como o Swagger Editor.

Os principais campos da resposta incluem:

  • O campo info.title mostra o nome do endpoint de atendimento.

  • O campo servers sempre contém um objeto, normalmente o campo url que é a url base do endpoint.

  • O objeto paths na resposta contém todos os caminhos suportados para um endpoint. A chave no objeto é o URL do caminho. Cada path pode suportar vários formatos de entrada. Essas entradas estão listadas no campo oneOf.

A seguir, um exemplo de resposta de esquema de endpoint:

{
  "openapi": "3.1.0",
  "info": {
    "title": "example-endpoint",
    "version": "2"
  },
  "servers": [{ "url": "https://example.databricks.com/serving-endpoints/example-endpoint"}],
  "paths": {
    "/served-models/vanilla_simple_model-2/invocations": {
      "post": {
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "oneOf": [
                  {
                    "type": "object",
                    "properties": {
                      "dataframe_split": {
                        "type": "object",
                        "properties": {
                          "columns": {
                            "description": "required fields: int_col",
                            "type": "array",
                            "items": {
                              "type": "string",
                              "enum": [
                                "int_col",
                                "float_col",
                                "string_col"
                              ]
                            }
                          },
                          "data": {
                            "type": "array",
                            "items": {
                              "type": "array",
                              "prefixItems": [
                                {
                                  "type": "integer",
                                  "format": "int64"
                                },
                                {
                                  "type": "number",
                                  "format": "double"
                                },
                                {
                                  "type": "string"
                                }
                              ]
                            }
                          }
                        }
                      },
                      "params": {
                        "type": "object",
                        "properties": {
                          "sentiment": {
                            "type": "number",
                            "format": "double",
                            "default": "0.5"
                          }
                        }
                      }
                    },
                    "examples": [
                      {
                        "columns": [
                          "int_col",
                          "float_col",
                          "string_col"
                        ],
                        "data": [
                          [
                            3,
                            10.4,
                            "abc"
                          ],
                          [
                            2,
                            20.4,
                            "xyz"
                          ]
                        ]
                      }
                    ]
                  },
                  {
                    "type": "object",
                    "properties": {
                      "dataframe_records": {
                        "type": "array",
                        "items": {
                          "required": [
                            "int_col",
                            "float_col",
                            "string_col"
                          ],
                          "type": "object",
                          "properties": {
                            "int_col": {
                              "type": "integer",
                              "format": "int64"
                            },
                            "float_col": {
                              "type": "number",
                              "format": "double"
                            },
                            "string_col": {
                              "type": "string"
                            },
                            "becx_col": {
                              "type": "object",
                              "format": "unknown"
                            }
                          }
                        }
                      },
                      "params": {
                        "type": "object",
                        "properties": {
                          "sentiment": {
                            "type": "number",
                            "format": "double",
                            "default": "0.5"
                          }
                        }
                      }
                    }
                  }
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Successful operation",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "predictions": {
                      "type": "array",
                      "items": {
                        "type": "number",
                        "format": "double"
                      }
                    }
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}