Usar o Private Service Connect para previsão on-line

Com o Private Service Connect, é possível acessar a Vertex AI on-line previsões com segurança de vários projetos de consumidor e redes VPC sem precisar de endereços IP públicos, acesso à Internet pública ou intervalo de endereços IP internos com peering explícito.

Recomendamos o Private Service Connect para uso de previsão on-line casos que têm os seguintes requisitos:

  • Exigir conexões particulares e seguras
  • Requer baixa latência
  • Não precisam ser acessíveis publicamente

O Private Service Connect usa uma regra de encaminhamento na sua VPC para enviar tráfego unidirecionalmente Serviço de previsão on-line da Vertex AI. A regra de encaminhamento se conecta a uma anexo de serviço que expõe o serviço Vertex AI à sua rede VPC. Para mais informações, consulte Sobre o acesso aos serviços da Vertex AI usando o Private Service Connect. Para saber mais sobre como configurar o Private Service Connect, consulte a Visão geral do Private Service Connect na documentação da nuvem privada virtual (VPC).

Criar o endpoint de previsão on-line

Use um dos métodos a seguir para criar um endpoint de previsão on-line com Private Service Connect ativado:

Console

  1. No console do Google Cloud, na Vertex AI, acesse Página de previsão on-line.

    Acessar a previsão on-line

  2. Clique em Criar.

  3. Forneça um nome de exibição para o endpoint.

  4. Selecione Privado.

  5. Selecione Private Service Connect.

  6. Clique em Selecionar IDs do projeto.

  7. Selecione projetos para adicionar à lista de permissões do endpoint.

  8. Clique em Continuar.

  9. Escolha as especificações do seu modelo. Para mais informações, consulte Implantar um modelo em um endpoint.

  10. Clique em Criar. para criar o endpoint e implantar o modelo nele.

  11. Anote o ID do endpoint na resposta.

API

REST

Antes de usar os dados da solicitação abaixo, faça as substituições a seguir:

  • VERTEX_AI_PROJECT_ID: o ID do projeto do Google Cloud em que você está criando o endpoint de previsão on-line.
  • REGION: a região em que você está usando a Vertex AI.
  • VERTEX_AI_ENDPOINT_NAME: o nome de exibição da previsão on-line. endpoint de API.
  • ALLOWED_PROJECTS: uma lista separada por vírgulas de IDs de projetos do Google Cloud; entre aspas, por exemplo, ["PROJECTID1", "PROJECTID2"]. Se um projeto não estiver nesta lista, você não poderá enviar solicitações de previsão. para o endpoint da Vertex AI. Não se esqueça de incluir VERTEX_AI_PROJECT_ID nessa lista para chamar o endpoint no mesmo projeto em que está.

Método HTTP e URL:

POST https://REGION-aiplatform.googleapis.com/v1/projects/VERTEX_AI_PROJECT_ID/locations/REGION/endpoints

Corpo JSON da solicitação:

{
  "displayName": "VERTEX_AI_ENDPOINT_NAME",
  "privateServiceConnectConfig": {
    "enablePrivateServiceConnect": true,
    "projectAllowlist": ["ALLOWED_PROJECTS"]
  }
}

Para enviar a solicitação, expanda uma destas opções:

Você receberá uma resposta JSON semelhante a esta:

{
  "name": "projects/VERTEX_AI_PROJECT_NUMBER/locations/REGION/endpoints/ENDPOINT_ID/operations/OPERATION_ID",
  "metadata": {
    "@type": "type.googleapis.com/google.cloud.aiplatform.v1.CreateEndpointOperationMetadata",
    "genericMetadata": {
      "createTime": "2020-11-05T17:45:42.812656Z",
      "updateTime": "2020-11-05T17:45:42.812656Z"
    }
  }
}
Anote o ENDPOINT_ID.

Python

Antes de testar esse exemplo, siga as instruções de configuração para Python no Guia de início rápido da Vertex AI sobre como usar bibliotecas de cliente. Para mais informações, consulte a documentação de referência da API Vertex AI para Python.

