Pular para o conteúdo principal

Ponto de extremidade de serviço de consulta para modelos personalizados

info

Visualização

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

Neste artigo, o senhor aprenderá a formatar solicitações de pontuação para o modelo atendido e a enviar essas solicitações para o modelo atendido endpoint. A orientação é relevante para a veiculação de modelos personalizados , que o site Databricks define como modelos ML tradicionais ou modelos Python personalizados no formato MLflow. Os modelos devem ser registrados no Unity Catalog. Os exemplos incluem os modelos de transformadores scikit-learn, XGBoost, PyTorch e Hugging Face. Consulte modelos implantados usando Mosaic AI Model Serving para obter mais informações sobre essa funcionalidade e as categorias de modelos suportadas.

Para solicitações de consulta para cargas de trabalho generativas AI e LLM, consulte Modelos de base de consulta.

Requisitos

Métodos e exemplos de consulta

O Mosaic AI Model Serving oferece as seguintes opções para o envio de solicitações de pontuação para modelos atendidos:

Método

Detalhes

UI de serviço

Selecione Query endpoint na página Serving endpoint em seu site Databricks workspace. Insira os dados de entrada do modelo no formato JSON e clique em Send Request (Enviar solicitação ). Se o modelo tiver um registro de exemplo de entrada, use Show Example para carregá-lo.

API REST

Chamar e consultar o modelo usando a API REST. Consulte POST /serving-endpoint/{name}/invocations para obter detalhes. Para solicitações de pontuação para o endpoint que atende a vários modelos, consulte Consultar modelos individuais em endpoint.

SDK de implantações do MLflow

Use a função predict() do MLflow Deployments SDK para consultar o modelo.

Exemplo de pontuação do Pandas DataFrame

O exemplo a seguir pressupõe um MODEL_VERSION_URI como https://<databricks-instance>/model/iris-classifier/Production/invocations, em que <databricks-instance> é o nome da sua instância Databricks, e um Databricks REST API tokens chamado DATABRICKS_API_TOKEN.

Consulte Formatos de pontuação suportados.

Score a model accepting dataframe split input format.

Bash
curl -X POST -u token:$DATABRICKS_API_TOKEN $MODEL_VERSION_URI \
-H 'Content-Type: application/json' \
-d '{"dataframe_split": [{
"columns": ["sepal length (cm)", "sepal width (cm)", "petal length (cm)", "petal width (cm)"],
"data": [[5.1, 3.5, 1.4, 0.2], [4.9, 3.0, 1.4, 0.2]]
}]
}'

Score a model accepting tensor inputs. Tensor inputs should be formatted as described in TensorFlow Serving’s API documentation.

Bash
curl -X POST -u token:$DATABRICKS_API_TOKEN $MODEL_VERSION_URI \
-H 'Content-Type: application/json' \
-d '{"inputs": [[5.1, 3.5, 1.4, 0.2]]}'

Exemplo de entrada de tensor

O exemplo a seguir pontua um modelo que aceita entradas de tensor. As entradas do Tensor devem ser formatadas conforme descrito nos documentos da API do TensorFlow Serving. Este exemplo pressupõe um MODEL_VERSION_URI como https://<databricks-instance>/model/iris-classifier/Production/invocations, em que <databricks-instance> é o nome da sua instância Databricks, e um Databricks REST API tokens chamado DATABRICKS_API_TOKEN.

Bash
curl -X POST -u token:$DATABRICKS_API_TOKEN $MODEL_VERSION_URI \
-H 'Content-Type: application/json' \
-d '{"inputs": [[5.1, 3.5, 1.4, 0.2]]}'

Formatos de pontuação suportados

Para modelos personalizados, o servindo modelo suporta solicitações de pontuação em Pandas DataFrame ou entrada Tensor.

Pandas DataFrame

As solicitações devem ser enviadas por meio da construção de um JSON-serializado Pandas DataFrame com uma das chaves compatíveis e um objeto JSON correspondente ao formato de entrada.

  • (Recomendado) O formatodataframe_split é um Pandas DataFrame serializado em JSON na orientação split.

    JSON
    {
    "dataframe_split": {
    "index": [0, 1],
    "columns": ["sepal length (cm)", "sepal width (cm)", "petal length (cm)", "petal width (cm)"],
    "data": [
    [5.1, 3.5, 1.4, 0.2],
    [4.9, 3.0, 1.4, 0.2]
    ]
    }
    }
  • dataframe_records é um Pandas DataFrame serializado em JSON na orientação records.

nota

Esse formato não garante a preservação da ordem das colunas, e o formato split é preferível ao formato records.

JSON
{
"dataframe_records": [
{
"sepal length (cm)": 5.1,
"sepal width (cm)": 3.5,
"petal length (cm)": 1.4,
"petal width (cm)": 0.2
},
{
"sepal length (cm)": 4.9,
"sepal width (cm)": 3,
"petal length (cm)": 1.4,
"petal width (cm)": 0.2
},
{
"sepal length (cm)": 4.7,
"sepal width (cm)": 3.2,
"petal length (cm)": 1.3,
"petal width (cm)": 0.2
}
]
}

A resposta do endpoint contém a saída do seu modelo, serializada com JSON, envolvida em um predictions key.

JSON
{
"predictions": [0, 1, 1, 1, 0]
}

Entrada de tensor

Quando seu modelo espera tensores, como um modelo TensorFlow ou PyTorch, há duas opções de formato compatíveis para o envio de solicitações: instances e inputs.

Se você tiver vários tensores nomeados por linha, precisará ter um de cada tensor para cada linha.

  • instances é um formato baseado em tensores que aceita tensores em formato de linha. Use esse formato se todos os tensores de entrada tiverem a mesma dimensão 0. Conceitualmente, cada tensor na lista de instâncias poderia ser unido aos outros tensores de mesmo nome no restante da lista para construir o tensor de entrada completo para o modelo, o que só seria possível se todos os tensores tivessem a mesma dimensão 0.

    JSON
    { "instances": [1, 2, 3] }

    O exemplo a seguir mostra como especificar vários tensores nomeados.

    JSON
    {
    "instances": [
    {
    "t1": "a",
    "t2": [1, 2, 3, 4, 5],
    "t3": [
    [1, 2],
    [3, 4],
    [5, 6]
    ]
    },
    {
    "t1": "b",
    "t2": [6, 7, 8, 9, 10],
    "t3": [
    [7, 8],
    [9, 10],
    [11, 12]
    ]
    }
    ]
    }
  • inputs envie consultas com tensores em formato colunar. Essa solicitação é diferente porque, na verdade, há um número diferente de instâncias de tensor de t2 (3) do que t1 e t3, portanto, não é possível representar essa entrada no formato instances.

    JSON
    {
    "inputs": {
    "t1": ["a", "b"],
    "t2": [
    [1, 2, 3, 4, 5],
    [6, 7, 8, 9, 10]
    ],
    "t3": [
    [
    [1, 2],
    [3, 4],
    [5, 6]
    ],
    [
    [7, 8],
    [9, 10],
    [11, 12]
    ]
    ]
    }
    }

A resposta do endpoint está no seguinte formato.

JSON
{
"predictions": [0, 1, 1, 1, 0]
}

Notebook exemplo

Consulte o Notebook a seguir para ver um exemplo de como testar seu modelo de serviço endpoint com um modelo Python:

Teste servindo o modelo endpoint Notebook

Open notebook in new tab

Recurso adicional