Obtenha inferências online para um modelo de previsão

O Vertex AI oferece duas opções para projetar valores futuros através do seu modelo de previsão preparado: inferências online e inferências em lote.

Uma inferência online é um pedido síncrono. Use inferências online quando fizer pedidos em resposta à entrada da aplicação ou noutras situações em que precisa de inferência atempada.

Um pedido de inferência em lote é um pedido assíncrono. Use inferências em lote quando não precisar de uma resposta imediata e quiser processar dados acumulados usando um único pedido.

Esta página mostra como projetar valores futuros através de inferências online. Para saber como projetar valores usando inferências em lote, consulte o artigo Obtenha inferências em lote para um modelo de previsão.

Tem de implementar o modelo num ponto final antes de o poder usar para inferências. Um ponto final é um conjunto de recursos físicos.

Pode pedir uma explicação em vez de uma inferência. Os valores de importância das caraterísticas locais da explicação indicam a contribuição de cada caraterística para o resultado da inferência. Para uma vista geral conceptual, consulte o artigo Atribuições de funcionalidades para a previsão.

Para saber mais sobre os preços das inferências online, consulte o artigo Preços dos fluxos de trabalho tabulares.

Antes de começar

Antes de poder fazer um pedido de inferência online, primeiro prepare um modelo.

Crie ou selecione um ponto final

Use a função aiplatform.Endpoint.create() para criar um ponto final. Se já tiver um ponto final, use a função aiplatform.Endpoint() para o selecionar.

O código seguinte oferece um exemplo:

# Import required modules
from google.cloud import aiplatform
from google.cloud.aiplatform import models

PROJECT_ID = "PROJECT_ID"
REGION = "REGION"

# Initialize the Vertex SDK for Python for your project.
aiplatform.init(project=PROJECT_ID, location=REGION)
endpoint = aiplatform.Endpoint.create(display_name='ENDPOINT_NAME')

Substitua o seguinte:

  • PROJECT_ID: o ID do seu projeto.
  • REGION: a região onde usa o Vertex AI.
  • ENDPOINT_NAME: nome a apresentar do ponto final.

Selecione um modelo preparado

Use a função aiplatform.Model() para selecionar um modelo preparado:

# Create reference to the model trained ahead of time.
model_obj = models.Model("TRAINED_MODEL_PATH")

Substitua o seguinte:

  • TRAINED_MODEL_PATH: por exemplo, projects/PROJECT_ID/locations/REGION/models/[TRAINED_MODEL_ID]

Implemente o modelo no ponto final

Use a função deploy() para implementar o modelo no ponto final. O código seguinte oferece um exemplo:

deployed_model = endpoint.deploy(
    model_obj,
    machine_type='MACHINE_TYPE',
    traffic_percentage=100,
    min_replica_count='MIN_REPLICA_COUNT',
    max_replica_count='MAX_REPLICA_COUNT',
    sync=True,
    deployed_model_display_name='DEPLOYED_MODEL_NAME',
)

Substitua o seguinte:

  • MACHINE_TYPE: por exemplo, n1-standard-8. Saiba mais sobre os tipos de máquinas.
  • MIN_REPLICA_COUNT: o número mínimo de nós para esta implementação. Pode aumentar ou diminuir o número de nós conforme necessário pela carga de inferência, até ao número máximo de nós e nunca menos do que este número de nós. Este valor tem de ser igual ou superior a 1. Se não definir a variável min_replica_count, o valor predefinido é 1.
  • MAX_REPLICA_COUNT: o número máximo de nós para esta implementação. Pode aumentar ou diminuir a quantidade de nós conforme necessário pela carga de inferência, até este número de nós e nunca menos do que o número mínimo de nós. Se não definir a variável max_replica_count, o número máximo de nós é definido para o valor de min_replica_count.
  • DEPLOYED_MODEL_NAME: um nome para o DeployedModel. Também pode usar o nome a apresentar do Model para o DeployedModel.

A implementação do modelo pode demorar cerca de dez minutos.

Obtenha inferências online

Para obter inferências, use a função predict() e forneça uma ou mais instâncias de entrada. O código seguinte mostra um exemplo:

predictions = endpoint.predict(instances=[{...}, {...}])

Cada instância de entrada é um dicionário Python com o mesmo esquema com o qual o modelo foi preparado. Tem de conter um par chave-valor available at forecast que corresponda à coluna de tempo e um par chave-valor unavailable at forecast que contenha os valores do histórico da coluna de inferência segmentada. O Vertex AI espera que cada instância de entrada pertença a uma única série cronológica. A ordem dos pares de chave-valor na instância não é importante.