Para autenticar na Vertex AI, configure o Application Default Credentials. Para mais informações, consulte Configurar a autenticação para um ambiente de desenvolvimento local.

PROJECT_ID = "VERTEX_AI_PROJECT_ID"
REGION = "REGION"
VERTEX_AI_ENDPOINT_NAME = "VERTEX_AI_ENDPOINT_NAME"

from google.cloud import aiplatform

aiplatform.init(project=PROJECT_ID, location=REGION)

# Create the forwarding rule in the consumer project
psc_endpoint = aiplatform.PrivateEndpoint.create(
display_name=VERTEX_AI_ENDPOINT_NAME,
project=PROJECT_ID,
location=REGION,
private_service_connect_config=aiplatform.PrivateEndpoint.PrivateServiceConnectConfig(
    project_allowlist=["ALLOWED_PROJECTS"],
    ),
)

Substitua:

  • VERTEX_AI_PROJECT_ID: o ID do projeto do Google Cloud. em que você está criando o endpoint de previsão on-line
  • REGION: a região em que você está usando a Vertex AI.
  • VERTEX_AI_ENDPOINT_NAME: o nome de exibição da previsão on-line. endpoint de API
  • ALLOWED_PROJECTS: uma lista separada por vírgulas do Google Cloud IDs de projeto, cada um entre aspas. Por exemplo, ["PROJECTID1", "PROJECTID2"]. Se um projeto não estiver nesta lista, você não poderá enviar solicitações de previsão. para o endpoint da Vertex AI. Não se esqueça de incluir VERTEX_AI_PROJECT_ID nessa lista para chamar o endpoint no mesmo projeto em que está.

Anote o ENDPOINT_ID no final da URI do endpoint:

INFO:google.cloud.aiplatform.models:To use this PrivateEndpoint in another session:
INFO:google.cloud.aiplatform.models:endpoint = aiplatform.PrivateEndpoint('projects/VERTEX_AI_PROJECT_ID/locations/REGION/endpoints/ENDPOINT_ID')

Implantar o modelo

Depois de criar o endpoint de previsão on-line com Private Service Connect ativado, implante seu modelo nele, seguindo as as etapas descritas em Implantar um modelo em um endpoint.

Acessar o URI do anexo de serviço

Quando você implanta o modelo, um anexo de serviço é criado para endpoint de previsão on-line. Esse anexo de serviço representa o o serviço de previsão on-line da Vertex AI que está sendo exposto aos seus rede VPC. Execute o comando Comando gcloud ai endpoints describe para receber o URI do anexo de serviço.

  1. Liste apenas o valor serviceAttachment dos detalhes do endpoint:

    gcloud ai endpoints describe ENDPOINT_ID \
    --project=VERTEX_AI_PROJECT_ID \
    --region=REGION \
    | grep -i serviceAttachment
    

    Substitua:

    • ENDPOINT_ID: o ID do endpoint de previsão on-line
    • VERTEX_AI_PROJECT_ID: o ID do projeto do Google Cloud em que Você criou seu endpoint de previsão on-line
    • REGION: a região desta solicitação

    O resultado será assim:

    serviceAttachment: projects/ac74a9f84c2e5f2a1-tp/regions/us-central1/serviceAttachments/gkedpm-c6e6a854a634dc99472bb802f503c1
    
  2. Anote toda a string no campo serviceAttachment. Isto é o URI do anexo de serviço.

Criar uma regra de encaminhamento

