Tests de référence pour la prédiction en ligne Vertex AI avec HEY

1. Introduction

Ce tutoriel explique comment créer et évaluer des métriques de prédiction en ligne Cloud Monitoring lorsque vous effectuez des tests de référence dans us-central1 et us-west1 vers un point de terminaison de prédiction déployé dans la région us-central1 à l'aide de l'outil de performances Web HEY.

Ce que vous allez faire

Vous allez configurer un réseau VPC nommé aiml-vpc, qui se compose de sous-réseaux et d'instances dans us-west1 et us-central1. Ces sous-réseaux permettront de générer du trafic à l'aide de HEY ciblant une prédiction en ligne et un modèle déployé dans la région us-central1.

Private Service Connect et le DNS privé sont également intégrés dans ce tutoriel pour montrer comment les environnements sur site et multicloud peuvent tirer parti de PSC pour accéder à googleapis.

Cloud Monitoring et Network Intelligence seront utilisés dans ce tutoriel pour valider le trafic généré entre HEY et la prédiction en ligne. Bien que les étapes décrites dans ce tutoriel soient déployées dans un VPC, vous pouvez vous appuyer sur les étapes pour déployer et obtenir une référence de Vertex APIS à partir d'environnements sur site ou multicloud. L'architecture réseau comprend les composants ci-dessous:

dd5c102ce1ab0150.png

Vous trouverez ci-dessous les détails de ce cas d'utilisation:

  1. Accéder à la prédiction en ligne dans la région us-central1 à partir d'une instance GCE de la région us-west1 en utilisant HEY
  2. Vérifier que PSC est utilisé pour accéder à l'API Vertex
  3. Courbes avec HEY pendant 5 minutes
  4. Valider la latence à l'aide de Cloud Monitoring
  5. Valider la latence interrégionale à l'aide de Network Intelligence
  6. Accéder à la prédiction en ligne dans la région us-central1 à partir d'une instance GCE située dans la zone us-central1 en utilisant HEY
  7. Vérifier que PSC est utilisé pour accéder à l'API Vertex
  8. Courbes avec HEY pendant 5 minutes
  9. Valider la latence à l'aide de Cloud Monitoring
  10. Valider la latence intrarégionale à l'aide de Network Intelligence

Points abordés

  • Établir un point de terminaison Private Service Connect
  • Générer une charge vers une prédiction en ligne à l'aide de HEY
  • Créer des métriques Vertex AI à l'aide de Cloud Monitoring
  • Comment utiliser l'intelligence réseau pour valider des latence interrégionale

Prérequis

  • Projet Google Cloud

Autorisations IAM

Administrateur de réseaux Compute

Administrateur de réseaux Compute

Éditeur de l'Annuaire des services

Administrateur DNS

Lecteur Network Management

2. Avant de commencer

Mettre à jour le projet pour qu'il soit compatible avec le tutoriel

Ce tutoriel utilise $variables pour faciliter l'implémentation de la configuration gcloud dans Cloud Shell.

Dans Cloud Shell, effectuez les opérations suivantes:

gcloud config list project
gcloud config set project [YOUR-PROJECT-NAME]
projectid=YOUR-PROJECT-NAME
echo $projectid

3. Configuration de aiml-vpc

Créer le VPC aiml-vpc

gcloud services enable networkmanagement.googleapis.com

Dans Cloud Shell, effectuez les opérations suivantes:

gcloud compute networks create aiml-vpc --project=$projectid --subnet-mode=custom

Dans Cloud Shell, activez l'API Network Management pour Network Intelligence.

gcloud services enable networkmanagement.googleapis.com

Créer le sous-réseau de notebooks gérés par l'utilisateur

Dans Cloud Shell, créez le sous-réseau "workbench-subnet".

gcloud compute networks subnets create workbench-subnet --project=$projectid --range=172.16.10.0/28 --network=aiml-vpc --region=us-central1 --enable-private-ip-google-access

Dans Cloud Shell, créez le sous-réseau "us-west1-subnet".

gcloud compute networks subnets create us-west1-subnet --project=$projectid --range=192.168.10.0/28 --network=aiml-vpc --region=us-west1

Dans Cloud Shell, créez le sous-réseau "us-central1-subnet".

gcloud compute networks subnets create us-central1-subnet --project=$projectid --range=192.168.20.0/28 --network=aiml-vpc --region=us-central1

Configuration Cloud Router et NAT

Dans ce tutoriel, Cloud NAT est utilisé pour télécharger des packages logiciels, car l'instance GCE ne possède pas d'adresse IP externe. Cloud NAT fournit des fonctionnalités NAT de sortie, ce qui signifie que les hôtes Internet ne sont pas autorisés à communiquer avec un notebook géré par l'utilisateur, ce qui le rend plus sûr.

Dans Cloud Shell, créez le routeur cloud régional us-west1.

gcloud compute routers create cloud-router-us-west1-aiml-nat --network aiml-vpc --region us-west1

Dans Cloud Shell, créez la passerelle cloud nat régionale us-west1.

gcloud compute routers nats create cloud-nat-us-west1 --router=cloud-router-us-west1-aiml-nat --auto-allocate-nat-external-ips --nat-all-subnet-ip-ranges --region us-west1

Dans Cloud Shell, créez le routeur cloud régional us-central1.

gcloud compute routers create cloud-router-us-central1-aiml-nat --network aiml-vpc --region us-central1

Dans Cloud Shell, créez la passerelle Cloud NAT régionale, us-central1.

gcloud compute routers nats create cloud-nat-us-central1 --router=cloud-router-us-central1-aiml-nat --auto-allocate-nat-external-ips --nat-all-subnet-ip-ranges --region us-central1

