Usar puntos finales de acceso a servicios privados para la inferencia online

Usar endpoints de acceso a servicios privados para ofrecer inferencias online con Vertex AI proporciona una conexión segura y de baja latencia al servicio de inferencia online de Vertex AI. En esta guía se muestra cómo configurar el acceso a servicios privados en Vertex AI mediante el emparejamiento entre redes de VPC para emparejar tu red con el servicio de inferencia online de Vertex AI.

Información general

Antes de servir inferencias online con puntos finales privados, debes configurar el acceso a servicios privados para crear conexiones de emparejamiento entre tu red y Vertex AI. Si ya lo has configurado, puedes usar tus conexiones de peering.

En esta guía se explican las siguientes tareas:

  • Verificar el estado de las conexiones de peering.
  • Verificando que las APIs necesarias estén habilitadas.
  • Crear un endpoint privado.
  • Desplegar un modelo en un endpoint privado.
    • Solo se admite un modelo por endpoint privado. Esto es diferente de un endpoint público de Vertex AI, donde puedes dividir el tráfico entre varios modelos desplegados en un endpoint.
    • El endpoint privado admite modelos tabulares de AutoML y modelos entrenados personalizados.
  • Enviar una inferencia a un endpoint privado.
  • Limpiar recursos

Comprobar el estado de las conexiones de emparejamiento

Si tienes conexiones de peering que usas con Vertex AI, puedes enumerarlas para comprobar su estado:

gcloud compute networks peerings list --network NETWORK_NAME

Debería ver que el estado de sus conexiones de peering es ACTIVE. Más información sobre las conexiones de emparejamiento activas

Habilita las APIs necesarias

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

Crear un endpoint privado

Para crear un endpoint privado, añade la marca --network cuando crees un endpoint con la CLI de Google Cloud:

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

Sustituye NETWORK_NAME por el nombre de red completo:

projects/PROJECT_NUMBER/global/networks/NETWORK_NAME

Si creas el endpoint sin especificar una red, se creará un endpoint público.

Limitaciones de los endpoints privados

Ten en cuenta las siguientes limitaciones de los endpoints privados:

  • Los endpoints privados no admiten la división del tráfico. Como solución alternativa, puede crear una división del tráfico manualmente implementando su modelo en varios endpoints privados y dividiendo el tráfico entre las URLs de inferencia resultantes de cada endpoint privado.
  • Los endpoints privados no admiten SSL/TLS.
  • Para habilitar el registro de acceso en un endpoint privado, ponte en contacto con vertex-ai-feedback@google.com.
  • Solo puedes usar una red para todos los endpoints privados de un proyecto. Google Cloud Si quieres cambiar a otra red, ponte en contacto con vertex-ai-feedback@google.com.
  • Se recomienda encarecidamente reintentar en el lado del cliente cuando se produzcan errores recuperables. Puede que se produzcan los siguientes errores:
    • Respuesta vacía (código de error HTTP 0), posiblemente debido a una conexión interrumpida temporalmente.
    • Códigos de error HTTP 5xx que indican que el servicio podría no estar disponible temporalmente.
  • En el caso del código de error HTTP 429, que indica que el sistema está sobrecargado, te recomendamos que reduzcas el tráfico para mitigar este problema en lugar de volver a intentarlo.
  • No se admiten solicitudes de inferencia de PredictionServiceClient en la biblioteca de cliente de Python de Vertex AI.
  • El endpoint de acceso a servicios privados no admite modelos fundacionales ajustados. Para un modelo base ajustado, despliégalo mediante un punto final de Private Service Connect.

Monitorizar endpoints privados

Puedes usar el panel de métricas para inspeccionar la disponibilidad y la latencia del tráfico enviado a un endpoint privado.

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

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

    Número de respuestas de inferencia. Puede filtrar esta métrica por deployed_model_id o por código de respuesta HTTP.

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

    Latencia de la solicitud de inferencia en milisegundos. Puede filtrar esta métrica por deployed_model_id, solo en el caso de las solicitudes correctas.

Consulta cómo seleccionar, consultar y mostrar estas métricas en el explorador de métricas.

Desplegar un modelo

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

  1. Para desplegar un modelo en un endpoint privado, consulta la guía sobre despliegue de modelos. Además de dividir el tráfico y habilitar manualmente el registro de acceso, puedes usar cualquiera de las otras opciones disponibles para implementar modelos con entrenamiento personalizado. Consulta las limitaciones de los endpoints privados para obtener más información sobre las diferencias con los endpoints públicos.

  2. Una vez que hayas implementado el endpoint, podrás obtener el URI de inferencia de los metadatos de tu endpoint privado.

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

      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 y el nombre visible de todos tus endpoints, ejecuta el siguiente comando:

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

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

Formato del URI de inferencia privada

El URI de inferencia tiene un aspecto diferente en los endpoints privados que en los públicos de Vertex AI:

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

Si decides retirar el modelo actual y volver a implementarlo con otro, se reutilizará el nombre de dominio, pero la ruta incluirá un ID de modelo implementado diferente.

Enviar una inferencia a un endpoint privado

  1. Crea una instancia de Compute Engine en tu red de VPC. Crea la instancia en la misma red de VPC que has emparejado con Vertex AI.

  2. Conéctate a tu instancia de Compute Engine mediante SSH e instala tu cliente de inferencia, si procede. De lo contrario, puedes usar curl.

  3. Al hacer predicciones, usa la URL de inferencia obtenida del despliegue del modelo. En este ejemplo, vas a enviar la solicitud desde tu cliente de inferencia en tu instancia de Compute Engine en la misma red 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 a tu solicitud de inferencia, guardada como un archivo JSON. Por ejemplo, example-request.json.

Eliminar los recursos

Puedes anular el despliegue de modelos y eliminar puntos finales privados de la misma forma que con los modelos y puntos finales públicos.

Ejemplo: probar los endpoints privados en una VPC compartida

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

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

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

  1. Crea las conexiones de emparejamiento para el acceso a servicios privados en el proyecto host. Ejecutar 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 endpoint en el proyecto del cliente con el nombre de la red del proyecto del 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 inferencia mediante el cliente de inferencia del proyecto de cliente.