O serviço de previsão on-line da Vertex AI permite fazer solicitações síncronas para seu próprio endpoint de modelo de previsão.
Nesta página, mostramos como enviar solicitações ao modelo para que ele possa fazer previsões on-line com baixa latência.
Antes de começar
Antes de começar a usar a API Online Prediction, você precisa ter um projeto e as credenciais adequadas.
Siga estas etapas antes de receber uma previsão on-line:
- Configure um projeto para a Vertex AI.
Para receber as permissões necessárias para acessar a previsão on-line, peça ao administrador do IAM do projeto para conceder a você a função de usuário de previsão da Vertex AI (
vertex-ai-prediction-user
).Para informações sobre esse papel, consulte Preparar permissões do IAM.
Crie e treine um modelo de previsão direcionado a um dos contêineres compatíveis.
Crie o cluster de previsão e verifique se o projeto permite tráfego externo de entrada.
Mostre os detalhes do recurso personalizado
Endpoint
do seu modelo de previsão:kubectl --kubeconfig PREDICTION_CLUSTER_KUBECONFIG get endpoint PREDICTION_ENDPOINT -n PROJECT_NAMESPACE -o jsonpath='{.status.endpointFQDN}'
Substitua:
PREDICTION_CLUSTER_KUBECONFIG
: o caminho para o arquivo kubeconfig no cluster de previsão.PREDICTION_ENDPOINT
: o nome do endpoint.PROJECT_NAMESPACE
: o nome do namespace do projeto de previsão.
A saída precisa mostrar o campo
status
, exibindo o nome de domínio totalmente qualificado do endpoint no campoendpointFQDN
. Registre esse caminho de URL do endpoint para usá-lo nas suas solicitações.
Definir as variáveis de ambiente
Se você quiser enviar uma solicitação ao endpoint do modelo usando um script Python e configurar uma conta de serviço no seu projeto para fazer chamadas de API autorizadas de maneira programática, defina variáveis de ambiente no script para acessar valores como as chaves da conta de serviço durante a execução.
Siga estas etapas para definir as variáveis de ambiente necessárias em um script Python:
Crie um notebook do JupyterLab para interagir com a API Online Prediction.
Crie um script Python no notebook do JupyterLab.
Adicione o seguinte código ao script Python:
import os os.environ["GOOGLE_APPLICATION_CREDENTIALS"] = "APPLICATION_DEFAULT_CREDENTIALS_FILENAME"
Substitua
APPLICATION_DEFAULT_CREDENTIALS_FILENAME
pelo nome do arquivo JSON que contém as chaves da conta de serviço criadas no projeto, comomy-service-key.json
.Salve o script do Python com um nome, como
prediction.py
.Execute o script Python para definir as variáveis de ambiente:
python SCRIPT_NAME
Substitua
SCRIPT_NAME
pelo nome que você deu ao script do Python, comoprediction.py
.
Enviar uma solicitação para um endpoint
Faça uma solicitação ao endpoint do modelo para receber uma previsão on-line:
curl
Siga estas etapas para fazer uma solicitação curl
:
Crie um arquivo JSON chamado
request.json
para o corpo da solicitação.É necessário adicionar e formatar sua entrada para previsão on-line com os detalhes do corpo da solicitação que o contêiner de destino exige.
Faça a solicitação:
curl -X POST -H "Content-Type: application/json; charset=utf-8" -H "Authorization: Bearer TOKEN" https://ENDPOINT:443/v1/model:predict -d @request.json
Substitua:
TOKEN
: o token de autenticação que você recebeu.ENDPOINT
: o endpoint do modelo para a solicitação de previsão on-line.
Se for bem-sucedido, você vai receber uma resposta JSON à sua solicitação de previsão on-line.
Confira um exemplo da saída:
{
"predictions": [[-357.10849], [-171.621658]
]
}
Para mais informações sobre respostas, consulte Detalhes do corpo da resposta.
Python
Siga estas etapas para usar o serviço de predição on-line em um script Python:
Crie um arquivo JSON chamado
request.json
para o corpo da solicitação.É necessário adicionar e formatar sua entrada para previsão on-line com os detalhes do corpo da solicitação que o contêiner de destino exige.
Instale a versão mais recente da biblioteca de cliente da plataforma Vertex AI.
Defina as variáveis de ambiente necessárias em um script Python.
Adicione o seguinte código ao script Python que você criou:
import json import os from typing import Sequence import grpc from absl import app from absl import flags from google.auth.transport import requests from google.protobuf import json_format from google.protobuf.struct_pb2 import Value from google.cloud.aiplatform_v1.services import prediction_service _INPUT = flags.DEFINE_string("input", None, "input", required=True) _HOST = flags.DEFINE_string("host", None, "Prediction endpoint", required=True) _ENDPOINT_ID = flags.DEFINE_string("endpoint_id", None, "endpoint id", required=True) os.environ["GRPC_DEFAULT_SSL_ROOTS_FILE_PATH"] = "path-to-ca-cert-file.cert" # ENDPOINT_RESOURCE_NAME is a placeholder value that doesn't affect prediction behavior. ENDPOINT_RESOURCE_NAME="projects/000000000000/locations/us-central1/endpoints/00000000000000" def get_sts_token(host): creds = None try: creds, _ = google.auth.default() creds = creds.with_gdch_audience(host+":443") req = requests.Request() creds.refresh(req) print("Got token: ") print(creds.token) except Exception as e: print("Caught exception" + str(e)) raise e return creds.token # predict_client_secure builds a client that requires TLS def predict_client_secure(host, token): with open(os.environ["GRPC_DEFAULT_SSL_ROOTS_FILE_PATH"], 'rb') as f: channel_creds = grpc.ssl_channel_credentials(f.read()) call_creds = grpc.access_token_call_credentials(token) creds = grpc.composite_channel_credentials( channel_creds, call_creds, ) client = prediction_service.PredictionServiceClient( transport=prediction_service.transports.grpc.PredictionServiceGrpcTransport( channel=grpc.secure_channel(target=host+":443", credentials=creds))) return client def predict_func(client, instances): resp = client.predict( endpoint=ENDPOINT_RESOURCE_NAME, instances=instances, metadata=[("x-vertex-ai-endpoint-id", _ENDPOINT_ID.value)] ) print(resp) def main(argv: Sequence[str]): del argv # Unused. with open(_INPUT.value) as json_file: data = json.load(json_file) instances = [json_format.ParseDict(s, Value()) for s in data["instances"]] token = get_sts_token(_HOST.value) client = predict_client_secure(_HOST.value, token) predict_func(client=client, instances=instances) if __name__=="__main__": app.run(main)
Salve o script do Python com um nome, como
prediction.py
.Faça a solicitação ao servidor de previsão:
python SCRIPT_NAME --input request.json \ --host ENDPOINT \ --endpoint_id ENDPOINT_ID \
Substitua:
SCRIPT_NAME
: o nome do script Python, comoprediction.py
.ENDPOINT
: o endpoint do modelo para a solicitação de previsão on-line.ENDPOINT_ID
: o valor do ID do endpoint.
Se for bem-sucedido, você vai receber uma resposta JSON à sua solicitação de previsão on-line. Para mais informações sobre respostas, consulte Detalhes do corpo da resposta.