Test di base delle previsioni online di Vertex AI con HEY

1. Introduzione

Questo tutorial ti mostrerà come creare e valutare le metriche di previsione online di Cloud Monitoring durante l'esecuzione di test di base su us-central1 e us-west1 su un endpoint di previsione di cui è stato eseguito il deployment in us-central1 utilizzando lo strumento per le prestazioni web HEY.

Cosa creerai

Configurerai una rete VPC denominata aiml-vpc composta da subnet e istanze in us-west1 e us-central1 che verranno utilizzate per generare traffico utilizzando HEY che ha come target una previsione online e un modello distribuito in us-central1.

Nel tutorial sono incorporati anche Private Service Connect e DNS privato per dimostrare come gli ambienti on-premise e multi-cloud possono sfruttare PSC per accedere a googleapis.

Nel tutorial verranno utilizzati Cloud Monitoring e Network Intelligence per convalidare il traffico generato da HEY verso la previsione online. Anche se il deployment dei passaggi descritti nel tutorial viene eseguito in un VPC, puoi sfruttare i passaggi per eseguire il deployment e ottenere una base di API Vertex da ambienti on-premise o multi-cloud. L'architettura di rete è costituita dai componenti riportati di seguito:

dd5c102ce1ab0150.png

Di seguito sono riportati i dettagli del caso d'uso:

  1. Accedi alla previsione online in us-central1 da un'istanza GCE in us-west1 utilizzando HEY
  2. Verifica che PSC venga utilizzata per accedere all'API Vertex
  3. Esegui curl con HEY per 5 minuti
  4. Convalida la latenza utilizzando Cloud Monitoring
  5. Convalida la latenza tra regioni utilizzando Network Intelligence
  6. Accedi alla previsione online in us-central1 da un'istanza GCE in us-central1 utilizzando HEY
  7. Verifica che PSC venga utilizzata per accedere all'API Vertex
  8. Esegui curl con HEY per 5 minuti
  9. Convalida la latenza utilizzando Cloud Monitoring
  10. Convalida la latenza tra regioni utilizzando Network Intelligence

Cosa imparerai a fare

  • Come stabilire un endpoint Private Service Connect
  • Come generare un carico per una previsione online utilizzando HEY
  • Creare metriche Vertex AI utilizzando Cloud Monitoring
  • Come utilizzare Network Intelligence per convalidare intra e latenza tra regioni

Che cosa ti serve

  • Progetto Google Cloud

Autorizzazioni IAM

Amministratore rete Compute

Amministratore rete Compute

Editor di Service Directory

Amministratore DNS

Visualizzatore gestione rete

2. Prima di iniziare

Aggiornare il progetto per supportare il tutorial

Questo tutorial utilizza $variables per facilitare l'implementazione della configurazione di gcloud in Cloud Shell.

All'interno di Cloud Shell, esegui queste operazioni:

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

3. configurazione aiml-vpc

Crea aiml-vpc

gcloud services abilita networkmanagement.googleapis.com

All'interno di Cloud Shell, esegui queste operazioni:

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

In Cloud Shell, abilita l'API di gestione della rete per Network Intelligence

gcloud services enable networkmanagement.googleapis.com

Crea la subnet del blocco note gestito dall'utente

All'interno di Cloud Shell, crea la subnet 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

All'interno di Cloud Shell, crea la subnet 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

All'interno di Cloud Shell, crea la subnet 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

Router Cloud e configurazione NAT

Nel tutorial viene utilizzato Cloud NAT per scaricare pacchetti software perché l'istanza GCE non ha un indirizzo IP esterno. Cloud NAT fornisce funzionalità NAT in uscita, pertanto agli host internet non è consentito avviare comunicazioni con un blocco note gestito dall'utente, rendendolo più sicuro.

All'interno di Cloud Shell, crea il router Cloud a livello di regione, us-west1.

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

All'interno di Cloud Shell, crea il gateway cloud nat regionale, 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

All'interno di Cloud Shell, crea il router Cloud a livello di regione, us-central1.

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

All'interno di Cloud Shell, crea il gateway cloud nat regionale, 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. Crea l'endpoint Private Service Connect

Nella sezione seguente creerai un endpoint Private Service Connect (PSC) che verrà utilizzato per accedere all'API Vertex da aiml-vpc.

Da Cloud Shell

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

Archivia "pscendpointip" per la durata del lab

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

echo $pscendpointip

Crea l'endpoint PSC

Da Cloud Shell

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

Elenca gli endpoint di Private Service Connect configurati

Da Cloud Shell

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

Descrivere gli endpoint di Private Service Connect configurati

Da Cloud Shell

gcloud compute forwarding-rules describe \
    pscvertex --global

5. Crea un account di servizio per le istanze GCE