4. Créer le point de terminaison Private Service Connect

Dans la section suivante, vous allez créer un point de terminaison Private Service Connect (PSC) qui permettra d'accéder à l'API Vertex depuis le site aiml-vpc.

Depuis Cloud Shell

gcloud compute addresses create psc-ip \
    --global \
    --purpose=PRIVATE_SERVICE_CONNECT \
    --addresses=100.100.10.10 \
    --network=aiml-vpc

Stocker "pscendpointip" pour la durée de l'atelier

pscendpointip=$(gcloud compute addresses list --filter=name:psc-ip --format="value(address)")

echo $pscendpointip

Créer le point de terminaison PSC

Depuis Cloud Shell

gcloud compute forwarding-rules create pscvertex \
    --global \
    --network=aiml-vpc \
    --address=psc-ip \
    --target-google-apis-bundle=all-apis

Lister les points de terminaison Private Service Connect configurés

Depuis Cloud Shell

gcloud compute forwarding-rules list  \
--filter target="(all-apis OR vpc-sc)" --global

Décrire les points de terminaison Private Service Connect configurés

Depuis Cloud Shell

gcloud compute forwarding-rules describe \
    pscvertex --global

5. Créer un compte de service pour les instances GCE

Pour fournir un niveau de contrôle précis à l'API Vertex, un compte de service géré par l'utilisateur est requis. Il sera appliqué aux instances west et centrale. Une fois générés, les autorisations du compte de service peuvent être modifiées en fonction des exigences métier. Dans ce tutoriel, les rôles suivants seront appliqués au compte de service géré par l'utilisateur, Vertex-sa:

Vous devez l'API Service Account avant de continuer.

Dans Cloud Shell, créez le compte de service.

gcloud iam service-accounts create vertex-gce-sa \
    --description="service account for vertex" \
    --display-name="vertex-sa"

Dans Cloud Shell, mettez à jour le compte de service avec le rôle "Administrateur d'instances Compute"

gcloud projects add-iam-policy-binding $projectid --member="serviceAccount:vertex-gce-sa@$projectid.iam.gserviceaccount.com" --role="roles/compute.instanceAdmin.v1"

Dans Cloud Shell, mettez à jour le compte de service avec le rôle Utilisateur Vertex AI

gcloud projects add-iam-policy-binding $projectid --member="serviceAccount:vertex-gce-sa@$projectid.iam.gserviceaccount.com" --role="roles/aiplatform.user"

6. Créer un compte de service géré par l'utilisateur (notebook)

Dans la section suivante, vous allez créer un compte de service géré par l'utilisateur qui sera associé au Vertex Workbench (notebook) utilisé dans le tutoriel.

Dans le tutoriel, les règles suivantes seront appliquées au compte de service:

Dans Cloud Shell, créez le compte de service.

gcloud iam service-accounts create user-managed-notebook-sa \
    --display-name="user-managed-notebook-sa"

Dans Cloud Shell, mettez à jour le compte de service avec le rôle "Administrateur Storage".

gcloud projects add-iam-policy-binding $projectid --member="serviceAccount:user-managed-notebook-sa@$projectid.iam.gserviceaccount.com" --role="roles/storage.admin"

Dans Cloud Shell, mettez à jour le compte de service avec le rôle Utilisateur Vertex AI.

gcloud projects add-iam-policy-binding $projectid --member="serviceAccount:user-managed-notebook-sa@$projectid.iam.gserviceaccount.com" --role="roles/aiplatform.user"

Dans Cloud Shell, attribuez le rôle "Administrateur Artifact Registry" au compte de service.

gcloud projects add-iam-policy-binding $projectid --member="serviceAccount:user-managed-notebook-sa@$projectid.iam.gserviceaccount.com" --role="roles/artifactregistry.admin"

Dans Cloud Shell, listez le compte de service et notez l'adresse e-mail qui sera utilisée pour créer le notebook géré par l'utilisateur.

gcloud iam service-accounts list

7. Créer les instances de test

Dans la section suivante, vous allez créer des instances de test pour effectuer des tests de référence à partir des régions us-west1 et us-central1.

Dans Cloud Shell, créez le client west-.

gcloud compute instances create west-client \
    --zone=us-west1-a \
    --image-family=debian-11 \
    --image-project=debian-cloud \
    --subnet=us-west1-subnet \
    --scopes=https://www.googleapis.com/auth/cloud-platform \
    --no-address \
    --shielded-secure-boot --service-account=vertex-gce-sa@$projectid.iam.gserviceaccount.com \
    --metadata startup-script="#! /bin/bash
      sudo apt-get update
      sudo apt-get install tcpdump dnsutils -y"

Dans Cloud Shell, créez le client central.

gcloud compute instances create central-client \
    --zone=us-central1-a \
    --image-family=debian-11 \
    --image-project=debian-cloud \
    --subnet=us-central1-subnet \
    --scopes=https://www.googleapis.com/auth/cloud-platform \
    --no-address \
    --shielded-secure-boot --service-account=vertex-gce-sa@$projectid.iam.gserviceaccount.com \
    --metadata startup-script="#! /bin/bash
      sudo apt-get update
      sudo apt-get install tcpdump dnsutils -y"

Pour autoriser IAP à se connecter à vos instances de VM, créez une règle de pare-feu qui:

  • S'applique à toutes les instances de VM auxquelles vous souhaitez rendre accessibles à l'aide d'IAP.
  • Autorise le trafic entrant provenant de la plage d'adresses IP 35.235.240.0/20. Cette plage contient toutes les adresses IP utilisées par IAP pour le transfert TCP.

