Usar endpoints particulares para previção on-line

O uso de endpoints particulares para exibir previsões on-line com o Vertex AI fornece uma conexão segura e de baixa latência com o serviço de previsão on-line do Vertex AI. Neste guia, mostramos como configurar endpoints particulares no Vertex AI usando peering de rede VPC para fazer peering na rede com o serviço de previsão on-line do Vertex AI.

Visão geral

Antes de veicular previsões on-line com endpoints particulares, configure o acesso a serviços particulares para criar conexões de peering entre sua rede e a Vertex AI. Se você já tiver configurado isso, use suas conexões de peering atuais.

Este guia abrange as seguintes tarefas:

  • Verificar o status das suas conexões de peering atuais
  • Verificar se as APIs necessárias estão ativadas.
  • Criar um endpoint particular.
  • Como implantar um modelo em um endpoint particular.
    • Compatibilidade com apenas um modelo por endpoint particular. Isso é diferente de um endpoint público da Vertex AI, em que é possível dividir o tráfego em vários modelos implantados em um endpoint.
    • O endpoint particular é compatível com modelos tabulares e treinados personalizados do AutoML.
  • Envio de uma previsão para um endpoint particula
  • Como limpar recursos

Verificar o status das conexões de peering existentes

Se você tiver conexões de peering existentes com o Vertex AI, será possível listá-las para verificar o status:

gcloud compute networks peerings list --network NETWORK_NAME

Você verá que o estado das conexões de peering é ACTIVE. Saiba mais sobre conexões de peering ativas.

Ativar as APIs necessárias

gcloud services enable aiplatform.googleapis.com
gcloud services enable dns.googleapis.com

Criar um endpoint particular

Para criar um endpoint particular, adicione a sinalização --network ao criar um endpoint usando a CLI do Google Cloud:

gcloud beta ai endpoints create \
  --display-name=ENDPOINT_DISPLAY_NAME \
  --network=FULLY_QUALIFIED_NETWORK_NAME \
  --region=REGION

Substitua NETWORK_NAME pelo nome de rede totalmente qualificado:

projects/PROJECT_NUMBER/global/networks/NETWORK_NAME

Se você criar o endpoint sem especificar uma rede, criará um endpoint público.

Limitações de endpoints particulares

Observe as seguintes limitações para endpoints particulares:

  • No momento, os endpoints particulares não são compatíveis com a divisão de tráfego Como solução alternativa, é possível criar a divisão de tráfego manualmente implantando o modelo em vários endpoints particulares e dividindo o tráfego entre os URLs de previsão resultantes para cada endpoint particular.
  • Os endpoints particulares não são compatíveis com SSL/TLS.
  • Para ativar a geração de registros de acesso em um endpoint particular, entre em contato com vertex-ai-feedback@google.com
  • Só é possível usar uma rede para todos os endpoints particulares em um projeto do Google Cloud. Se você quiser mudar para outra rede, entre em contato com vertex-ai-feedback@google.com.
  • Uma nova tentativa do cliente sobre erros recuperáveis é altamente recomendável. Eles podem incluir os seguintes erros:
    • Resposta vazia (código de erro HTTP 0), possivelmente devido a uma conexão corrompida temporária.
    • Códigos de erro HTTP 5xx que indicam que o serviço pode estar temporariamente indisponível.
  • Para o código de erro HTTP 429 que indica que o sistema está sobrecarregado, considere reduzir o tráfego para mitigar esse problema em vez de tentar novamente.
  • As solicitações de previsão de PredictionServiceClient na biblioteca de cliente Python da Vertex AI não são compatíveis.

Monitorar endpoints particulares

Use o painel de métricas para inspecionar a disponibilidade e a latência do tráfego enviado a um endpoint particular.

Para personalizar o monitoramento, consulte as duas métricas a seguir no Cloud Monitoring:

  • aiplatform.googleapis.com/prediction/online/private/response_count

    O número de respostas de previsão. É possível filtrar essa métrica por deployed_model_id ou código de resposta HTTP.

  • aiplatform.googleapis.com/prediction/online/private/prediction_latencies

    Latência da solicitação de previsão em milissegundos. Você pode filtrar essa métrica por deployed_model_id, apenas para solicitações bem-sucedidas.

Saiba como selecionar, consultar e exibir essas métricas no Metrics Explorer.

Implantar um modelo

É possível importar um novo modelo ou implantar um modelo existente que você já tenha enviado. Para fazer upload de um novo modelo, use gcloud ai models upload. Para mais informações, consulte Importar modelos para a Vertex AI.

  1. Para implantar um modelo em um endpoint particular, consulte o guia sobre como implantar modelos. Além de dividir o tráfego e ativar manualmente a geração de registros de acesso, é possível usar qualquer uma das outras opções disponíveis para implantar modelos treinados personalizados. Consulte as limitações dos endpoints particulares para saber mais sobre como eles são diferentes dos endpoints públicos.

  2. Depois de implantar o endpoint, é possível conseguir o URI de previsão nos metadados do endpoint particular.

    1. Se você tiver o nome de exibição do endpoint particular, execute este comando para conseguir o ID do endpoint:

      ENDPOINT_ID=$(gcloud ai endpoints list \
                --region=REGION \
                --filter=displayName:ENDPOINT_DISPLAY_NAME \
                --format="value(ENDPOINT_ID.scope())")
      

      Caso contrário, para visualizar o ID do endpoint e o nome de exibição de todos os endpoints, execute este comando:

      gcloud ai endpoints list --region=REGION
      
    2. Por fim, para conseguir o URI de previsão, execute este comando:

      gcloud beta ai endpoints describe ENDPOINT_ID \
        --region=REGION \
        --format="value(deployedModels.privateEndpoints.predictHttpUri)"
      