Per fornire un livello di controllo preciso all'API Vertex, è necessario un account di servizio gestito dall'utente che verrà applicato alle istanze centrali e a ovest. Una volta generate, le autorizzazioni dell'account di servizio possono essere modificate in base ai requisiti aziendali. Nel tutorial, all'account di servizio gestito dall'utente vertex-sa verranno applicati i seguenti ruoli:

Devi l'API Service Account prima di procedere.

In Cloud Shell, crea l'account di servizio.

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

All'interno di Cloud Shell, aggiorna l'account di servizio con il ruolo Amministratore istanze Compute

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

All'interno di Cloud Shell, aggiorna l'account di servizio con il ruolo Vertex AI User

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

6. Creare un account di servizio gestito dall'utente (Blocco note)

Nella sezione seguente creerai un account di servizio gestito dall'utente che verrà associato a Vertex Workbench (Notebook) utilizzato nel tutorial.

Nel tutorial, all'account di servizio verranno applicate le seguenti regole:

In Cloud Shell, crea l'account di servizio.

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

All'interno di Cloud Shell, aggiorna l'account di servizio con il ruolo Storage Admin.

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

All'interno di Cloud Shell, aggiorna l'account di servizio con il ruolo Vertex AI User.

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

All'interno di Cloud Shell, aggiorna l'account di servizio con il ruolo Artifact Registry Admin.

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

All'interno di Cloud Shell, elenca l'account di servizio e prendi nota dell'indirizzo email che verrà utilizzato durante la creazione del blocco note gestito dall'utente.

gcloud iam service-accounts list

7. crea le istanze di test

Nella sezione seguente creerai istanze di test per eseguire test di base da us-west1 e us-central1.

In Cloud Shell, crea il 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"

Crea il client centrale in Cloud Shell.

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"

Per consentire a IAP di connettersi alle tue istanze VM, crea una regola firewall che:

  • Si applica a tutte le istanze VM a cui vuoi rendere accessibile tramite IAP.
  • Consente il traffico in entrata dall'intervallo IP 35.235.240.0/20. Questo intervallo contiene tutti gli indirizzi IP utilizzati da IAP per l'inoltro TCP.

In Cloud Shell, crea la regola firewall IAP.

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

8. Crea un blocco note gestito dall'utente

l'API Notebooks

Nella sezione seguente, crea un blocco note gestito dall'utente che incorpora l'account di servizio creato in precedenza, user-managed-notebook-sa.

All'interno di Cloud Shell, crea l'istanza client privato.

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

Vai a Vertex AI → Workbench per visualizzare il blocco note di cui hai eseguito il deployment.

b02fcb9b07dca06a.png

9. Esegui il deployment del modello e della previsione online

Nella sezione seguente, utilizza il codelabVertex AI:Usa le routine di previsione personalizzate con Sklearn per pre-elaborare e post-elaborare i dati per le previsioni iniziando dalla Sezione 7,poiché hai già creato un blocco note nel passaggio precedente. Una volta eseguito il deployment del modello, torna al tutorial per iniziare la sezione successiva.

ee68b7ba0cfd2746.png

10. Crea una dashboard di monitoraggio personalizzata per la previsione online

La previsione online crea una dashboard di monitoraggio predefinita in VERTEX AI → PREVISIONE ONLINE → NOME ENDPOINT (diamonds-cpr_endpoint). Tuttavia, per i nostri test dobbiamo definire un'ora di inizio e di fine, pertanto è necessaria una dashboard personalizzata.

Nella sezione seguente creerai metriche di Cloud Monitoring per ottenere misurazioni della latenza basate sull'accesso regionale all'endpoint di previsione online per convalidare la latenza diversa quando si accede a un endpoint in us-central1 da istanze GCE di cui è stato eseguito il deployment in us-west1 e us-central.

Per il tutorial, utilizzeremo le metriche Prediction_latencies. Altre metriche sono disponibili in aiplatform

Metrica

Descrizione

prediction/online/prediction_latencies

Latenza di previsione online del modello di cui è stato eseguito il deployment.

Crea un grafico per la metricion_latencies

Dalla console Cloud, vai a MONITORING → Esplora metriche

536668ab0b29d77.png

Inserisci la metrica prediction/online/prediction_latencies e seleziona le seguenti opzioni, quindi seleziona Applica.

c1edd34208cb5ee2.png

Aggiorna Raggruppa per in base alla seguente opzione e seleziona Salva grafico.

e180a5d8a044b6e1.png

d2ecd6677a3b34e0.png

Seleziona Salva. Ti verrà chiesto di selezionare una dashboard. Seleziona Nuova dashboard e fornisci un nome.

e29a39dc941c8599.png

Dashboard personalizzata Vertex

Nella sezione seguente, verifica che la dashboard personalizzata Vertex mostri l'ora corretta.