Dans Cloud Shell, créez la règle de pare-feu IAP.

gcloud compute firewall-rules create ssh-iap-vpc \
    --network aiml-vpc \
    --allow tcp:22 \
    --source-ranges=35.235.240.0/20

8. Créer un notebook géré par l'utilisateur

l'API Notebooks.

Dans la section suivante, vous allez créer un notebook géré par l'utilisateur qui intègre le compte de service créé précédemment, user-managed-notebook-sa.

Dans Cloud Shell, créez l'instance du client privé.

gcloud notebooks instances create workbench-tutorial \
      --vm-image-project=deeplearning-platform-release \
      --vm-image-family=common-cpu-notebooks \
      --machine-type=n1-standard-4 \
      --location=us-central1-a \
      --subnet-region=us-central1 \
      --shielded-secure-boot \
      --subnet=workbench-subnet \
      --no-public-ip    --service-account=user-managed-notebook-sa@$projectid.iam.gserviceaccount.com

Accédez à Vertex AI → Workbench pour afficher le notebook déployé.

b02fcb9b07dca06a.png

9. Déployer le modèle et la prédiction en ligne

Dans la section suivante, utilisez l'atelier de programmation Vertex AI:Utiliser des routines de prédiction personnalisées avec Sklearn pour prétraiter et post-traiter les données de prédiction, commencez par la section 7, puisque vous avez déjà créé un notebook à l'étape précédente. Une fois le modèle déployé, revenez au tutoriel pour commencer la section suivante.

ee68b7ba0cfd2746.png

10. Créer un tableau de bord de surveillance personnalisé pour la prédiction en ligne

La prédiction en ligne crée un tableau de bord de surveillance par défaut sous VERTEX AI → PRÉDICTION EN LIGNE → NOM DU POINT DE TERMINAISON (diamonds-cpr_endpoint). Cependant, pour nos tests, nous devons définir une heure de début et de fin, c'est pourquoi un tableau de bord personnalisé est nécessaire.

Dans la section suivante, vous allez créer des métriques Cloud Monitoring pour obtenir des mesures de latence basées sur l'accès régional au point de terminaison de prédiction en ligne. Vous pourrez ainsi valider les différentes latences lors de l'accès à un point de terminaison situé dans la région us-central1 à partir d'instances GCE déployées dans les régions us-west1 et us-central.

Dans ce tutoriel, nous utiliserons les métriques "predict_latencies". Des métriques supplémentaires sont disponibles dans aiplatform.

Métrique

Description

prediction/online/prediction_latencies

Latence de la prédiction en ligne du modèle déployé.

Créer un graphique pour la métrique "prediction_latencies"

Dans la console Cloud, accédez à MONITORING → Explorateur de métriques.

536668ab0b29d77.png

Insérez la métrique prediction/online/prediction_latencies et choisissez les options suivantes, puis sélectionnez "Apply" (Appliquer).

c1edd34208cb5ee2.png

Mettez à jour Grouper par selon l'option suivante, sélectionnez Enregistrer le graphique.

e180a5d8a044b6e1.png

d2ecd6677a3b34e0.png

Sélectionnez "Enregistrer". Vous serez invité à sélectionner un tableau de bord. Sélectionnez Nouveau tableau de bord et indiquez un nom.

e29a39dc941c8599.png

Tableau de bord personnalisé Vertex

Dans la section suivante, vérifiez que le tableau de bord personnalisé Vertex s'affiche au bon moment.

Accédez à MONITORING → Tableau de bord, puis sélectionnez le tableau de bord personnalisé Vertex et l'heure. Vérifiez que votre fuseau horaire est correct.

f43ebed798ce1147.png

Veillez à développer la légende pour obtenir une vue Tableau.

61ffeef22e067ca9.png

Exemple d'affichage étendu:

9027e8785c023129.png

11. Créer un DNS privé pour le point de terminaison PSC

Créez une zone DNS privée dans aiml-vpc pour résoudre tout googleapis vers l'adresse IP du point de terminaison PSC 100.100.10.10.

Dans Cloud Shell, créez une zone DNS privée.

gcloud dns --project=$projectid managed-zones create psc-googleapis --description="Private Zone to resolve googleapis to a PSC endpoint" --dns-name="googleapis.com." --visibility="private" --networks="https://www.googleapis.com/compute/v1/projects/$projectid/global/networks/aiml-vpc"

Dans Cloud Shell, créez l'enregistrement A qui associe *. googleapis.com à l'adresse IP PSC.

gcloud dns --project=$projectid record-sets create *.googleapis.com. --zone="psc-googleapis" --type="A" --ttl="300" --rrdatas="100.100.10.10"

12. Les variables de test

Hey permet aux utilisateurs finaux de personnaliser les tests en fonction des exigences du réseau et de l'application. Pour les besoins de ce tutoriel, nous utiliserons l'option détaillée ci-dessous avec un exemple de chaîne d'exécution:

c == 1 nœud de calcul

z == Durée

m == Méthode HTTP POST

D == corps de la requête HTTP à partir du fichier instances.json

n == Nombre de requêtes à exécuter La valeur par défaut est 200.

Exemple de chaîne curl avec HEY (exécution non requise)

user@us-central$ ./hey_linux_amd64 -c 1 -z 1m -m POST -D instances.json  -H "Authorization: Bearer $(gcloud auth print-access-token)" -H "Content-Type: application/json" https://us-central1-aiplatform.googleapis.com/v1/projects/${projectid$}/locations/us-central1/endpoints/${ENDPOINT_ID}:predict

