Usa Private Service Connect para la predicción en línea

Private Service Connect te permite acceder a las predicciones en línea de Vertex AI de forma segura desde varios proyectos de consumidores y redes de VPC sin necesitar direcciones IP públicas, acceso a Internet pública ni un rango de direcciones IP internas con intercambio de tráfico explícito.

Recomendamos Private Service Connect para los casos de uso de predicción en línea que tienen los siguientes requisitos:

  • Requiere conexiones privadas y seguras
  • Exige una latencia baja
  • No necesitan ser de acceso público.

Private Service Connect usa una regla de reenvío en tu red de VPC para enviar tráfico de forma unidireccional al servicio de predicción en línea de Vertex AI. La regla de reenvío se conecta a un adjunto de servicio que expone el servicio de Vertex AI a tu red de VPC. Para obtener más información, consulta Información sobre el acceso a los servicios de Vertex AI a través de Private Service Connect. Para obtener más información sobre cómo configurar Private Service Connect, consulta la Descripción general de Private Service Connect en la documentación de la nube privada virtual (VPC).

Crea el extremo de predicción en línea

Usa uno de los siguientes métodos para crear un extremo de predicción en línea con Private Service Connect habilitado:

Console

  1. En la consola de Google Cloud, en Vertex AI, ve a la página Predicción en línea.

    Ir a Predicción en línea

  2. Haz clic en Crear.

  3. Proporciona un nombre visible para el extremo.

  4. Selecciona Privado.

  5. Selecciona Private Service Connect.

  6. Haz clic en Seleccionar IDs de proyecto.

  7. Selecciona proyectos para agregar a la lista de proyectos permitidos del extremo.

  8. Haz clic en Continuar.

  9. Elige las especificaciones del modelo. Para obtener más información, consulta Implementa un modelo en un extremo.

  10. Haz clic en Crear para crear tu extremo e implementar tu modelo en él.

  11. Toma nota del ID de extremo en la respuesta.

API

REST

Antes de usar cualquiera de los datos de solicitud a continuación, realiza los siguientes reemplazos:

  • VERTEX_AI_PROJECT_ID: Es el ID del proyecto de Google Cloud en el que creas el extremo de predicción en línea.
  • REGION: la región en la que usas Vertex AI.
  • VERTEX_AI_ENDPOINT_NAME: el nombre visible del extremo de predicción en línea.
  • ALLOWED_PROJECTS: una lista separada por comas de los ID de proyectos de Google Cloud, cada uno de ellos entre comillas, por ejemplo, ["PROJECTID1", "PROJECTID2"]. Si un proyecto no está contenido en esta lista, no podrás enviar solicitudes de predicción al extremo de Vertex AI desde él. Asegúrate de incluir VERTEX_AI_PROJECT_ID en esta lista para que puedas llamar al extremo desde el mismo proyecto en el que se encuentra.

Método HTTP y URL:

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

Cuerpo JSON de la solicitud:

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

Para enviar tu solicitud, expande una de estas opciones:

Deberías recibir una respuesta JSON similar a la que se muestra a continuación:

{
  "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"
    }
  }
}
Toma nota del ENDPOINT_ID.

Python

Antes de probar este ejemplo, sigue las instrucciones de configuración para Python incluidas en la guía de inicio rápido de Vertex AI sobre cómo usar bibliotecas cliente. Para obtener más información, consulta la documentación de referencia de la API de Vertex AI Python.

Para autenticarte en Vertex AI, configura las credenciales predeterminadas de la aplicación. Si deseas obtener más información, consulta Configura la autenticación para un entorno de desarrollo 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"],
    ),
)