A instância de entrada está sujeita às seguintes restrições:

  • Todos os pares de chave-valor disponíveis na previsão têm de ter o mesmo número de pontos de dados.
  • Todos os pares de chave-valor indisponíveis na previsão têm de ter o mesmo número de pontos de dados.
  • Os pares de chave-valor disponíveis na previsão têm de ter, pelo menos, tantos pontos de dados quanto os pares de chave-valor indisponíveis na previsão.

Para saber mais sobre os tipos de colunas usados na previsão, consulte o artigo Tipo de funcionalidade e disponibilidade na previsão.

O código seguinte demonstra um conjunto de duas instâncias de entrada. A coluna Category contém dados de atributos. A coluna Timestamp contém dados que estão disponíveis na previsão. Três pontos são dados de contexto e dois pontos são dados de horizonte. A coluna Sales contém dados que não estão disponíveis na previsão. Todos os três pontos são dados de contexto. Para saber como o contexto e o horizonte são usados na previsão, consulte o artigo Horizonte de previsão, janela de contexto e janela de previsão.

instances=[
  {
    # Attribute
    "Category": "Electronics",
    # Available at forecast: three days of context, two days of horizon
    "Timestamp": ['2023-08-03', '2023-08-04', '2023-08-05', '2023-08-06', '2023-08-07'],
    # Unavailable at forecast: three days of context
    "Sales": [490.50, 325.25, 647.00],
  },
  {
    # Attribute
    "Category": "Food",
    # Available at forecast: three days of context, two days of horizon
    "Timestamp": ['2023-08-03', '2023-08-04', '2023-08-05', '2023-08-06', '2023-08-07'],
    # Unavailable at forecast: three days of context
    "Sales": [190.50, 395.25, 47.00],
  }
])

Para cada instância, o Vertex AI responde com duas inferências para Sales, correspondentes às duas datas/horas horizon ("2023-08-06" e "2023-08-07").

Para um desempenho ideal, o número de pontos de dados de context e o número de pontos de dados de horizon em cada instância de entrada têm de corresponder aos comprimentos de contexto e horizonte com os quais o modelo foi preparado. Se houver uma incompatibilidade, o Vertex AI preenche ou trunca a instância para corresponder ao tamanho do modelo.

Se o número de pontos de dados de contexto na sua instância de entrada for inferior ou superior ao número de pontos de dados de contexto usados para a preparação do modelo, certifique-se de que este número de pontos é consistente em todos os pares de chave-valor disponíveis na previsão e em todos os pares de chave-valor indisponíveis na previsão.

Por exemplo, considere um modelo que foi preparado com quatro dias de dados de contexto e dois dias de dados de horizonte. Pode fazer um pedido de inferência com apenas três dias de dados de contexto. Neste caso, os pares de chave-valor indisponíveis na previsão contêm três valores. Os pares de chaves-valores disponíveis na previsão têm de conter cinco valores.

Resultado da inferência online

O Vertex AI fornece o resultado da inferência online no campo value:

{
  'value': [...]
}

A duração da resposta de inferência depende do horizonte usado no treino do modelo e no horizonte da instância de entrada. O comprimento da resposta de inferência é o menor destes dois valores.

Considere os seguintes exemplos:

  • Prepara um modelo com context = 15 e horizon = 50. A sua instância de entrada tem context = 15 e horizon = 20. A resposta de inferência tem um comprimento de 20.
  • Prepara um modelo com context = 15 e horizon = 50. A sua instância de entrada tem context = 15 e horizon = 100. A resposta de inferência tem um comprimento de 50.

Saída de inferências online para modelos TFT

Para modelos preparados com o Temporal Fusion Transformer (TFT), o Vertex AI oferece interpretabilidade do TFT tft_feature_importance, além de inferências no campo value:

{
  "tft_feature_importance": {
    "attribute_weights": [...],
    "attribute_columns": [...],
    "context_columns": [...],
    "context_weights": [...],
    "horizon_weights": [...],
    "horizon_columns": [...]
  },
  "value": [...]
}
  • attribute_columns: funcionalidades de previsão que são invariantes no tempo.
  • attribute_weights: os pesos associados a cada um dos attribute_columns.
  • context_columns: funcionalidades de previsão cujos valores da janela de contexto servem como entradas para o codificador de memória a curto/longo prazo (LSTM) do TFT.
  • context_weights: os pesos de importância das funcionalidades associados a cada um dos context_columns para a instância prevista.
  • horizon_columns: funcionalidades de previsão cujos valores de horizonte de previsão servem como entradas para o descodificador de memória a curto/longo prazo (LSTM) da TFT.
  • horizon_weights: os pesos de importância das funcionalidades associados a cada um dos horizon_columns para a instância prevista.