É possível reservar um endereço IP interno e criar uma regra de encaminhamento a esse endereço. Para criar a regra de encaminhamento, você precisa do URI do anexo de serviço da etapa anterior.

  1. Para reservar um endereço IP interno para a regra de encaminhamento, use o Comando gcloud compute addresses create:

    gcloud compute addresses create ADDRESS_NAME \
    --project=VPC_PROJECT_ID \
    --region=REGION \
    --subnet=SUBNETWORK \
    --addresses=INTERNAL_IP_ADDRESS
    

    Substitua:

    • ADDRESS_NAME: um nome para o endereço IP interno
    • VPC_PROJECT_ID: o ID do projeto do Google Cloud que hospeda sua rede VPC. Se o endpoint de previsão on-line e regra de encaminhamento do Private Service Connect são hospedados no mesmo projeto, use VERTEX_AI_PROJECT_ID para esse parâmetro.
    • REGION: a região do Google Cloud em que o A regra de encaminhamento do Private Service Connect será criada
    • SUBNETWORK: o nome da sub-rede VPC que contém o endereço IP
    • INTERNAL_IP_ADDRESS: o endereço IP interno de reservar. Este parâmetro é opcional.

      • Se esse parâmetro for especificado, o endereço IP deverá estar dentro do do intervalo de endereços IP primário da sub-rede. O endereço IP pode ser um endereço RFC 1918 ou uma sub-rede com intervalos não RFC.
      • Se esse parâmetro for omitido, um endereço IP interno é alocado automaticamente.
      • Para mais informações, consulte Reserve um novo endereço IPv4 ou IPv6 interno estático.
  2. Para verificar se o endereço IP está reservado, use o comando gcloud compute addresses list:

    gcloud compute addresses list --filter="name=(ADDRESS_NAME)" \
    --project=VPC_PROJECT_ID
    

    Na resposta, verifique se o endereço IP tem um status RESERVED.

  3. Para criar a regra de encaminhamento e apontá-la para o anexo de serviço de previsão on-line, use o Comando gcloud compute forwarding-rules create:

    gcloud compute forwarding-rules create PSC_FORWARDING_RULE_NAME \
        --address=ADDRESS_NAME \
        --project=VPC_PROJECT_ID \
        --region=REGION \
        --network=VPC_NETWORK_NAME \
        --target-service-attachment=SERVICE_ATTACHMENT_URI
    

    Substitua:

    • PSC_FORWARDING_RULE_NAME: um nome para a regra de encaminhamento
    • VPC_NETWORK_NAME: o nome da rede VPC em que o endpoint será criado
    • SERVICE_ATTACHMENT_URI: o anexo de serviço que você criou. observação
  4. Para verificar se o anexo de serviço aceita o endpoint, use o comando gcloud compute forwarding-rules describe:

    gcloud compute forwarding-rules describe PSC_FORWARDING_RULE_NAME \
    --project=VPC_PROJECT_ID \
    --region=REGION
    

    Na resposta, verifique se um status ACCEPTED aparece para o campo pscConnectionStatus.

Opcional: ver o endereço IP interno

Se você não especificou um valor para INTERNAL_IP_ADDRESS quando criar a regra de encaminhamento, é possível coletar o endereço alocado automaticamente usando a Comando gcloud compute forwarding-rules describe:

gcloud compute forwarding-rules describe PSC_FORWARDING_RULE_NAME \
--project=VERTEX_AI_PROJECT_ID \
--region=REGION \
| grep -i IPAddress

Substitua:

  • VERTEX_AI_PROJECT_ID: ID do projeto
  • REGION: o nome da região da solicitação.

Receber previsões on-line

Como receber previsões on-line de um endpoint com o Private Service Connect é semelhante a receber previsões on-line de endpoints públicos, exceto conforme as seguintes considerações:

  • A solicitação precisa ser enviada de um projeto especificado no projectAllowlist quando o endpoint de previsão on-line foi criado.
  • Se o acesso global não estiver ativado, a solicitação precisa ser enviada da mesma região.
  • Para receber previsões usando REST, você precisa se conectar usando o namespace estático do endpoint Endereço IP, a menos que você crie um registro DNS para o endereço IP interno. Para exemplo, você deve enviar seu predict solicitações para no endpoint a seguir:

    https://INTERNAL_IP_ADDRESS/v1/projects/VERTEX_AI_PROJECT_ID/locations/REGION/endpoints/ENDPOINT_ID:predict
    

    Substitua INTERNAL_IP_ADDRESS pelo endereço IP interno que você reservou anteriormente.

  • Este é um exemplo de como enviar a predict solicitação usando Python:

    REQUEST_FILE = "PATH_TO_INPUT_FILE"
    import json
    
    import urllib3
    
    urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning)
    
    with open(REQUEST_FILE) as json_file:
        data = json.load(json_file)
        response = psc_endpoint.predict(
            instances=data["instances"], endpoint_override=INTERNAL_IP_ADDRESS
        )
    print(response)
    

    Substitua PATH_TO_INPUT_FILE por um caminho para um arquivo JSON. que contém a entrada da solicitação.