Vai a MONITORING → Dashboard e seleziona Dashboard personalizzata Vertex, quindi seleziona l'ora. Assicurati che il fuso orario sia corretto.

f43ebed798ce1147.png

Assicurati di espandere la legenda per ottenere una visualizzazione tabella.

61ffeef22e067ca9.png

Esempio di visualizzazione espansa:

9027e8785c023129.png

11. Crea un DNS privato per l'endpoint PSC

Creare una zona DNS privata in aiml-vpc per risolvere tutti i criteri googleapis per l'indirizzo IP 100.100.10.10 dell'endpoint PSC.

Da Cloud Shell, crea una zona DNS privata.

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"

Da Cloud Shell, crea il record A che associa *. googleapis.com all'IP PSC.

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

12. Ciao, test delle variabili

Hey offre agli utenti finali la possibilità di personalizzare i test in base ai requisiti di rete e delle applicazioni. Ai fini del tutorial utilizzeremo l'opzione descritta di seguito con una stringa di esecuzione di esempio:

c == 1 worker

z == Durata

m == metodo HTTP POST

D == Corpo della richiesta HTTP dal file, instances.json

n == numero di richieste da eseguire. Il valore predefinito è 200.

Esempio di stringa curl con HEY (esecuzione non richiesta)

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. Ottenere l'ID previsione

Recupera dalla console Cloud l'ID endpoint di previsione online che verrà utilizzato nei passaggi successivi.

Vai a VERTEX AI → PREVISIONE ONLINE

ce4d4a88a3fa2345.png

14. Download ed esecuzione di HEY (us-west1)

Nella sezione seguente, accederai a west-client per scaricare ed eseguire HEY sulla previsione online situata in us-central1.

Da Cloud Shell, accedi al client west e scarica HEY

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

Dal sistema operativo, scarica HEY e aggiorna le autorizzazioni.

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

Nel sistema operativo, crea le seguenti variabili:

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

Esempio:

ENDPOINT_ID="2706243362607857664"

Nella sezione seguente creerai un file instances.json utilizzando vi editor o nano e inserirai la stringa di dati utilizzata per ottenere una previsione dal modello di cui è stato eseguito il deployment.

Dal sistema operativo west-client, crea un file instances.json con la stringa di dati riportata di seguito:

{"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]]}

Esempio:

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

Pre-test

Dal sistema operativo, esegui un curl per convalidare il modello e l'endpoint di previsione funzioni correttamente. Nota l'IP dell'endpoint PSC nel log dettagliato e HTTP/2 200 che indica l'esito positivo.

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

Ad esempio, prendi nota dell'indirizzo IP PSC utilizzato per accedere alla previsione e un esito positivo.

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

Esegui HEY

Dal sistema operativo, esegui HEY abilitando un test di riferimento di 10 minuti.

./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. Ciao Validation (us-west1)

Ora che hai eseguito Hey da un'istanza Compute in us-west1, valuta i risultati seguenti:

  • Risultati HEY
  • Dashboard personalizzata Vertex
  • Intelligence di rete

Risultati HEY

Dal sistema operativo, convalidiamo i risultati HEY in base all'esecuzione di 10 minuti,

17,5826 richieste per secondo

99% in 0.0686 sec | 68 ms

10.550 risposte con codice di stato 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

Dashboard personalizzata Vertex

Vai a MONITORING → Dashboard e seleziona Dashboard personalizzata Vertex. Inserisci 10 m o specifica l'ora di inizio e di fine. Assicurati che il fuso orario sia corretto.

4102b1d0438c78e3.png

Se osservi la definizione di Latenze di previsione, viene indicata una metrica lato server che misura il tempo totale per rispondere alla richiesta del client dopo l'ottenimento di una risposta dal modello.

  • Durata totale latenza: il tempo totale trascorso da una richiesta nel servizio, ossia la latenza del modello più la latenza overhead.

Al contrario, HEY è una metrica lato client che prende in considerazione i seguenti parametri:

Richiesta del client + Latenza totale (inclusa la latenza del modello) + Risposta del client

Intelligence di rete

Diamo ora un'occhiata alla latenza di rete tra regioni riportata da Network Intelligence per avere un'idea della latenza da us-west1 a us-central1 riportata da Google Cloud.

Vai a Cloud Console Network Intelligence → Performance Dashboard e seleziona le seguenti opzioni descritte nello screenshot riportato di seguito, che indicano una latenza compresa tra 32 e 39 ms.

aade5f757115721.png

Riepilogo base di riferimento HEY us-west1

Confrontando i report sulla latenza totale dagli strumenti di test si ottiene approssimativamente la stessa latenza riportata da HEY. La latenza tra regioni contribuisce in gran parte alla latenza. Vediamo le prestazioni del client centrale nella prossima serie di test.

Strumento per la latenza

Durata

Intelligence di rete: latenza da us-west1 a us-central1

Da ~32 a 39 ms

Cloud Monitoring: latenza totale della previsione [99°%]

34,58 ms (99p)

Latenza totale segnalata da Google

Da ~ 66,58 a 73,58 ms

Distribuzione della latenza lato client HEY

68ms (99p)

16. Download ed esecuzione di HEY (us-central1)

Nella sezione seguente, accederai al client centrale per scaricare ed eseguire HEY rispetto alla previsione online situata in us-central1.

Da Cloud Shell, accedi al client centrale e scarica HEY

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

Dal sistema operativo, scarica HEY e aggiorna le autorizzazioni.

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

Nel sistema operativo, crea le seguenti variabili:

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

Esempio:

ENDPOINT_ID="2706243362607857664"

Nella sezione seguente creerai un file instances.json utilizzando vi editor o nano e inserirai la stringa di dati utilizzata per ottenere una previsione dal modello di cui è stato eseguito il deployment.

Dal sistema operativo west-client, crea un file instances.json con la stringa di dati riportata di seguito:

{"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]]}

Esempio:

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

Pre-test

Dal sistema operativo, esegui un curl per convalidare il modello e l'endpoint di previsione funzioni correttamente. Nota l'IP dell'endpoint PSC nel log dettagliato e HTTP/2 200 che indica l'esito positivo.

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

Ad esempio, prendi nota dell'indirizzo IP PSC utilizzato per accedere alla previsione e un esito positivo.

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

Esegui HEY

Dal sistema operativo, esegui HEY abilitando un test di riferimento di 10 minuti.

./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)

Ora che hai eseguito Hey da un'istanza Compute in us-central1, valuta i risultati seguenti:

  • Risultati HEY
  • Dashboard personalizzata Vertex
  • Intelligence di rete

Risultati HEY

Dal sistema operativo, convalidiamo i risultati HEY in base all'esecuzione di 10 minuti,

44,9408 richieste per secondo

99% in 0,0353 sec | 35 ms

26965 risposte con codice di stato 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

Dashboard personalizzata Vertex

Vai a MONITORING → Dashboard e seleziona Dashboard personalizzata Vertex, quindi inserisci 10 min. o l'ora di inizio e di fine. Assicurati che il fuso orario sia corretto.

Latenze di previsione per gli ultimi 10m producono 30.533 ms.

Se osservi la definizione di Latenze di previsione, viene indicata una metrica lato server che misura il tempo totale per rispondere alla richiesta del client dopo l'ottenimento di una risposta dal modello.

  • Durata totale latenza: il tempo totale trascorso da una richiesta nel servizio, ossia la latenza del modello più la latenza overhead.

Al contrario, HEY è una metrica lato client che prende in considerazione i seguenti parametri:

Richiesta del client + Latenza totale (inclusa la latenza del modello) + Risposta del client

Intelligence di rete

Diamo ora un'occhiata alla latenza di rete intraregionale segnalata da Network Intelligence per avere un'idea della latenza us-central1 riportata da Google Cloud.

Vai a Cloud Console Network Intelligence → Performance Dashboard e seleziona le seguenti opzioni descritte nello screenshot riportato di seguito, che indicano una latenza compresa tra 0,2 e 0,8 ms.

eaa84848c3185fde.png

Riepilogo di base di riferimento HEY us-central1

Il confronto della latenza totale riportata dagli strumenti di test produce una latenza inferiore rispetto al client ovest a causa degli endpoint di computing (client centrale) e Vertex (previsione di modello e online) nella stessa regione.

Strumento per la latenza

Durata

Intelligence di rete: latenza intraregionale us-central1

Da ~,2 a 0,8 ms

Cloud Monitoring: latenza totale della previsione [99°%]

30,533 ms (99p)

Latenza totale segnalata da Google

Da ~30,733 a 31,333 ms

Latenza lato client HEY

35 ms (99p)

18. Complimenti

Congratulazioni, hai eseguito il deployment e convalidato HEY per ottenere la latenza di riferimento per le previsioni lato client utilizzando una combinazione di Cloud Monitoring e Network Intelligence. In base ai test dovevi identificare un endpoint di previsione in us-central può essere fornito tra regioni, tuttavia è stata osservata la latenza.

Cosmopup pensa che i tutorial siano straordinari.

e6d3675ca7c6911f.jpeg

19. Esegui la pulizia

Da Cloud Shell, elimina i componenti del tutorial.

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

Dalla console Cloud è stato eliminato quanto segue:

Cartella Artifact Registry

99c17044e2f80919.png

Da Vertex AI Model Registry, annulla il deployment del modello:

f5b315f089ae6283.png

Da Vertex AI Online Prediction, elimina l'endpoint

9b58688a5037de84.png

Passaggi successivi

Guarda alcuni di questi tutorial...

Per approfondire Video

Documenti di riferimento