13. Obtenir l'ID de prédiction

Obtenez l'ID du point de terminaison de la prédiction en ligne dans la console Cloud. Vous en aurez besoin lors des étapes suivantes.

Accédez à VERTEX AI → PRÉDICTION EN LIGNE.

ce4d4a88a3fa2345.png

14. Télécharger et exécuter HEY (us-west1)

Dans la section suivante, vous allez vous connecter au client West pour télécharger et exécuter HEY sur la prédiction en ligne située dans la région us-central1.

Depuis Cloud Shell, connectez-vous au client west-client et téléchargez HEY.

gcloud compute ssh west-client --project=$projectid --zone=us-west1-a --tunnel-through-iap

Depuis le système d'exploitation, téléchargez HEY et mettez à jour les autorisations.

wget https://hey-release.s3.us-east-2.amazonaws.com/hey_linux_amd64
chmod +x hey_linux_amd64

À partir du système d'exploitation, créez les variables suivantes:

gcloud config list project
gcloud config set project [YOUR-PROJECT-NAME]
projectid=YOUR-PROJECT-NAME
echo $projectid
ENDPOINT_ID="insert-your-endpoint-id-here"

Exemple :

ENDPOINT_ID="2706243362607857664"

Dans la section suivante, vous allez créer un fichier instances.json à l'aide de l'éditeur vi ou de nano, puis insérer la chaîne de données utilisée pour obtenir une prédiction à partir du modèle déployé.

À partir du système d'exploitation west-client, créez un fichier instances.json avec la chaîne de données ci-dessous:

{"instances": [
  [0.23, 'Ideal', 'E', 'VS2', 61.5, 55.0, 3.95, 3.98, 2.43],
  [0.29, 'Premium', 'J', 'Internally Flawless', 52.5, 49.0, 4.00, 2.13, 3.11]]}

Exemple :

user@west-client:$ more instances.json 
{"instances": [
  [0.23, 'Ideal', 'E', 'VS2', 61.5, 55.0, 3.95, 3.98, 2.43],
  [0.29, 'Premium', 'J', 'Internally Flawless', 52.5, 49.0, 4.00, 2.13, 3.11]]}

user@west-client:$

Pré-test

À partir de l'OS, exécutez une commande curl pour vérifier que le modèle et le point de terminaison de prédiction fonctionnent correctement. Notez l'adresse IP du point de terminaison PSC dans le journal détaillé et le message HTTP/2 200 indiquant la réussite de l'opération.

curl -v -X POST -H "Authorization: Bearer $(gcloud auth print-access-token)" -H "Content-Type: application/json" https://us-central1-aiplatform.googleapis.com/v1/projects/${projectid}/locations/us-central1/endpoints/${ENDPOINT_ID}:predict -d @instances.json

Par exemple, notez l'adresse IP PSC utilisée pour accéder à la prédiction et un résultat positif.