Reemplaza lo siguiente:

  • VERTEX_AI_PROJECT_ID: Es el ID del proyecto de Google Cloud en el que creas el extremo de predicción en línea
  • REGION: la región en la que usas Vertex AI
  • VERTEX_AI_ENDPOINT_NAME: el nombre visible del extremo de predicción en línea
  • ALLOWED_PROJECTS: una lista separada por comas de los IDs de los proyectos de Google Cloud, cada uno de ellos entre comillas. Por ejemplo, ["PROJECTID1", "PROJECTID2"] Si un proyecto no está contenido en esta lista, no podrás enviar solicitudes de predicción al extremo de Vertex AI desde él. Asegúrate de incluir VERTEX_AI_PROJECT_ID en esta lista para que puedas llamar al extremo desde el mismo proyecto en el que se encuentra.

Toma nota del ENDPOINT_ID al final del URI de extremo que se muestra:

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')

Implementar el modelo

Después de crear el extremo de predicción en línea con Private Service Connect habilitado, implementa tu modelo en él mediante los pasos descritos en Implementa un modelo en un extremo.

Obtén el URI del adjunto de servicio

Cuando implementas tu modelo, se crea un adjunto de servicio para el extremo de predicción en línea. Este adjunto de servicio representa el servicio de predicción en línea de Vertex AI que se expone a tu red de VPC. Ejecuta el comando gcloud ai endpoints describe para obtener el URI del adjunto de servicio.

  1. Enumera solo el valor serviceAttachment de los detalles del extremo:

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

    Reemplaza lo siguiente:

    • ENDPOINT_ID: es el ID del extremo de predicción en línea
    • VERTEX_AI_PROJECT_ID: el ID del proyecto de Google Cloud en el que creaste el extremo de predicción en línea
    • REGION: la región para esta solicitud.

    El resultado es similar al siguiente:

    serviceAttachment: projects/ac74a9f84c2e5f2a1-tp/regions/us-central1/serviceAttachments/gkedpm-c6e6a854a634dc99472bb802f503c1
    
  2. Toma nota de la string completa en el campo serviceAttachment. Este es el URI del adjunto de servicio.

Cree una regla de reenvío.

Puedes reservar una dirección IP interna y crear una regla de reenvío con esa dirección. Para crear la regla de reenvío, necesitas el URI del adjunto de servicio del paso anterior.

  1. Si deseas reservar una dirección IP interna para la regla de reenvío, usa el comando gcloud compute addresses create:

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

    Reemplaza lo siguiente:

    • ADDRESS_NAME: un nombre para la dirección IP interna
    • VPC_PROJECT_ID: el ID del proyecto de Google Cloud que aloja tu red de VPC. Si el extremo de predicción en línea y la regla de reenvío de Private Service Connect están alojados en el mismo proyecto, usa VERTEX_AI_PROJECT_ID para este parámetro.
    • REGION: La región de Google Cloud en la que se creará la regla de reenvío de Private Service Connect
    • SUBNETWORK: el nombre de la subred de VPC que contiene la dirección IP
    • INTERNAL_IP_ADDRESS: la dirección IP interna que se reservará. Este parámetro es opcional.

      • Si se especifica este parámetro, la dirección IP debe estar dentro del rango de direcciones IP principal de la subred. La dirección IP puede ser una dirección RFC 1918 o una subred con rangos que no sean RFC.
      • Si se omite este parámetro, se asigna una dirección IP interna de forma automática.
      • Para obtener más información, consulta Reserva una dirección IPv4 o IPv6 interna estática nueva.
  2. Para verificar que la dirección IP esté reservada, usa el comando gcloud compute addresses list:

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

    En la respuesta, verifica que aparezca un estado RESERVED para la dirección IP.

  3. Para crear la regla de reenvío y apuntarla al adjunto del servicio de predicción en línea, usa el 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
    

    Reemplaza lo siguiente:

    • PSC_FORWARDING_RULE_NAME: un nombre para la regla de reenvío
    • VPC_NETWORK_NAME: el nombre de la red de VPC en la que se creará el extremo.
    • SERVICE_ATTACHMENT_URI: el adjunto de servicio que anotaste antes
  4. Para verificar que el adjunto de servicio acepte el extremo, usa el comando gcloud compute forwarding-rules describe:

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

    En la respuesta, verifica que aparezca un estado ACCEPTED para el campo pscConnectionStatus.