Resultado da inferência online para modelos otimizados para a perda de quantil

Para modelos otimizados para a perda quantílica, o Vertex AI fornece a seguinte saída de previsão online:

{
  "value": [...],
  "quantile_values": [...],
  "quantile_predictions": [...]
}
  • value: se o conjunto de quantis incluir a mediana, value é o valor de inferência na mediana. Caso contrário, value é o valor de inferência no quantil mais baixo no conjunto. Por exemplo, se o seu conjunto de quantis for [0.1, 0.5, 0.9], value é a inferência para o quantil 0.5. Se o seu conjunto de quantis for [0.1, 0.9], value é a inferência para o quantil 0.1.
  • quantile_values: os valores dos quantis, que são definidos durante a preparação do modelo.
  • quantile_predictions: os valores de inferência associados a quantile_values.

Considere, por exemplo, um modelo em que a coluna de destino é o valor das vendas. Os valores dos quantis são definidos como [0.1, 0.5, 0.9]. O Vertex AI devolve as seguintes inferências de quantil: [4484, 5615, 6853]. Aqui, o conjunto de quantis inclui a mediana, pelo que value é a inferência para o quantil 0.5 (5615). Pode interpretar as inferências de quantis da seguinte forma:

  • P(sales value < 4484) = 10%
  • P(sales value < 5615) = 50%
  • P(sales value < 6853) = 90%

Saída de inferência online para modelos com inferência probabilística

Se o seu modelo usar a inferência probabilística, o campo value contém o minimizador do objetivo de otimização. Por exemplo, se o objetivo de otimização for minimize-rmse, o campo value contém o valor médio. Se for minimize-mae, o campo value contém o valor mediano.

Se o seu modelo usar inferência probabilística com quantis, o Vertex AI fornece valores de quantis e inferências, além do minimizador do objetivo de otimização. Os valores dos quantis são definidos durante a preparação do modelo. As inferências de quantil são os valores de inferência associados aos valores de quantil.

Receba explicações online

Para receber explicações, use a função explain() e forneça uma ou mais instâncias de entrada. O código seguinte mostra um exemplo:

explanations = endpoint.explain(instances=[{...}, {...}])

O formato das instâncias de entrada é o mesmo para as inferências online e as explicações online. Para saber mais, consulte o artigo Obtenha inferências online.

Para uma vista geral conceptual das atribuições de funcionalidades, consulte o artigo Atribuições de funcionalidades para previsões.

Resultado da explicação online

O código seguinte demonstra como pode gerar os resultados da explicação:

# Import required modules
import json
from google.protobuf import json_format

def explanation_to_dict(explanation):
  """Converts the explanation proto to a human-friendly json."""
  return json.loads(json_format.MessageToJson(explanation._pb))

for response in explanations.explanations:
  print(explanation_to_dict(response))

Os resultados da explicação têm o seguinte formato:

{
  "attributions": [
    {
      "baselineOutputValue": 1.4194682836532593,
      "instanceOutputValue": 2.152980089187622,
      "featureAttributions": {
        ...
        "store_id": [
          0.007947325706481934
        ],
        ...
        "dept_id": [
          5.960464477539062e-08
        ],
        "item_id": [
          0.1100526452064514
        ],
        "date": [
          0.8525647521018982
        ],
        ...
        "sales": [
          0.0
        ]
      },
      "outputIndex": [
        2
      ],
      "approximationError": 0.01433318599207033,
      "outputName": "value"
    },
    ...
  ]
}

O número de elementos attributions depende do horizonte usado na preparação do modelo e do horizonte da instância de entrada. O número de elementos é o menor destes dois valores.

O campo featureAttributions num elemento attributions contém um valor para cada uma das colunas no conjunto de dados de entrada. A Vertex AI gera explicações para todos os tipos de funcionalidades: atributo, disponível na previsão e indisponível na previsão. Para saber mais acerca dos campos de um elemento attributions, consulte o artigo Atribuição.

Elimine o ponto final

Use as funções undeploy_all() e delete() para eliminar o seu ponto final. O código seguinte mostra um exemplo:

endpoint.undeploy_all()
endpoint.delete()

O que se segue?