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

1. Introduction

Ce tutoriel vous 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 entre us-central1 et us-west1 vers un point de terminaison de prédiction déployé dans us-central1 à l'aide de l'outil de performances Web HEY.

Ce que vous allez faire

Vous allez configurer un réseau VPC appelé "aiml-vpc", composé de sous-réseaux et d'instances dans us-west1 et us-central1, qui sera utilisé pour générer du trafic à l'aide de HEY ciblant une prédiction en ligne et un modèle déployé dans us-central1.

Private Service Connect et le DNS privé sont également intégrés au 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 le tutoriel pour valider le trafic généré par HEY vers la prédiction en ligne. Bien que les étapes décrites dans le tutoriel soient déployées dans un VPC, vous pouvez les utiliser pour déployer et obtenir une référence des API Vertex à partir d'environnements sur site ou multicloud. L'architecture réseau se compose des éléments suivants :

dd5c102ce1ab0150.png

Vous trouverez ci-dessous des informations sur le cas d'utilisation :

  1. Accéder à la prédiction en ligne dans us-central1 à partir d'instances GCE dans us-west1 à l'aide de HEY
  2. Vérifier que PSC est utilisé pour accéder à l'API Vertex
  3. Effectuer une requête curl avec HEY pendant 5 minutes
  4. Valider la latence à l'aide de Cloud Monitoring
  5. Valider la latence entre les régions à l'aide de Network Intelligence
  6. Accéder à la prédiction en ligne dans us-central1 à partir d'une instance GCE dans us-central1 à l'aide de HEY
  7. Vérifier que PSC est utilisé pour accéder à l'API Vertex
  8. Effectuer une requête curl 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 de la charge pour une prédiction en ligne à l'aide de HEY
  • Créer des métriques Vertex AI à l'aide de Cloud Monitoring
  • Utiliser Network Intelligence pour valider la latence intra- et inter-ré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 des $variables pour faciliter l'implémentation de la configuration gcloud dans Cloud Shell.

Dans Cloud Shell, procédez comme suit :

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

3. Configuration d'aiml-vpc

Créer le VPC aiml-vpc

gcloud services enable networkmanagement.googleapis.com

Dans Cloud Shell, procédez comme suit :

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 de Cloud Router et de NAT

Cloud NAT est utilisé dans le tutoriel 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 à initier une communication avec un notebook géré par l'utilisateur, ce qui le rend plus sécurisé.

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 sera utilisé pour accéder à l'API Vertex à partir du VPC aiml-vpc.

Depuis Cloud Shell

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

Stockez "pscendpointip" pendant toute 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 contrôle précis à l'API Vertex, un compte de service géré par l'utilisateur est requis. Il sera appliqué aux instances ouest et centre. Une fois générées, les autorisations du compte de service peuvent être modifiées en fonction des besoins de l'entreprise. Dans le 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'instance 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é à 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, mettez à jour le compte de service avec le rôle Administrateur Artifact Registry.

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 lors de la création du 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 depuis us-west1 et us-central1.

Dans Cloud Shell, créez le client ouest.

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 permettre à IAP de 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 être accessible à l'aide d'IAP.
  • Autorise le trafic entrant à partir de la plage d'adresses IP 35.235.240.0/20. Cette plage contient toutes les adresses IP qu'IAP utilise 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, créez un notebook géré par l'utilisateur qui intègre le compte de service user-managed-notebook-sa créé précédemment.

Dans Cloud Shell, créez l'instance de 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 votre 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 programmationVertex AI : utiliser des routines de prédiction personnalisées avec Sklearn pour prétraiter et post-traiter les données pour les prédictions. Commencez par la section 7,car 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). Toutefois, pour nos tests, nous devons définir une heure de début et de fin. Nous avons donc besoin d'un tableau de bord personnalisé.

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 dans us-central1 à partir d'instances GCE déployées dans us-west1 et us-central.

Pour ce tutoriel, nous utiliserons les métriques prediction_latencies. D'autres métriques sont disponibles dans aiplatform.

Métrique

Description

prediction/online/prediction_latencies

Latence de 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, puis sélectionnez les options suivantes et cliquez sur "Appliquer".

c1edd34208cb5ee2.png

Mettez à jour "Grouper par" en fonction de l'option suivante, puis 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 donnez-lui un nom.

e29a39dc941c8599.png

Tableau de bord personnalisé Vertex

Dans la section suivante, vérifiez que le tableau de bord personnalisé Vertex affiche la bonne heure.

Accédez à MONITORING → Tableau de bord, puis sélectionnez "Tableau de bord personnalisé Vertex" et la période. Vérifiez que votre fuseau horaire est correct.

f43ebed798ce1147.png

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

61ffeef22e067ca9.png

Exemple de vue détaillée :

9027e8785c023129.png

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

Créez une zone DNS privée dans le VPC aiml-vpc pour résoudre tous les googleapis en 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. Hey testing variables