Opcional: Obtén la dirección IP interna

Si no especificaste un valor para INTERNAL_IP_ADDRESS cuando creaste la regla de reenvío, puedes obtener la dirección que se asignó de forma automática mediante el 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

Reemplaza lo siguiente:

  • VERTEX_AI_PROJECT_ID: El ID de tu proyecto
  • REGION: el nombre de la región para esta solicitud.

Obtén predicciones en línea

Obtener predicciones en línea desde un extremo con Private Service Connect es similar a obtener predicciones en línea de extremos públicos, excepto por las siguientes consideraciones:

  • La solicitud debe enviarse desde un proyecto que se especificó en projectAllowlist cuando se creó el extremo de predicción en línea.
  • Si el acceso global no está habilitado, la solicitud debe enviarse desde la misma región.
  • Si quieres obtener predicciones con REST, debes conectarte mediante la dirección IP estática del extremo, a menos que crees un registro DNS para la dirección IP interna. Por ejemplo, debes enviar tus solicitudes predict al siguiente extremo:

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

    Reemplaza INTERNAL_IP_ADDRESS por la dirección IP interna que reservaste antes.

  • El siguiente es un ejemplo de cómo puedes enviar la solicitud de predicción con 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)
    

    Reemplaza PATH_TO_INPUT_FILE por una ruta de acceso a un archivo JSON que contiene la entrada de la solicitud.

Opcional: Crea un registro DNS para la dirección IP interna

Te recomendamos que crees un registro DNS para que puedas obtener predicciones en línea de tu extremo sin necesidad de especificar la dirección IP interna.

Para obtener más información, consulta Otras formas de configurar DNS.

  1. Crea una zona del DNS privada con el comando gcloud dns managed-zones create. Esta zona está asociada con la red de VPC en la que se creó la regla de reenvío.

    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."
    
    

    Reemplaza lo siguiente:

    • ZONE_NAME: el nombre de la zona del DNS
  2. Para crear un registro DNS en la zona, usa el 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
    

    Reemplaza lo siguiente:

    • VERTEX_AI_PROJECT_NUMBER: El número de proyecto para tu proyecto VERTEX_AI_PROJECT_ID. Puedes ubicar este número de proyecto en la consola de Google Cloud. Para obtener más información, consulta Identificación de proyectos.
    • INTERNAL_IP_ADDRESS: la dirección IP interna de tu extremo de predicción en línea

    Ahora puedes enviar tus solicitudes predict a las siguientes ubicaciones:

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

El siguiente es un ejemplo de cómo puedes enviar la solicitud de predicción a la zona DNS mediante 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)

Reemplaza DNS_NAME por el nombre de DNS que especificaste en el comando gcloud dns record-sets create.

Limitaciones

Los extremos de Vertex AI con Private Service Connect están sujetos a las siguientes limitaciones:

  • No se admite la salida privada desde el extremo del extremo. Debido a que las reglas de reenvío de Private Service Connect son unidireccionales, no se puede acceder a otras cargas de trabajo privadas de Google Cloud dentro del contenedor.
  • No se puede cambiar la configuración de projectAllowlist de un extremo.
  • No se admite el registro de acceso.
  • No se admite el registro de solicitudes y respuestas.
  • Vertex Explainable AI no es compatible.

Limitaciones de la vista previa

En la vista previa, se aplican las siguientes limitaciones adicionales:

  • Si anulas la implementación de todos los modelos de Private Service Connect y los vuelves a implementar, debes volver a crear la regla de reenvío, incluso si el nombre del adjunto de servicio es el mismo.
  • Todos los extremos deben tener la misma configuración de projectAllowlist.

¿Qué sigue?