Utiliser des points de terminaison privés pour la prédiction en ligne

L'utilisation de points de terminaison privés pour diffuser des prédictions en ligne avec Vertex AI fournit une connexion sécurisée à faible latence au service de prédiction en ligne Vertex AI. Ce guide explique comment configurer des points de terminaison privés sur Vertex AI en utilisant l'appairage de réseaux VPC pour appairer votre réseau avec le service de prédiction en ligne Vertex AI.

Présentation

Avant de diffuser des prédictions en ligne avec des points de terminaison privés, vous devez configurer l'accès aux services privés pour créer des connexions d'appairage entre votre réseau et Vertex AI. Si vous l'avez déjà configuré, vous pouvez utiliser vos connexions d'appairage existantes.

Ce guide couvre les tâches suivantes :

  • Vérifier l'état de vos connexions d'appairage existantes.
  • Vérifier que les API nécessaires sont activées
  • Créer un point de terminaison privé.
  • Déployer un modèle sur un point de terminaison privé.
    • Un seul modèle est accepté par point de terminaison privé. Cela diffère d'un point de terminaison public Vertex AI, dans lequel vous pouvez répartir le trafic sur plusieurs modèles déployés sur un même point de terminaison.
    • Le point de terminaison privé est compatible avec les modèles tabulaires et personnalisés AutoML.
  • Envoyer une prédiction à un point de terminaison privé.
  • Nettoyer les ressources.

Vérifier l'état des connexions d'appairage existantes

Si vous disposez de connexions d'appairage existantes avec Vertex AI, vous pouvez les répertorier pour vérifier leur état :

gcloud compute networks peerings list --network NETWORK_NAME

Vous devriez voir que l'état de vos connexions d'appairage est ACTIVE. En savoir plus sur les connexions d'appairage actives

Activer les API nécessaires

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

Créer un point de terminaison privé

Pour créer un point de terminaison privé, ajoutez l'option --network lorsque vous créez un point de terminaison à l'aide de Google Cloud CLI :

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

Remplacez NETWORK_NAME par le nom complet du réseau :

projects/PROJECT_NUMBER/global/networks/NETWORK_NAME

Si vous créez le point de terminaison sans spécifier de réseau, vous créez un point de terminaison public.

Limites des points de terminaison privés