Opcional: crie um registro DNS para o endereço IP interno

Recomendamos que você crie um registro DNS para receber previsões on-line do endpoint sem precisar especificar o endereço IP interno.

Para mais informações, consulte Outras maneiras de configurar o DNS.

  1. Crie uma zona DNS particular usando o comando gcloud dns managed-zones create. Essa zona está associada à rede VPC em que a regra de encaminhamento foi criada.

    DNS_NAME_SUFFIX="prediction.p.vertexai.goog."  # DNS names have "." at the end.
    gcloud dns managed-zones create ZONE_NAME \
    --project=VPC_PROJECT_ID \
    --dns-name=$DNS_NAME_SUFFIX \
    --networks=VPC_NETWORK_NAME \
    --visibility=private \
    --description="A DNS zone for Vertex AI endpoints using Private Service Connect."
    
    

    Substitua:

    • ZONE_NAME: o nome da zona de DNS.
  2. Para criar um registro DNS na zona, use o Comando gcloud dns record-sets create:

    DNS_NAME=ENDPOINT_ID.REGION-VERTEX_AI_PROJECT_NUMBER.$DNS_NAME_SUFFIX
    gcloud dns record-sets create $DNS_NAME \
    --rrdatas=INTERNAL_IP_ADDRESS \
    --zone=ZONE_NAME \
    --type=A \
    --ttl=60 \
    --project=VPC_PROJECT_ID
    

    Substitua:

    • VERTEX_AI_PROJECT_NUMBER: o número do projeto VERTEX_AI_PROJECT_ID. Você pode localizar isso número do projeto no console do Google Cloud. Para mais informações, consulte Como identificar projetos.
    • INTERNAL_IP_ADDRESS: o endereço IP interno da sua endpoint de previsão on-line

    Agora você pode enviar suas solicitações predict para:

    https://ENDPOINT_ID.REGION-VERTEX_AI_PROJECT_NUMBER.prediction.p.vertexai.goog/v1/projects/VERTEX_AI_PROJECT_ID/locations/REGION/endpoints/ENDPOINT_ID:predict
    

Este é um exemplo de como enviar a predict solicitação para a zona de DNS usando Python:

REQUEST_FILE = "PATH_TO_INPUT_FILE"
import json

import urllib3

urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning)

with open(REQUEST_FILE) as json_file:
    data = json.load(json_file)
    response = psc_endpoint.predict(
        instances=data["instances"], endpoint_override=DNS_NAME
    )
print(response)

Substitua DNS_NAME pelo nome DNS especificado no comando gcloud dns record-sets create.

Limitações

Os endpoints da Vertex AI com o Private Service Connect estão sujeitos à as seguintes limitações:

  • Não há suporte para saída particular de dentro do endpoint. Porque As regras de encaminhamento do Private Service Connect são unidirecionais, outro privado As cargas de trabalho do Google Cloud não são acessíveis dentro do contêiner.
  • Não é possível alterar a configuração do projectAllowlist de um endpoint.
  • Não há suporte para a geração de registros de acesso.
  • A geração de registros de solicitações e respostas não é compatível.
  • Não há suporte para a Vertex Explainable AI.

Limitações de visualização

No pré-lançamento, as seguintes limitações adicionais se aplicam:

  • Se você cancelar a implantação de todos os modelos do Private Service Connect e reimplantar uma regra de encaminhamento, mesmo que o anexo de serviço é o mesmo.
  • Todos os endpoints precisam ter a mesma configuração de projectAllowlist.

A seguir