Usa extremos privados para la predicción en línea

El uso de extremos privados para entregar predicciones en línea con Vertex AI proporciona una conexión segura de latencia baja con el servicio de predicción en línea de Vertex AI. En esta guía, se muestra cómo configurar extremos privados en Vertex AI mediante el intercambio de tráfico entre redes de VPC para intercambiar tráfico entre tu red con el servicio de predicción en línea de Vertex AI.

Descripción general

Antes de entregar predicciones en línea con extremos privados, debes configurar el acceso privado a servicios para crear conexiones de intercambio de tráfico entre tu red y Vertex AI. Si ya lo configuraste, puedes usar tus conexiones de intercambio de tráfico existentes.

En esta guía, se abarcan las siguientes tareas:

  • Verificar el estado de las conexiones de intercambio de tráfico existentes.
  • Verifica que las API necesarias estén habilitadas.
  • Crear un extremo privado.
  • Implementar un modelo en un extremo privado.
    • Solo se admite un modelo por extremo privado. Esto es diferente de un extremo público de Vertex AI en el que puedes dividir el tráfico en varios modelos implementados en un extremo.
    • El extremo privado es compatible con los modelos tabulares y entrenados personalizados de AutoML.
  • Enviar una predicción a un extremo privado.
  • Limpia los recursos

Verifica el estado de las conexiones de intercambio de tráfico existentes

Si tienes conexiones de intercambio de tráfico existentes que usas con Vertex AI, puedes enumerarlas para verificar el estado:

gcloud compute networks peerings list --network NETWORK_NAME

Deberías ver que el estado de las conexiones de intercambio de tráfico es ACTIVE. Obtén más información sobre las conexiones de intercambio de tráfico activas.

Habilita las API necesarias

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

Crea un extremo privado

Para crear un extremo privado, agrega la marca --network cuando crees un extremo con la CLI de Google Cloud:

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

Reemplaza NETWORK_NAME por el nombre de red completamente calificado:

projects/PROJECT_NUMBER/global/networks/NETWORK_NAME

Si creas el extremo sin especificar una red, debes crear un extremo público.

Limitaciones de los extremos privados

Ten en cuenta las siguientes limitaciones para los extremos privados:

  • En este momento, los extremos privados no admiten la división del tráfico. Como solución alternativa, puedes crear una división de tráfico de forma manual si implementas el modelo en varios extremos privados y divides el tráfico entre las URL de predicción resultantes para cada extremo privado.
  • Los extremos privados no son compatibles con SSL/TLS.
  • Para habilitar el registro de acceso en un extremo privado, comunícate con vertex-ai-feedback@google.com.
  • Solo puedes usar una red para todos los extremos privados de un proyecto de Google Cloud. Si deseas cambiar a otra red, comunícate con vertex-ai-feedback@google.com.
  • Se recomienda volver a intentar el cliente en errores recuperables. Pueden incluir los siguientes errores:
    • Respuesta vacía (código de error HTTP 0), posiblemente debido a una conexión transitoria de interrupción.
    • Los códigos de error HTTP 5xx que indican que el servicio podría no estar disponible temporalmente.
  • Para el código de error HTTP 429 que indica que el sistema está sobrecargado, considera ralentizar el tráfico para mitigar este problema en lugar de volver a intentarlo.
  • No se admiten las solicitudes de predicción de PredictionServiceClient en la biblioteca cliente de Python de Vertex AI.

Supervisa extremos privados

Puedes usar el panel de métricas para inspeccionar la disponibilidad y la latencia del tráfico que se envía a un extremo privado.

Para personalizar la supervisión, consulta las siguientes dos métricas en Cloud Monitoring:

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

    La cantidad de respuestas de predicción. Puedes filtrar esta métrica por deployed_model_id o código de respuesta HTTP.

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

    La latencia de la solicitud de predicción en milisegundos. Puedes filtrar esta métrica por deployed_model_id, solo para solicitudes correctas.

Obtén más información sobre cómo seleccionar, consultar y mostrar estas métricas en el Explorador de métricas.

Implementa un modelo