user@west-client:$ curl -v -X POST -H "Authorization: Bearer $(gcloud auth print-access-token)" -H "Content-Type: application/json" https://us-central1-aiplatform.googleapis.com/v1/projects/${projectid}/locations/us-central1/endpoints/${ENDPOINT_ID}:predict -d @instances.json
Note: Unnecessary use of -X or --request, POST is already inferred.
*   Trying 100.100.10.10:443...
* Connected to us-central1-aiplatform.googleapis.com (100.100.10.10) port 443 (#0)
* ALPN, offering h2
* ALPN, offering http/1.1
* successfully set certificate verify locations:
*  CAfile: /etc/ssl/certs/ca-certificates.crt
*  CApath: /etc/ssl/certs
* TLSv1.3 (OUT), TLS handshake, Client hello (1):
* TLSv1.3 (IN), TLS handshake, Server hello (2):
* TLSv1.3 (IN), TLS handshake, Encrypted Extensions (8):
* TLSv1.3 (IN), TLS handshake, Certificate (11):
* TLSv1.3 (IN), TLS handshake, CERT verify (15):
* TLSv1.3 (IN), TLS handshake, Finished (20):
* TLSv1.3 (OUT), TLS change cipher, Change cipher spec (1):
* TLSv1.3 (OUT), TLS handshake, Finished (20):
* SSL connection using TLSv1.3 / TLS_AES_256_GCM_SHA384
* ALPN, server accepted to use h2
* Server certificate:
*  subject: CN=upload.video.google.com
*  start date: Jul 31 08:22:19 2023 GMT
*  expire date: Oct 23 08:22:18 2023 GMT
*  subjectAltName: host "us-central1-aiplatform.googleapis.com" matched cert's "*.googleapis.com"
*  issuer: C=US; O=Google Trust Services LLC; CN=GTS CA 1C3
*  SSL certificate verify ok.
* Using HTTP2, server supports multi-use
* Connection state changed (HTTP/2 confirmed)
* Copying HTTP/2 data in stream buffer to connection buffer after upgrade: len=0
* Using Stream ID: 1 (easy handle 0x55a9f38b42c0)
> POST /v1/projects/new-test-project-396322/locations/us-central1/endpoints/2706243362607857664:predict HTTP/2
> Host: us-central1-aiplatform.googleapis.com
> user-agent: curl/7.74.0
> accept: */*
> authorization: Bearer ya29.c.b0Aaekm1LqrcaOlWFFwuEOWX_tZVXXvJgN_K-u5_hFyEAYXAi3AnBEBwwtHS8dweW_P2QGfdyFfa31nMT_6BaKBI0mC9IsfzfIiUwXc8u2yJt01gTUSJpCmGAFKZKidRMgkPYivVYCnuymzdYbRAWacIe__StkRzI9UeQOGN3jNIeESr80AdH12goaxCFXWaNWxoYRfGVhekEgUcsKs7t1OhOM-937gy4YGkXcXa8sGuHWRqF5bnulYlTqlxqQ2aAxMTrQg2lwUWRGCmGhPrym7rXJq7oim0DkAJSbAarl1qFuz0PPfNXeHGbs13zY2r1giV7u8_w4Umj_Q5M7H9fTkq7EiqnLzqRkOHXismYL368P1jOUBYM__krFQt4M3X9RJa0g01tOw3FnOh27BmUqlFQ1J2h14JZpx215Q3xzRvgfJ5iW5YYSkv67uZRQk4V04naOUXyc0plzWuVOjj4nor3fYvkS_oW0IyxJoBjeXR16Vnvln8c04svWX9dt7eobczFvBOm9nVdh4lVp8qxbp__2WtMvc1QVg6y-2i6lRpbvmyp1oadxVRjxV1e0wiQFSe-qqsinJu3bnnaMbxdU2cu5j26o8o8Xpgo0SF1UM0b1WX84iatbWpdFSphZm1llwmRagMzcFBW0aBk-i35_bXSbzwURgMfY6Qbyb9Rv9y0F-Maf34I0WxiMldv2uc57nej7dVl9OSm_Ohnro-i9zcpq9fxo9soYVB8WjaZOUjauk4znstc2_6y4atcVVsQBkeU674biR567Ri3M74Jfv4MrrF02ObfrJRdB7UJ4MU_9kWW-kYeeJzoci15UqYV0f_yJgReBwQa66Supmebee2Sn2nku6xZkRMu5Mz55mXuva0XWrpIbor7WckSsXwUFbf7rj5ipa4mOOyf2hJe1Rq0x6yeBaariRzXrhfm5bBpFBU73-zd-IekvOji0ZJQSkk0o6gpX_794Jny7j14aQJ8VxezcFpZUztimYhMnRhlO2lqms1h0h48
> content-type: application/json
> content-length: 158
> 
* Connection state changed (MAX_CONCURRENT_STREAMS == 100)!
* We are completely uploaded and fine
< HTTP/2 200 
< x-vertex-ai-internal-prediction-backend: harpoon
< content-type: application/json; charset=UTF-8
< date: Sun, 20 Aug 2023 03:51:54 GMT
< vary: X-Origin
< vary: Referer
< vary: Origin,Accept-Encoding
< server: scaffolding on HTTPServer2
< cache-control: private
< x-xss-protection: 0
< x-frame-options: SAMEORIGIN
< x-content-type-options: nosniff
< accept-ranges: none
< 
{
  "predictions": [
    "$479.0",
    "$586.0"
  ],
  "deployedModelId": "3587550310781943808",
  "model": "projects/884291964428/locations/us-central1/models/6829574694488768512",
  "modelDisplayName": "diamonds-cpr",
  "modelVersionId": "1"
}
* Connection #0 to host us-central1-aiplatform.googleapis.com left intact

Exécuter "HEY"

Depuis l'OS, exécutez "HEY" en activant un test de référence de 10 minutes.

./hey_linux_amd64 -c 1 -z 10m -m POST -D instances.json  -H "Authorization: Bearer $(gcloud auth print-access-token)" -H "Content-Type: application/json" https://us-central1-aiplatform.googleapis.com/v1/projects/$projectid/locations/us-central1/endpoints/${ENDPOINT_ID}:predict

15. Hey Validation (us-west1)

Maintenant que vous avez exécuté Hey à partir d'une instance de calcul dans la région us-west1, évaluez les résultats à partir des éléments suivants:

  • Résultats HEY
  • Tableau de bord personnalisé Vertex
  • Informations sur le réseau

Résultats HEY

À partir du système d'exploitation, validons les résultats HEY sur la base d'une exécution de 10 minutes.

17,5826 requêtes par seconde

99% en 0,0686 s | 68 ms

10 550 réponses avec code d'état 200

user@west-client:$ ./hey_linux_amd64 -c 1 -z 10m -m POST -D instances.json  -H "Authorization: Bearer $(gcloud auth print-access-token)" -H "Content-Type: application/json" https://us-central1-aiplatform.googleapis.com/v1/projects/$projectid/locations/us-central1/endpoints/${ENDPOINT_ID}:predict

Summary:
  Total:        600.0243 secs
  Slowest:      0.3039 secs
  Fastest:      0.0527 secs
  Average:      0.0569 secs
  Requests/sec: 17.5826
  

Response time histogram:
  0.053 [1]     |
  0.078 [10514] |■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
  0.103 [16]    |
  0.128 [4]     |
  0.153 [3]     |
  0.178 [1]     |
  0.203 [0]     |
  0.229 [2]     |
  0.254 [1]     |
  0.279 [5]     |
  0.304 [3]     |


Latency distribution:
  10% in 0.0546 secs
  25% in 0.0551 secs
  50% in 0.0559 secs
  75% in 0.0571 secs
  90% in 0.0596 secs
  95% in 0.0613 secs
  99% in 0.0686 secs

Details (average, fastest, slowest):
  DNS+dialup:   0.0000 secs, 0.0527 secs, 0.3039 secs
  DNS-lookup:   0.0000 secs, 0.0000 secs, 0.0116 secs
  req write:    0.0000 secs, 0.0000 secs, 0.0002 secs
  resp wait:    0.0567 secs, 0.0526 secs, 0.3038 secs
  resp read:    0.0001 secs, 0.0001 secs, 0.0696 secs

Status code distribution:
  [200] 10550 responses

Tableau de bord personnalisé Vertex

Accédez à MONITORING → Tableau de bord, puis sélectionnez "Tableau de bord personnalisé Vertex". Saisissez 10 min ou indiquez les heures de début et de fin. Vérifiez que votre fuseau horaire est correct.

4102b1d0438c78e3.png

Si vous examinez la définition des latences de prédiction, vous pouvez constater une métrique côté serveur qui mesure le temps total pour répondre à la requête des clients après avoir obtenu une réponse du modèle.

  • Durée totale de la latence: temps total passé par une requête dans le service, qui correspond à la latence du modèle plus la latence de surcharge.

En revanche, HEY est une métrique côté client qui prend en compte les paramètres suivants:

Requête client + Latence totale (y compris la latence du modèle) + Réponse du client

Intelligence réseau

Examinons maintenant la latence réseau interrégionale signalée par Network Intelligence pour vous faire une idée de la latence us-west1 vers us-central1 signalée par Google Cloud Platform.

Accédez à Cloud Console Network Intelligence → Performance Dashboard, puis sélectionnez les options suivantes, détaillées dans la capture d'écran ci-dessous, qui indiquent une latence comprise entre 32 et 39 ms.

aade5f757115721.png

Résumé de la référence us-west1 HEY

La comparaison des rapports "Latence totale" des outils de test donne une latence à peu près identique à celle indiquée par HEY. La latence interrégionale constitue l'essentiel de la latence. Voyons comment fonctionne le client central dans la prochaine série de tests.

Outil de latence

Durée

Intelligence réseau: latence de us-west1 vers us-central1

~32 à 39 ms

Cloud Monitoring: latence totale de la prédiction [99%]

34,58 ms (99 p)

Latence totale signalée par Google

~ 66,58 à 73,58 ms

Répartition de la latence côté client HEY

68ms (99p)

16. Télécharger et exécuter HEY (us-central1)

Dans la section suivante, vous allez vous connecter au client central pour télécharger et exécuter HEY sur la prédiction en ligne située dans la région us-central1.

Depuis Cloud Shell, connectez-vous au client central et téléchargez HEY.

gcloud compute ssh central-client --project=$projectid --zone=us-central1-a --tunnel-through-iap

Depuis le système d'exploitation, téléchargez HEY et mettez à jour les autorisations.

wget https://hey-release.s3.us-east-2.amazonaws.com/hey_linux_amd64
chmod +x hey_linux_amd64

À partir du système d'exploitation, créez les variables suivantes:

gcloud config list project
gcloud config set project [YOUR-PROJECT-NAME]
projectid=YOUR-PROJECT-NAME
echo $projectid
ENDPOINT_ID="insert-your-endpoint-id-here"

Exemple :

ENDPOINT_ID="2706243362607857664"

Dans la section suivante, vous allez créer un fichier instances.json à l'aide de l'éditeur vi ou de nano, puis insérer la chaîne de données utilisée pour obtenir une prédiction à partir du modèle déployé.

À partir du système d'exploitation west-client, créez un fichier instances.json avec la chaîne de données ci-dessous:

{"instances": [
  [0.23, 'Ideal', 'E', 'VS2', 61.5, 55.0, 3.95, 3.98, 2.43],
  [0.29, 'Premium', 'J', 'Internally Flawless', 52.5, 49.0, 4.00, 2.13, 3.11]]}

Exemple :

user@west-client:$ more instances.json 
{"instances": [
  [0.23, 'Ideal', 'E', 'VS2', 61.5, 55.0, 3.95, 3.98, 2.43],
  [0.29, 'Premium', 'J', 'Internally Flawless', 52.5, 49.0, 4.00, 2.13, 3.11]]}

user@west-client:$

Pré-tester

À partir de l'OS, exécutez une commande curl pour vérifier que le modèle et le point de terminaison de prédiction fonctionnent correctement. Notez l'adresse IP du point de terminaison PSC dans le journal détaillé et le message HTTP/2 200 indiquant la réussite de l'opération.

curl -v -X POST -H "Authorization: Bearer $(gcloud auth print-access-token)" -H "Content-Type: application/json" https://us-central1-aiplatform.googleapis.com/v1/projects/${projectid}/locations/us-central1/endpoints/${ENDPOINT_ID}:predict -d @instances.json

Par exemple, notez l'adresse IP PSC utilisée pour accéder à la prédiction et un résultat positif.

user@central-client:~$ curl -v -X POST -H "Authorization: Bearer $(gcloud auth print-access-token)" -H "Content-Type: application/json" https://us-central1-aiplatform.googleapis.com/v1/projects/${projectid}/locations/us-central1/endpoints/${ENDPOINT_ID}:predict -d @instances.json
Note: Unnecessary use of -X or --request, POST is already inferred.
*   Trying 100.100.10.10:443...
* Connected to us-central1-aiplatform.googleapis.com (100.100.10.10) port 443 (#0)
* ALPN, offering h2
* ALPN, offering http/1.1
* successfully set certificate verify locations:
*  CAfile: /etc/ssl/certs/ca-certificates.crt
*  CApath: /etc/ssl/certs
* TLSv1.3 (OUT), TLS handshake, Client hello (1):
* TLSv1.3 (IN), TLS handshake, Server hello (2):
* TLSv1.3 (IN), TLS handshake, Encrypted Extensions (8):
* TLSv1.3 (IN), TLS handshake, Certificate (11):
* TLSv1.3 (IN), TLS handshake, CERT verify (15):
* TLSv1.3 (IN), TLS handshake, Finished (20):
* TLSv1.3 (OUT), TLS change cipher, Change cipher spec (1):
* TLSv1.3 (OUT), TLS handshake, Finished (20):
* SSL connection using TLSv1.3 / TLS_AES_256_GCM_SHA384
* ALPN, server accepted to use h2
* Server certificate:
*  subject: CN=upload.video.google.com
*  start date: Jul 31 08:22:19 2023 GMT
*  expire date: Oct 23 08:22:18 2023 GMT
*  subjectAltName: host "us-central1-aiplatform.googleapis.com" matched cert's "*.googleapis.com"
*  issuer: C=US; O=Google Trust Services LLC; CN=GTS CA 1C3
*  SSL certificate verify ok.
* Using HTTP2, server supports multi-use
* Connection state changed (HTTP/2 confirmed)
* Copying HTTP/2 data in stream buffer to connection buffer after upgrade: len=0
* Using Stream ID: 1 (easy handle 0x559b57adc2c0)
> POST /v1/projects/new-test-project-396322/locations/us-central1/endpoints/2706243362607857664:predict HTTP/2
> Host: us-central1-aiplatform.googleapis.com
> user-agent: curl/7.74.0
> accept: */*
> authorization: Bearer ya29.c.b0Aaekm1KWqq-CIXuL6f1cx9d9jHHquQq9tlSV1oVZ1y3TACi82JFFZRwsagVY7MMovycsU4PLkt9MDMkNngxZE5RzXcS-AoaUaQf1tPT9-_JMTlFI6wCcR7Yr9MeRF5AZblr_k52ZZgEZKeYGcrXoGiqGQcAAwFtHiEVAkUhLuyukteXbMoep1JM9E0zFblJj7Z0yOCMJYBH-6XHcIDYnOKpStMVBR2wcTDbnFrCE08HXbvRnQVcENatTBoI9FzSVL1ORwqUiCcdfnTSjpIXcyD-W82d6ZHjGX_RUhfnH7RPfOJqkuU8pOovwoCjq_jvM_wJUfPuQnBKHp5rxbYxPE349DMBql62po2SWFguuFo-a2eoUnb8-FQeBZqan65zgV0lexR73gZlm071y9grlXv3fmJUo7vlj5W-7_-FJXaWWg8iWc6rmjYeO1Wz2h_8qnmojkX9xSUciI6JfmwdgMWwtvwJb63ppSmdwf8oagrYiQlpMzgRI6rekbRzg-1WOBeOf5nRg5vtxUMSc9iRaoarO5XwFX8vt7rxOUBvbXYVWmo3bsdhzsS9VopMwgMlxgcIJg7bq7_F3iapB-nRjfjfhZWpR83cWIkI2Wb9f89inpsxtYjZbbzdWkZvRB8FYSsY8F8tcpiVoWWyQWZiph9z7O59fF9irWY2gtUnbFcJJ_ZcYztjlMQaR45y42ZflkM3Qn668bzge3Y3hmVI1s6ZSmxxq6m27hoMwVn21R07Y613jwljmaFJ5V8MwkR6yvFhYngrh_JrhRUQtSSMh02Rz25wMfv7g8Fiqymr-12viM4btIFjXZBM3XFqzvso_rw1omI1yYWofmbaBYggpegpJBzSeqVUZe791agjVtiMUkyjXFy__9gI0Qk9ZUarI4p25SvS4I1hX4YyBk6ol32Z5zIsVr1Seff__aklm6M2Mlkumd7nurm46hjOIoOhFpfFxrQ6yivnhYapBOJMYirgbZvigvI3dom1fnmt0-ktmRxp69w7Uzzy
> content-type: application/json
> content-length: 158
> 
* Connection state changed (MAX_CONCURRENT_STREAMS == 100)!
* We are completely uploaded and fine
< HTTP/2 200 
< x-vertex-ai-internal-prediction-backend: harpoon
< date: Sun, 20 Aug 2023 22:25:31 GMT
< content-type: application/json; charset=UTF-8
< vary: X-Origin
< vary: Referer
< vary: Origin,Accept-Encoding
< server: scaffolding on HTTPServer2
< cache-control: private
< x-xss-protection: 0
< x-frame-options: SAMEORIGIN
< x-content-type-options: nosniff
< accept-ranges: none
< 
{
  "predictions": [
    "$479.0",
    "$586.0"
  ],
  "deployedModelId": "3587550310781943808",
  "model": "projects/884291964428/locations/us-central1/models/6829574694488768512",
  "modelDisplayName": "diamonds-cpr",
  "modelVersionId": "1"
}
* Connection #0 to host us-central1-aiplatform.googleapis.com left intact

Exécutez "HEY"

Depuis l'OS, exécutez "HEY" en activant un test de référence de 10 minutes.

./hey_linux_amd64 -c 1 -z 10m -m POST -D instances.json  -H "Authorization: Bearer $(gcloud auth print-access-token)" -H "Content-Type: application/json" https://us-central1-aiplatform.googleapis.com/v1/projects/$projectid/locations/us-central1/endpoints/${ENDPOINT_ID}:predict

17. Hey Validation (us-central1)

Maintenant que vous avez exécuté Hey à partir d'une instance de calcul dans la région us-central1, évaluez les résultats à partir des éléments suivants:

  • Résultats HEY
  • Tableau de bord personnalisé Vertex
  • Informations sur le réseau

Résultats !

À partir du système d'exploitation, validons les résultats HEY sur la base d'une exécution de 10 minutes.

44.9408 requêtes par seconde

99% en 0,0353 s | 35 ms

Réponses 26965 avec le code d'état 200

devops_user_1_deepakmichael_alto@central-client:~$ ./hey_linux_amd64 -c 1 -z 10m -m POST -D instances.json  -H "Authorization: Bearer $(gcloud auth print-access-token)" -H "Content-Type: application/json" https://us-central1-aiplatform.googleapis.com/v1/projects/$projectid/locations/us-central1/endpoints/${ENDPOINT_ID}:predict

Summary:
  Total:        600.0113 secs
  Slowest:      0.3673 secs
  Fastest:      0.0184 secs
  Average:      0.0222 secs
  Requests/sec: 44.9408
  

Response time histogram:
  0.018 [1]     |
  0.053 [26923] |■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
  0.088 [25]    |
  0.123 [4]     |
  0.158 [0]     |
  0.193 [1]     |
  0.228 [9]     |
  0.263 [1]     |
  0.298 [0]     |
  0.332 [0]     |
  0.367 [1]     |


Latency distribution:
  10% in 0.0199 secs
  25% in 0.0205 secs
  50% in 0.0213 secs
  75% in 0.0226 secs
  90% in 0.0253 secs
  95% in 0.0273 secs
  99% in 0.0353 secs

Details (average, fastest, slowest):
  DNS+dialup:   0.0000 secs, 0.0184 secs, 0.3673 secs
  DNS-lookup:   0.0000 secs, 0.0000 secs, 0.0079 secs
  req write:    0.0000 secs, 0.0000 secs, 0.0007 secs
  resp wait:    0.0220 secs, 0.0182 secs, 0.3672 secs
  resp read:    0.0002 secs, 0.0001 secs, 0.0046 secs

Status code distribution:
  [200] 26965 responses

Tableau de bord personnalisé Vertex

Accédez à MONITORING → Tableau de bord, sélectionnez Vertex Custom Dashboard, puis saisissez "10m". ou vos heures de début et de fin. Vérifiez que votre fuseau horaire est correct.

Les latences de prédiction pour les 10 dernières minutes donnent 30,533 ms.

Si vous examinez la définition des latences de prédiction, vous pouvez constater une métrique côté serveur qui mesure le temps total pour répondre à la requête des clients après avoir obtenu une réponse du modèle.

  • Durée totale de la latence: temps total passé par une requête dans le service, qui correspond à la latence du modèle plus la latence de surcharge.

En revanche, HEY est une métrique côté client qui prend en compte les paramètres suivants:

Requête client + Latence totale (y compris la latence du modèle) + Réponse du client

Intelligence réseau

Examinons maintenant la latence réseau intrarégionale signalée par Network Intelligence pour vous faire une idée de la latence us-central1 signalée par Google Cloud Platform.

Accédez à Cloud Console Network Intelligence → Performance Dashboard, puis sélectionnez les options suivantes, détaillées dans la capture d'écran ci-dessous, qui indiquent une latence de 0,2 à 0,8 ms.

eaa84848c3185fde.png

HEY us-central1 : récapitulatif de référence

La comparaison de la latence totale signalée par les outils de test permet d'obtenir une latence inférieure à celle du client Ouest, en raison des points de terminaison de calcul (client central) et des points de terminaison Vertex (modèle et prédiction en ligne) dans la même région.

Outil de latence

Durée

Intelligence réseau: latence intrarégionale us-central1

~.2 à 0,8 ms

Cloud Monitoring: latence totale de la prédiction [99%]

30,533 ms (99p)

Latence totale signalée par Google

~30,733 à 31,333 ms

Latence côté client HEY

35 ms (99p)

18. Félicitations

Félicitations ! Vous avez déployé et validé HEY pour obtenir une latence de référence de prédiction côté client en combinant Cloud Monitoring et Network Intelligence. D'après les tests effectués, vous avez pu identifier un point de terminaison de prédiction situé dans la région us-central pouvant être diffusé entre régions, même si une latence a été observée.

Cosmopup trouve les tutoriels géniaux !

e6d3675ca7c6911f.jpeg

19. Effectuer un nettoyage

Dans Cloud Shell, supprimez les composants du tutoriel.

gcloud compute instances delete central-client --zone=us-central1-a -q

gcloud compute instances delete west-client --zone=us-west1-a -q

gcloud compute instances delete workbench-tutorial --zone=us-central1-a -q

gcloud compute forwarding-rules delete pscvertex --global --quiet 

gcloud compute addresses delete psc-ip --global --quiet

gcloud compute networks subnets delete workbench-subnet --region=us-central1 --quiet 

gcloud compute networks subnets delete us-west1-subnet --region=us-west1 --quiet

gcloud compute networks subnets delete us-central1-subnet --region=us-central1 --quiet

gcloud compute routers delete cloud-router-us-west1-aiml-nat --region=us-west1 --quiet

gcloud compute routers delete cloud-router-us-central1-aiml-nat --region=us-central1 --quiet

gcloud compute firewall-rules delete  ssh-iap-vpc --quiet

gcloud dns record-sets delete *.googleapis.com. --zone=psc-googleapis --type=A --quiet

gcloud dns managed-zones delete psc-googleapis --quiet

gcloud compute networks delete aiml-vpc --quiet

gcloud storage rm -r gs://$projectid-cpr-bucket

Les éléments suivants ont été supprimés de la console Cloud:

Dossier Artifact Registry

99c17044e2f80919.png

À partir de Vertex AI Model Registry, annulez le déploiement du modèle:

f5b315f089ae6283.png

Dans Vertex AI Online Prediction, supprimez le point de terminaison.

9b58688a5037de84.png

Et ensuite ?

Découvrez quelques-uns de ces tutoriels...

Complément d'informations et Vidéos

Documents de référence