Les points de terminaison privés présentent les limites suivantes :

  • Les points de terminaison privés ne sont actuellement pas compatibles avec la répartition du trafic. Pour contourner ce problème, vous pouvez créer manuellement une répartition du trafic en déployant votre modèle sur plusieurs points de terminaison privés, et en répartissant le trafic entre les URL de prédiction obtenues pour chaque point de terminaison privé.
  • Les points de terminaison privés ne sont pas compatibles avec SSL/TLS.
  • Pour activer la journalisation des accès sur un point de terminaison privé, envoyez un e-mail à l'adresse vertex-ai-feedback@google.com.
  • Vous ne pouvez utiliser qu'un seul réseau pour tous les points de terminaison privés d'un projet Google Cloud. Si vous souhaitez passer à un autre réseau, veuillez contacter vertex-ai-feedback@google.com.
  • Nous vous recommandons vivement d'effectuer de nouvelles tentatives côté client en cas d'erreurs récupérables. Il peut s'agir des erreurs suivantes :
    • Réponse vide (code d'erreur HTTP 0), probablement en raison d'une connexion transitoire interrompue.
    • Les codes d'erreur HTTP 5xx indiquant que le service peut être temporairement indisponible.
  • Pour le code d'erreur HTTP 429 qui indique que le système est actuellement surchargé, envisagez de ralentir le trafic pour limiter ce problème au lieu de réessayer.
  • Les requêtes de prédiction provenant de PredictionServiceClient dans la bibliothèque cliente Python Vertex AI ne sont pas acceptées.

Surveiller les points de terminaison privés

Le tableau de bord des métriques vous permet d'inspecter la disponibilité et la latence du trafic envoyé à un point de terminaison privé.

Pour personnaliser la surveillance, interrogez les deux métriques suivantes dans Cloud Monitoring :

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

    Nombre de réponses de prédiction. Vous pouvez filtrer cette métrique par deployed_model_id ou par code de réponse HTTP.

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

    Latence de la requête de prédiction en millisecondes. Vous pouvez filtrer cette métrique par deployed_model_id, uniquement pour les requêtes réussies.

Découvrez comment sélectionner, interroger et afficher ces métriques dans l'explorateur de métriques.

Déployer un modèle

Vous pouvez importer un nouveau modèle ou déployer un modèle que vous avez déjà importé. Pour importer un nouveau modèle, utilisez gcloud ai models upload. Pour en savoir plus, consultez la page Importer des modèles dans Vertex AI.

  1. Pour déployer un modèle sur un point de terminaison privé, consultez le guide sur le déploiement des modèles. Outre la répartition du trafic et l'activation manuelle de la journalisation des accès, vous pouvez utiliser n'importe quelle autre option disponible pour le déploiement de modèles personnalisés. Reportez-vous aux limites des points de terminaison privés pour en savoir plus sur les différences avec les points de terminaison publics.

  2. Après avoir déployé le point de terminaison, vous pouvez obtenir l'URI de prédiction à partir des métadonnées de votre point de terminaison privé.

    1. Si vous possédez le nom à afficher de votre point de terminaison privé, exécutez la commande suivante pour obtenir l'ID du point de terminaison :

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

      Sinon, pour afficher l'ID de point de terminaison et le nom à afficher pour tous vos points de terminaison, exécutez la commande suivante :

      gcloud ai endpoints list --region=REGION
      
    2. Enfin, pour obtenir l'URI de prédiction, exécutez la commande suivante :

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

Format d'URI de prédiction privée

L'URI de prédiction diffère de celui des points de terminaison privés par rapport aux points de terminaison publics Vertex AI :

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

Si vous choisissez d'annuler le déploiement du modèle actuel et d'en déployer un nouveau, le nom de domaine est réutilisé, mais le chemin d'accès inclut un ID de modèle déployé différent.

Envoyer une prédiction à un point de terminaison privé

  1. Créez une instance Compute Engine dans votre réseau VPC. Veillez à créer l'instance dans le même réseau VPC que celui que vous avez appairé à Vertex AI.

  2. Connectez-vous en SSH à votre instance Compute Engine et installez votre client de prédiction, le cas échéant. Sinon, vous pouvez utiliser curl.

  3. Lorsque vous effectuez des prédictions, utilisez l'URL de prédiction obtenue à partir du déploiement du modèle. Dans cet exemple, vous envoyez la requête de votre client de prédiction dans votre instance Compute Engine sur le même réseau VPC :

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

    Dans cet exemple de requête, PATH_TO_JSON_FILE correspond au chemin d'accès de votre requête de prédiction, enregistré sous forme de fichier JSON. Exemple : example-request.json.

Effectuer un nettoyage des ressources

Vous pouvez annuler le déploiement des modèles et supprimer les points de terminaison privés de la même manière que pour les modèles publics et les points de terminaison. Vous ne pouvez créer des points de terminaison privés que sur un seul réseau par projet Google Cloud, même si vous supprimez ces ressources vous-même par la suite. Si vous devez passer à un autre réseau, veuillez envoyer un e-mail à l'adresse vertex-ai-feedback@google.com.

Exemple : Tester des points de terminaison privés dans un VPC partagé

Cet exemple utilise deux projets Google Cloud avec un réseau VPC partagé :

  • Le projet hôte héberge le réseau VPC partagé.
  • Le projet client héberge une instance Compute Engine sur laquelle vous exécutez un client de prédiction, tel que curl, ou votre propre client REST dans l'instance Compute Engine, afin d'envoyer des requêtes de prédiction.

Lorsque vous créez l'instance Compute Engine dans le projet client, elle doit se trouver dans le sous-réseau personnalisé du réseau VPC partagé du projet hôte et dans la même région que le modèle.

  1. Créez les connexions d'appairage pour l'accès aux services privés dans le projet hôte. Exécuter 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. Créez le point de terminaison dans le projet client en utilisant le nom du réseau du projet hôte. Exécuter 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. Envoyez des requêtes de prédiction à l'aide du client de prédiction du projet client.

Exemple : Points de terminaison privés avec des sous-réseaux non-RFC 1918

Cet exemple utilise des adresses non-RFC 1918 pour créer des points de terminaison privés.

  1. Réservez des plages d'adresses IP pour les nœuds, les pods et les services. Les plages d'adresses IP des nœuds doivent provenir de la plage RFC 1918.

  2. Créez la connexion d'appairage pour l'accès aux services privés à l'aide des plages réservées.

    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. Créez le point de terminaison, en spécifiant les plages réservées pour les nœuds, les pods et les services. RequestedIpRangeConfig ne peut être spécifié qu'à partir de l'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. Envoyez des requêtes de prédiction à l'aide du client de prédiction du projet client.