Hey permet aux utilisateurs finaux de personnaliser les tests en fonction des exigences du réseau et des applications. Pour ce tutoriel, nous allons utiliser 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 == HTTP method 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 de votre point de terminaison de prédiction en ligne depuis la console Cloud. Vous l'utiliserez 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 vous connecterez au client ouest pour télécharger et exécuter HEY sur la prédiction en ligne située dans us-central1.

Dans Cloud Shell, connectez-vous au client ouest et téléchargez HEY.

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

Téléchargez HEY depuis l'OS et mettez à jour les autorisations.

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

À partir de l'OS, 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 nano, puis insérer la chaîne de données utilisée pour obtenir une prédiction à partir du modèle déployé.

À partir de l'OS 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 requête curl pour valider le bon fonctionnement du modèle et du point de terminaison de prédiction. Notez l'adresse IP du point de terminaison PSC dans le journal détaillé et le code HTTP/2 200 indiquant la réussite.

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

Exemple : notez l'adresse IP du PSC utilisée pour accéder à la prédiction et le 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

À partir de l'OS, exécutez HEY pour effectuer 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 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 de l'OS, validons les résultats HEY en fonction de l'exécution de 10 minutes.

17,5826 requêtes par seconde

99 % en 0,0686 s | 68 ms

10 550 réponses avec le 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 à SURVEILLANCE → Tableau de bord, puis sélectionnez "Tableau de bord personnalisé Vertex". Saisissez "10 min" ou indiquez l'heure de début et de fin. Vérifiez que votre fuseau horaire est correct.

4102b1d0438c78e3.png

Si vous consultez la définition des latences de prédiction, vous verrez qu'il s'agit d'une métrique côté serveur qui mesure le temps total nécessaire pour répondre à la requête du client 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 excessive.

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 client

Network Intelligence

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

Accédez à la console Cloud > Intelligence réseau > Tableau de bord des performances, puis sélectionnez les options détaillées dans la capture d'écran ci-dessous, qui indiquent une latence de 32 à 39 ms.

aade5f757115721.png

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

La comparaison des rapports sur la latence totale générés par les outils de test donne une latence à peu près identique à celle signalée par HEY. La latence entre les régions représente la majeure partie de la latence. Voyons comment le client centralisé se comporte dans la prochaine série de tests.

Outil de latence

Durée

Latence de Network Intelligence : us-west1 vers us-central1

32 à 39 ms

Cloud Monitoring : latence totale de prédiction [99e centile]

34,58 ms (99e centile)

Latence totale signalée par Google

~ 66,58 à 73,58 ms

Distribution de la latence côté client HEY

68 ms (99e centile)

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

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

Dans 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

Téléchargez HEY depuis l'OS et mettez à jour les autorisations.

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

À partir de l'OS, 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 nano, puis insérer la chaîne de données utilisée pour obtenir une prédiction à partir du modèle déployé.

À partir de l'OS 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 requête curl pour valider le bon fonctionnement du modèle et du point de terminaison de prédiction. Notez l'adresse IP du point de terminaison PSC dans le journal détaillé et le code HTTP/2 200 indiquant la réussite.

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

Exemple : notez l'adresse IP du PSC utilisée pour accéder à la prédiction et le 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écuter HEY

À partir de l'OS, exécutez HEY pour effectuer 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 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 HEY

À partir de l'OS, validons les résultats HEY en fonction de l'exécution de 10 minutes.

44,9408 requêtes par seconde

99 % en 0,0353 s | 35 ms

26 965 réponses 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" (Tableau de bord personnalisé Vertex), puis saisissez "10m". ou vos heures de début et de fin. Vérifiez que votre fuseau horaire est correct.

La latence de prédiction pour les 10 dernières minutes est de 30,533 ms.

Si vous consultez la définition des latences de prédiction, vous verrez qu'il s'agit d'une métrique côté serveur qui mesure le temps total nécessaire pour répondre à la requête du client 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 excessive.

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 client

Network Intelligence

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

Accédez à la console Cloud Console, puis à Intelligence réseau → Tableau de bord des performances. Sélectionnez ensuite les options détaillées dans la capture d'écran ci-dessous, qui indiquent une latence de 0,2 à 0,8 ms.

eaa84848c3185fde.png

Récapitulatif des références HEY us-central1

La comparaison de la latence totale signalée par les outils de test donne une latence inférieure à celle du client ouest, en raison des points de terminaison de calcul (central-client) et 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

~0,2 à 0,8 ms

Cloud Monitoring : latence totale de prédiction [99e centile]

30,533 ms (99e centile)

Latence totale signalée par Google

~30,733 à 31,333 ms

Latence côté client HEY

35 ms (99e centile)

18. Félicitations

Félicitations, vous avez déployé et validé HEY pour obtenir la latence de référence de prédiction côté client à l'aide de Cloud Monitoring et de Network Intelligence. D'après les tests, vous avez identifié qu'un point de terminaison de prédiction dans us-central peut être diffusé entre les régions, mais une latence a été observée.

Cosmopup pense que les tutoriels sont 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

Dans la console Cloud, supprimez les éléments suivants :

Dossier Artifact Registry

99c17044e2f80919.png

Dans 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 :

Lectures et vidéos complémentaires

Documents de référence