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:
Vous trouverez ci-dessous les détails de ce cas d'utilisation:
- 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
- Vérifier que PSC est utilisé pour accéder à l'API Vertex
- Courbes avec HEY pendant 5 minutes
- Valider la latence à l'aide de Cloud Monitoring
- Valider la latence interrégionale à l'aide de Network Intelligence
- 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
- Vérifier que PSC est utilisé pour accéder à l'API Vertex
- Courbes avec HEY pendant 5 minutes
- Valider la latence à l'aide de Cloud Monitoring
- 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
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
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é.
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.
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.
Insérez la métrique prediction/online/prediction_latencies et choisissez les options suivantes, puis sélectionnez "Apply" (Appliquer).
Mettez à jour Grouper par selon l'option suivante, sélectionnez Enregistrer le graphique.
Sélectionnez "Enregistrer". Vous serez invité à sélectionner un tableau de bord. Sélectionnez Nouveau tableau de bord et indiquez un nom.
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.
Veillez à développer la légende pour obtenir une vue Tableau.
Exemple d'affichage étendu:
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.
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.
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.
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.
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 !
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
À partir de Vertex AI Model Registry, annulez le déploiement du modèle:
Dans Vertex AI Online Prediction, supprimez le point de terminaison.
Et ensuite ?
Découvrez quelques-uns de ces tutoriels...
- Private Service Connect pour les API Google
- Vertex AI crée un notebook sécurisé géré par l'utilisateur
Complément d'informations et Vidéos
- Présentation de Private Service Connect
- Qu'est-ce que Private Service Connect ?
- Obtenir des prédictions à partir d'un modèle de ML
- Qu'est-ce que Vertex AI ?