Formato do URI de previsão particular

O URI de previsão é diferente para endpoints particulares em comparação com os endpoints públicos da Vertex AI:

http://ENDPOINT_ID.aiplatform.googleapis.com/v1/models/DEPLOYED_MODEL_ID:predict

Se você optar por cancelar a implantação do modelo atual e implantar novamente com um novo, o nome de domínio será reutilizado, mas o caminho incluirá um ID de modelo implantado diferente.

Enviar uma previsão para um endpoint particular

  1. Crie uma instância do Compute Engine na sua rede VPC. Crie a instância na mesma rede VPC em que você fez peering com a Vertex AI.

  2. Conecte o SSH à instância do Compute Engine e instale o cliente de previsão, se aplicável. Caso contrário, use o curl.

  3. Ao prever, use o URL de previsão obtido da implantação do modelo. Neste exemplo, você está enviando a solicitação do cliente de previsão na instância do Compute Engine na mesma rede VPC:

    curl -X POST -d@PATH_TO_JSON_FILE  http://ENDPOINT_ID.aiplatform.googleapis.com/v1/models/DEPLOYED_MODEL_ID:predict
    

    Nesta solicitação de amostra, PATH_TO_JSON_FILE é o caminho para a solicitação de previsão, salva como um arquivo JSON. Por exemplo, example-request.json.

Limpar recursos

É possível remover a implantação de modelos e excluir endpoints particulares da mesma forma que acontece com modelos públicos e endpoints. Só é possível criar endpoints particulares em uma rede por projeto do Google Cloud, mesmo se você excluir esses recursos posteriormente. Se você precisar mudar para uma rede diferente, entre em contato com vertex-ai-feedback@google.com.

Exemplo: testar endpoints particulares na VPC compartilhada

Este exemplo usa dois projetos do Google Cloud com uma rede VPC compartilhada:

  • O projeto host hospeda a rede VPC compartilhada.
  • O projeto do cliente hospeda uma instância do Compute Engine em que você executa um cliente de previsão, como curl, ou seu próprio cliente REST na instância do Compute Engine, para enviar solicitações de previsão.

Quando você cria a instância do Compute Engine no projeto cliente, ela precisa estar dentro da sub-rede personalizada na rede VPC compartilhada do projeto host e na mesma região em que o modelo é implantado.

  1. Crie as conexões de peering para acessar serviços privados no projeto host. Execute gcloud services vpc-peerings connect:

    gcloud services vpc-peerings connect \
      --service=servicenetworking.googleapis.com \
      --network=HOST_SHARED_VPC_NAME \
      --ranges=PREDICTION_RESERVED_RANGE_NAME \
      --project=HOST_PROJECT_ID
    
  2. Crie o endpoint no projeto cliente usando o nome de rede do projeto host. Execute gcloud beta ai endpoints create:

    gcloud beta ai endpoints create \
      --display-name=ENDPOINT_DISPLAY_NAME \
      --network=HOST_SHARED_VPC_NAME \
      --region=REGION \
      --project=CLIENT_PROJECT_ID
    
  3. Envie solicitações de previsão usando o cliente de previsão no projeto cliente.

Exemplo: endpoints particulares com sub-redes não RFC 1918

Este exemplo usa endereços não RFC 1918 para criar endpoints particulares.

  1. Reserve intervalos de IP para nós, pods e serviços. Os intervalos de IP para nós precisam ser do intervalo RFC 1918.

  2. Crie a conexão de peering para acesso a serviço particular usando os intervalos reservados.

    gcloud services vpc-peerings connect \
      --service=servicenetworking.googleapis.com \
      --network=VPC_NAME \
      --ranges=NODES_RANGE_NAME,PODS_RANGE_NAME,SERVICES_RANGE_NAME \
      --project=PROJECT_ID
    
  3. Crie o endpoint especificando os intervalos reservados para nós, pods e serviços. RequestedIpRangeConfig só pode ser especificado pela API REST.

    # Sample json request for endpoint creation.
    {
      displayName: "my_endpoint",
      network: "projects/<project_num>/global/networks/<network>",
      requestedIpRangeConfig: {
        nodesIpRange: {
          ipAddress: "xxx.xx.x.x",
          ipPrefixLength: 22
        },
        podsIpRange: {
          ipAddress: "yyy.yy.y.y",
          ipPrefixLength: 17
        },
        servicesIpRange: {
          ipAddress: "zzz.zz.z.z",
          ipPrefixLength: 22
        }
      }
    }
    
  4. Envie solicitações de previsão usando o cliente de previsão no projeto cliente.