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 demin_replica_count
. - DEPLOYED_MODEL_NAME: um nome para o
DeployedModel
. Também pode usar o nome a apresentar doModel
para oDeployedModel
.
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
ehorizon
=50
. A sua instância de entrada temcontext
=15
ehorizon
=20
. A resposta de inferência tem um comprimento de20
. - Prepara um modelo com
context
=15
ehorizon
=50
. A sua instância de entrada temcontext
=15
ehorizon
=100
. A resposta de inferência tem um comprimento de50
.
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 dosattribute_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 doscontext_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 doshorizon_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 quantil0.5
. Se o seu conjunto de quantis for[0.1, 0.9]
,value
é a inferência para o quantil0.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?
- Saiba mais acerca dos preços para inferências online.