Puedes importar un modelo nuevo o implementar uno existente que ya hayas subido. Para subir un modelo nuevo, usa gcloud ai models upload. Para obtener más información, consulta Importa modelos a Vertex AI.

  1. Para implementar un modelo en un extremo privado, consulta la guía sobre cómo implementar modelos. Además de la división del tráfico y la habilitación manual del registro de acceso, puedes usar cualquiera de las otras opciones disponibles para implementar modelos con entrenamiento personalizado. Consulta las limitaciones de los extremos privados para obtener más información sobre cómo se diferencian de los extremos públicos.

  2. Después de implementar el extremo, puedes obtener el URI de predicción de los metadatos de tu extremo privado.

    1. Si tienes el nombre visible de tu extremo privado, ejecuta este comando para obtener el ID del extremo:

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

      De lo contrario, para ver el ID del extremo y el nombre visible de todos tus extremos, ejecuta el siguiente comando:

      gcloud ai endpoints list --region=REGION
      
    2. Por último, para obtener el URI de predicción, ejecuta el siguiente comando:

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

Formato del URI de predicción privada

El URI de predicción se ve diferente para los extremos privados en comparación con los extremos públicos de Vertex AI:

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

Si eliges anular la implementación del modelo actual y volver a implementarlo con uno nuevo, el nombre de dominio se vuelve a usar, pero la ruta incluye un ID diferente del modelo implementado.

Envía una predicción a un extremo privado

  1. Crea una instancia de Compute Engine en tu red de VPC. Asegúrate de crear la instancia en la misma red de VPC que intercambiaste con Vertex AI.

  2. Establece una conexión SSH en tu instancia de Compute Engine y, luego, instala el cliente de predicción, si corresponde. De lo contrario, puedes usar cURL.

  3. Cuando realices predicciones, usa la URL de predicción que se obtuvo de la implementación del modelo. En este ejemplo, envías la solicitud desde tu cliente de predicción en tu instancia de Compute Engine en la misma red de VPC:

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

    En esta solicitud de ejemplo, PATH_TO_JSON_FILE es la ruta de tu solicitud de predicción, que se guardó como un archivo JSON. Por ejemplo, example-request.json

Limpia los recursos

Puedes anular la implementación de modelos y borrar extremos privados de la misma manera que con modelos y extremos públicos. Solo puedes crear extremos privados en una red por proyecto de Google Cloud, incluso si borras estos recursos por tu cuenta. Si necesitas cambiar a una red diferente, comunícate con vertex-ai-feedback@google.com.

Ejemplo: Prueba extremos privados en una VPC compartida

En este ejemplo, se usan dos proyectos de Google Cloud con una red de VPC compartida:

  • El proyecto host aloja la red de VPC compartida.
  • El proyecto cliente aloja una instancia de Compute Engine en la que ejecutas un cliente de predicción, como cURL, o tu propio cliente REST en la instancia de Compute Engine para enviar solicitudes de predicción.

Cuando creas la instancia de Compute Engine en el proyecto de cliente, debe estar dentro de la subred personalizada en la red de VPC compartida del proyecto host y en la misma región en la que se implementa el modelo.

  1. Crea las conexiones de intercambio de tráfico para el acceso privado a servicios en el proyecto host. Ejecuta 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. Crea el extremo en el proyecto de cliente mediante el nombre de red del proyecto host. Ejecuta 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. Envía solicitudes de predicción mediante el cliente de predicción dentro del proyecto de cliente.

Ejemplo: Extremos privados con subredes que no son RFC 1918

En este ejemplo, se usan direcciones que no son RFC 1918 para crear extremos privados.

  1. Reserva rangos IP para nodos, pods y servicios. Los rangos IP de los nodos deben ser del rango RFC 1918.

  2. Crea la conexión de intercambio de tráfico para el acceso privado a servicios mediante los rangos 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. Crea el extremo y especifica los rangos reservados para los nodos, los pods y los servicios. RequestIpRangeConfig solo se puede especificar desde la API de 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. Envía solicitudes de predicción mediante el cliente de predicción dentro del proyecto de cliente.