בדיקת בסיס החיזוי אונליין של Vertex AI באמצעות HEY

1. מבוא

במדריך הזה נסביר איך ליצור ולהעריך מדדים של תחזיות אונליין ב-Cloud Monitoring כשמבצעים בדיקות בסיסיות באזורים us-central1 ו-us-west1 לנקודת קצה של תחזית שנפרסה באזור us-central1 באמצעות כלי הביצועים באינטרנט HEY.

מה תפַתחו

תגדירו רשת VPC בשם aiml-vpc שמורכבת מתת-רשתות וממופעים ב-us-west1 וב-us-central1, שישמשו ליצירת תעבורה באמצעות HEY שמטרגטת חיזוי אונליין ומודל שפריסתו מתבצעת ב-us-central1.

במדריך משולבים גם Private Service Connect ו-שרת DNS פרטי כדי להדגים איך סביבות מקומיות וסביבות מרובות עננים יכולות להשתמש ב-PSC כדי לגשת ל-googleapis.

במדריך הזה נשתמש ב-Cloud Monitoring וב-Network Intelligence כדי לאמת את התעבורה שנוצרת מ-HEY לתחזית אונליין. למרות שהשלבים שמפורטים במדריך מופעלים ב-VPC, אפשר להשתמש בהם כדי להפעיל ולקבל נתונים בסיסיים של Vertex API מסביבות מקומיות או מסביבות מרובות עננים. ארכיטקטורת הרשת מורכבת מהרכיבים הבאים:

dd5c102ce1ab0150.png

בהמשך מפורטים פרטי התרחיש לדוגמה:

  1. גישה לחיזוי אונליין ב-us-central1 ממופעי GCE ב-us-west1 באמצעות HEY
  2. אימות השימוש ב-PSC כדי לגשת ל-Vertex API
  3. ביצוע curl באמצעות HEY למשך 5 דקות
  4. אימות זמן האחזור באמצעות Cloud Monitoring
  5. אימות זמן האחזור בין אזורים באמצעות Network Intelligence
  6. גישה לחיזוי אונליין ב-us-central1 ממכונות GCE ב-us-central1 באמצעות HEY
  7. אימות השימוש ב-PSC לגישה אל Vertex API
  8. ביצוע curl באמצעות HEY למשך 5 דקות
  9. אימות זמן האחזור באמצעות Cloud Monitoring
  10. אימות של זמן האחזור בתוך האזור באמצעות Network Intelligence

מה תלמדו

  • איך יוצרים נקודת קצה מסוג Private Service Connect
  • איך ליצור עומס לחיזוי אונליין באמצעות HEY
  • איך יוצרים מדדים של Vertex AI באמצעות Cloud Monitoring
  • איך משתמשים ב-Network Intelligence כדי לאמת את זמן האחזור בתוך אזור ומחוצה לו

מה תצטרכו

  • פרויקט ב-Google Cloud

הרשאות IAM

אדמין של רשת מחשוב

אדמין של רשת מחשוב

הכלי לעריכת Service Directory

אדמין DNS

Network Management Viewer

‫2. לפני שמתחילים

עדכון הפרויקט כדי לתמוך במדריך

במדריך הזה נעשה שימוש ב-$variables כדי לעזור בהטמעה של הגדרות gcloud ב-Cloud Shell.

ב-Cloud Shell, מבצעים את הפעולות הבאות:

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

‫3. הגדרה של aiml-vpc

יצירת aiml-vpc

gcloud services enable networkmanagement.googleapis.com

ב-Cloud Shell, מבצעים את הפעולות הבאות:

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

ב-Cloud Shell, מפעילים את Network Management API עבור Network Intelligence.

gcloud services enable networkmanagement.googleapis.com

יצירת תת-רשת של מחברת שמנוהלת על ידי משתמש

ב-Cloud Shell, יוצרים את 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

ב-Cloud Shell, יוצרים את תת-הרשת 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

ב-Cloud Shell, יוצרים את תת-הרשת 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

הגדרות של Cloud Router ו-NAT

במדריך נעשה שימוש ב-Cloud NAT כדי להוריד חבילות תוכנה, כי למופע GCE אין כתובת IP חיצונית. ‫Cloud NAT מספק יכולות NAT ליציאה, כלומר למארחים באינטרנט אסור ליזום תקשורת עם מחברת שמנוהלת על ידי המשתמש, מה שהופך אותה למאובטחת יותר.

ב-Cloud Shell, יוצרים את Cloud Router האזורי, us-west1.

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

ב-Cloud Shell, יוצרים את שער Cloud NAT האזורי, 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

ב-Cloud Shell, יוצרים את Cloud Router האזורי, us-central1.

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

ב-Cloud Shell, יוצרים את שער Cloud NAT האזורי, 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. יצירת נקודת הקצה של Private Service Connect

בקטע הבא, תיצרו נקודת קצה (endpoint) של Private Service Connect ‏(PSC) שתשמש לגישה אל Vertex API מ-aiml-vpc.

מ-Cloud Shell

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

שמירת הערך pscendpointip למשך ה-Lab

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

echo $pscendpointip

יצירת נקודת קצה של PSC

מ-Cloud Shell

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

הצגת רשימה של נקודות הקצה המוגדרות של Private Service Connect

מ-Cloud Shell

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

תיאור של נקודות הקצה שהוגדרו ב-Private Service Connect

מ-Cloud Shell

gcloud compute forwarding-rules describe \
    pscvertex --global

5. יצירת חשבון שירות למופעי GCE

כדי לספק רמת בקרה מדויקת ל-Vertex API, נדרש חשבון שירות שמנוהל על ידי המשתמש, שיחול על המופעים המערביים והמרכזיים. אחרי שיוצרים את ההרשאות לחשבון השירות, אפשר לשנות אותן בהתאם לדרישות העסקיות. במדריך, לחשבון השירות בניהול המשתמשים, vertex-sa, יוקצו התפקידים הבאים:

לפני שממשיכים, צריך את Service Account API.

ב-Cloud Shell, יוצרים את חשבון השירות.

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

ב-Cloud Shell, מעדכנים את חשבון השירות עם התפקיד compute instance admin

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

ב-Cloud Shell, מעדכנים את חשבון השירות עם התפקיד Vertex AI User

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

6. יצירה של חשבון שירות שמנוהל על ידי משתמש (מחברת)

בקטע הבא תיצרו חשבון שירות שמנוהל על ידי משתמש, שיהיה משויך ל-Vertex Workbench (Notebook) שבו נעשה שימוש במדריך.

במדריך הזה, הכללים הבאים יחולו על חשבון השירות:

ב-Cloud Shell, יוצרים את חשבון השירות.

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

ב-Cloud Shell, מעדכנים את חשבון השירות עם התפקיד Storage Admin (אדמין אחסון).

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

ב-Cloud Shell, מעדכנים את חשבון השירות עם התפקיד Vertex AI User.

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

ב-Cloud Shell, מעדכנים את חשבון השירות עם התפקיד Artifact Registry Admin.

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

ב-Cloud Shell, מפרטים את חשבון השירות ורושמים את כתובת האימייל שתשמש ליצירת מחברת שמנוהלת על ידי משתמש.

gcloud iam service-accounts list

7. יצירת מופעי הבדיקות

בקטע הבא תיצרו מכונות לבדיקה כדי לבצע בדיקות Baseline מאזורים us-west1 ו-us-central1.

בתוך Cloud Shell, יוצרים את west-client.

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"

בתוך 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"

כדי לאפשר ל-IAP להתחבר למכונות הווירטואליות, צריך ליצור כלל חומת אש ש:

  • רלוונטי לכל מכונות ה-VM שרוצים לגשת אליהן באמצעות IAP.
  • מאפשר תעבורת נתונים נכנסת (ingress) מטווח כתובות ה-IP‏ ‎35.235.240.0/20. הטווח הזה מכיל את כל כתובות ה-IP שמשמשות את IAP להעברת TCP.

ב-Cloud Shell, יוצרים את הכלל בחומת האש של IAP.

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

8. יצירת מחברת שמנוהלת על ידי משתמש

ה-API של מחברת

בקטע הבא, יוצרים מחברת שמנוהלת על ידי משתמש שמשלבת את חשבון השירות שנוצר קודם, user-managed-notebook-sa.

ב-Cloud Shell, יוצרים את המכונה private-client.

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

עוברים אל Vertex AI → Workbench כדי לראות את מסמך ה-notebook שנפרס.

b02fcb9b07dca06a.png

9. פריסת המודל ותחזית אונליין

בקטע הבא, משתמשים ב-Codelab‏ Vertex AI:שימוש בשגרות חיזוי מותאמות אישית עם Sklearn לעיבוד מקדים ולעיבוד פוסט של נתונים לצורך חיזוי. מתחילים בקטע 7 כי כבר יצרתם מחברת בשלב הקודם. אחרי שמבצעים פריסה של המודל, חוזרים למדריך כדי להתחיל את הקטע הבא.

ee68b7ba0cfd2746.png

10. יצירת לוח בקרה מותאם אישית למעקב אחר חיזוי אונליין

חיזוי אונליין יוצר לוח בקרה של מעקב כברירת מחדל בקטע VERTEX AI → חיזוי אונליין → שם נקודת הקצה (diamonds-cpr_endpoint). עם זאת, כדי לבצע את הבדיקה, אנחנו צריכים להגדיר זמן התחלה וזמן סיום, ולכן נדרשת לוח בקרה בהתאמה אישית.

בקטע הבא תיצרו מדדים של Cloud Monitoring כדי לקבל מדידות של זמן האחזור על סמך גישה אזורית לנקודת הקצה של התחזית אונליין, כדי לאמת את זמני האחזור השונים כשניגשים לנקודת קצה ב-us-central1 ממופעי GCE שנפרסו ב-us-west1 וב-us-central.

במדריך הזה נשתמש במדדים של זמני האחזור של החיזוי, אבל יש עוד מדדים ב-aiplatform

מדד

תיאור

prediction/online/prediction_latencies

זמן האחזור של חיזויים אונליין במודל שנפרס.

יצירת תרשים עבור מדד השהיות של התחזית

במסוף Cloud, עוברים אל MONITORING → Metrics Explorer

536668ab0b29d77.png

מוסיפים את המדד prediction/online/prediction_latencies ובוחרים באפשרויות הבאות, ואז לוחצים על 'החלה'.

c1edd34208cb5ee2.png

מעדכנים את האפשרות Group by (קיבוץ לפי) בהתאם לאפשרות הבאה ולוחצים על Save Chart (שמירת התרשים).

e180a5d8a044b6e1.png

d2ecd6677a3b34e0.png

לוחצים על 'שמירה' ומופיעה בקשה לבחור לוח בקרה. לוחצים על 'לוח בקרה חדש' ומזינים שם.

e29a39dc941c8599.png

מרכז בקרה מותאם אישית של Vertex

בקטע הבא, מוודאים שמוצג בלוח הבקרה המותאם אישית של Vertex הזמן הנכון.

עוברים אל MONITORING (מעקב) → Dashboard (לוח בקרה), בוחרים באפשרות Vertex Custom Dashboard (לוח בקרה מותאם אישית של Vertex) ואז בוחרים את השעה. מוודאים שאזור הזמן נכון.

f43ebed798ce1147.png

כדי לראות את הנתונים בטבלה, צריך להרחיב את מקרא התרשים.

61ffeef22e067ca9.png

דוגמה לתצוגה מורחבת:

9027e8785c023129.png

11. יצירת DNS פרטי לנקודת הקצה של PSC

יוצרים אזור DNS פרטי ב-aiml-vpc כדי לפתור את כל ה-googleapis לכתובת ה-IP של נקודת הקצה של PSC ‏100.100.10.10.

ב-Cloud Shell, יוצרים אזור DNS פרטי.

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"

מ-Cloud Shell, יוצרים את רשומת ה-A שמקשרת בין ‎ *. googleapis.com לבין כתובת ה-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 מאפשרת למשתמשי קצה להתאים אישית את הבדיקות על סמך הדרישות של הרשת והאפליקציה. לצורך המדריך הזה, נשתמש באפשרות שמפורטת בהמשך עם מחרוזת הפעלה לדוגמה:

‫c == 1 worker

z == Duration

m == HTTP method POST

‫D == תוכן בקשת HTTP מהקובץ instances.json

‫n == מספר הבקשות להרצה. ברירת המחדל היא 200.

דוגמה למחרוזת curl עם HEY (אין צורך בהרצה)

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. קבלת מזהה החיזוי

מקבלים את מזהה נקודת הקצה של התחזית אונליין מ-Cloud Console, שישמש בשלבים הבאים.

עוברים אל VERTEX AI → ONLINE PREDICTION (חיזוי אונליין)

ce4d4a88a3fa2345.png

14. הורדה והפעלה של HEY ‏ (us-west1)

בקטע הבא תתחברו ל-west-client כדי להוריד ולהפעיל את HEY מול התחזית אונליין שנמצאת ב-us-central1.

מ-Cloud Shell, מתחברים ל-west-client ומורידים את HEY

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

ממערכת ההפעלה, מורידים את HEY ומעדכנים את ההרשאות.

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

מתוך מערכת ההפעלה, יוצרים את המשתנים הבאים:

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

דוגמה:

ENDPOINT_ID="2706243362607857664"

בקטע הבא, תיצרו קובץ instances.json באמצעות vi editor או nano ותוסיפו את מחרוזת הנתונים שמשמשת לקבלת תחזית מהמודל שנפרס.

במערכת ההפעלה של west-client, יוצרים קובץ 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:$ 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:$

בדיקה מקדימה

ממערכת ההפעלה, מריצים curl כדי לוודא שהמודל ונקודת הקצה של החיזוי פועלים בהצלחה. שימו לב לכתובת ה-IP של נקודת הקצה של PSC ביומן המפורט ול-HTTP/2 200 שמציין שהפעולה הצליחה.

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

לדוגמה, שימו לב לכתובת ה-IP של ה-PSC ששימשה לגישה לתחזית ולתוצאה מוצלחת.

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

ביצוע של HEY

ממערכת ההפעלה, מריצים את HEY כדי להפעיל בדיקה ראשונית למשך 10 דקות.

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

אחרי שמריצים את הפקודה Hey ממופע של מחשוב באזור us-west1, בודקים את התוצאות מהפעולות הבאות:

  • תוצאות של HEY
  • מרכז בקרה מותאם אישית של Vertex
  • Network Intelligence

תוצאות של HEY

ממערכת ההפעלה, בואו נאמת את התוצאות של HEY על סמך ההרצה של 10 דקות,

‫17.5826 בקשות לשנייה

‫99% ב-0.0686 שניות | 68 אלפיות השנייה

‫10,550 תגובות עם קוד סטטוס 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

מרכז בקרה מותאם אישית של Vertex

עוברים אל MONITORING (מעקב) ← Dashboard (מרכז בקרה) ובוחרים באפשרות Vertex Custom Dashboard (מרכז בקרה מותאם אישית של Vertex). מזינים 10m או מציינים את שעת ההתחלה ושעת הסיום. מוודאים שאזור הזמן נכון.

4102b1d0438c78e3.png

אם בודקים את ההגדרה של זמני האחזור של התחזיות, אפשר לראות שזהו מדד בצד השרת שמודד את הזמן הכולל שנדרש כדי להגיב לבקשת הלקוח אחרי קבלת תגובה מהמודל.

  • משך זמן האחזור הכולל: הזמן הכולל שבקשה שוהה בשירות, שהוא זמן האחזור של המודל בתוספת זמן האחזור של התקורה.

לעומת זאת, HEY הוא מדד בצד הלקוח שמתייחס לפרמטרים הבאים:

בקשת לקוח + זמן האחזור הכולל (כולל זמן האחזור של המודל) + תגובת לקוח

Network Intelligence

עכשיו נבדוק את חביון הרשת בין אזורים שדווח על ידי Network Intelligence כדי לקבל מושג לגבי החביון מ-us-west1 ל-us-central1 שדווח על ידי Google Cloud Platform.

עוברים אל מסוף Cloud Network Intelligence → לוח בקרה לביצועי הענן ובוחרים באפשרויות הבאות שמפורטות בצילום המסך שלמטה, שבו מוצג זמן אחזור של 32 עד 39 אלפיות השנייה.

aade5f757115721.png

סיכום בסיסי של HEY us-west1

השוואה בין דוחות השהייה הכוללת שנוצרו על ידי כלי הבדיקה מראה שהשהייה שדווחה על ידי HEY דומה לשהייה שדווחה על ידי כלי הבדיקה. זמן האחזור בין אזורים תורם את רוב זמן האחזור. בסדרת הבדיקות הבאה נראה את הביצועים של הלקוח המרכזי.

כלי לבדיקת זמן אחזור

משך

ניתוח רשת: זמן האחזור מ-us-west1 ל-us-central1

‫~32 עד 39 אלפיות השנייה

Cloud Monitoring: Total prediction latency [99th%]

‫34.58 אלפיות השנייה (99p)

החביון הכולל שדווח על ידי Google

‫~ 66.58 עד 73.58 אלפיות השנייה

התפלגות זמן האחזור בצד הלקוח של HEY

‫68 אלפיות השנייה (99p)

16. הורדה והפעלה של HEY ‏ (us-central1)

בקטע הבא, תתחברו ללקוח המרכזי כדי להוריד ולהפעיל את HEY מול התחזית אונליין שנמצאת ב-us-central1.

מ-Cloud Shell, מתחברים ללקוח המרכזי ומורידים את HEY

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

ממערכת ההפעלה, מורידים את HEY ומעדכנים את ההרשאות.

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

מתוך מערכת ההפעלה, יוצרים את המשתנים הבאים:

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

דוגמה:

ENDPOINT_ID="2706243362607857664"

בקטע הבא, תיצרו קובץ instances.json באמצעות vi editor או nano ותוסיפו את מחרוזת הנתונים שמשמשת לקבלת תחזית מהמודל שנפרס.

במערכת ההפעלה של west-client, יוצרים קובץ 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:$ 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:$

בדיקה מקדימה

ממערכת ההפעלה, מריצים curl כדי לוודא שהמודל ונקודת הקצה של החיזוי פועלים בהצלחה. שימו לב לכתובת ה-IP של נקודת הקצה של PSC ביומן המפורט ול-HTTP/2 200 שמציין שהפעולה הצליחה.

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

לדוגמה, שימו לב לכתובת ה-IP של ה-PSC ששימשה לגישה לתחזית ולתוצאה מוצלחת.

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

הפעלת HEY

ממערכת ההפעלה, מריצים את HEY כדי להפעיל בדיקה ראשונית למשך 10 דקות.

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

אחרי שמריצים את Hey ממופע של Compute באזור us-central1, מעריכים את התוצאות מהפעולות הבאות:

  • תוצאות של HEY
  • מרכז בקרה מותאם אישית של Vertex
  • Network Intelligence

תוצאות HEY

ממערכת ההפעלה, בואו נאמת את התוצאות של HEY על סמך ההרצה של 10 דקות,

‫44.9408 בקשות לשנייה

‫99% ב-0.0353 שניות | 35 אלפיות השנייה

26965 responses with 200 status code

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

מרכז בקרה מותאם אישית של Vertex

עוברים אל MONITORING (מעקב) → Dashboard (מרכז בקרה) ובוחרים באפשרות Vertex Custom Dashboard (מרכז בקרה מותאם אישית של Vertex), מזינים 10m. או שעת ההתחלה ושעת הסיום. מוודאים שאזור הזמן נכון.

זמני האחזור של התחזיות ב-10 הדקות האחרונות הם 30.533 אלפיות השנייה.

אם בודקים את ההגדרה של זמני האחזור של התחזיות, אפשר לראות שזהו מדד בצד השרת שמודד את הזמן הכולל שנדרש כדי להגיב לבקשת הלקוח אחרי קבלת תגובה מהמודל.

  • משך זמן האחזור הכולל: הזמן הכולל שבו בקשה נמצאת בשירות, שהוא זמן האחזור של המודל בתוספת זמן האחזור של התקורה.

לעומת זאת, HEY הוא מדד בצד הלקוח שמתייחס לפרמטרים הבאים:

בקשת לקוח + זמן האחזור הכולל (כולל זמן האחזור של המודל) + תגובת לקוח

Network Intelligence

עכשיו נבדוק את השהיית הרשת בתוך האזור שדווחה על ידי Network Intelligence כדי לקבל מושג לגבי השהייה ב-us-central1 שדווחה על ידי Google Cloud Platform.

עוברים אל מסוף Cloud Network Intelligence → לוח בקרה לביצועי הענן ובוחרים באפשרויות הבאות שמפורטות בצילום המסך שלמטה, שבו מוצג זמן האחזור מ-0 .2 עד 0 .8 אלפיות השנייה.

eaa84848c3185fde.png

סיכום בסיסי של HEY us-central1

השוואה של זמן האחזור הכולל שמדווח על ידי כלי הבדיקה מראה שזמן האחזור נמוך יותר ב-west-client, כי נקודות הקצה (endpoint) של החישוב (central-client) ושל Vertex (המודל והחיזוי אונליין) נמצאות באותו אזור.

כלי לבדיקת זמן אחזור

משך

ניתוח רשת: זמן האחזור באזור us-central1

‫~0.2 עד 0 .8 אלפיות השנייה

Cloud Monitoring: Total prediction latency [99th%]

‫30.533 אלפיות השנייה (99p)

החביון הכולל שדווח על ידי Google

‫~30.733 עד 31.333 אלפיות השנייה

זמן אחזור בצד הלקוח של HEY

‫35 אלפיות השנייה (99p)

18. מזל טוב

הצלחתם לפרוס את HEY ולאמת אותו כדי לקבל את זמן האחזור הבסיסי של החיזוי בצד הלקוח באמצעות שילוב של Cloud Monitoring ו-Network Intelligence. על סמך הבדיקות, זיהיתם שאפשר להפעיל נקודת קצה של חיזוי באזור us-central בין אזורים שונים, אבל נצפה זמן אחזור.

‫Cosmopup חושב שסרטוני הדרכה הם מדהימים!!

e6d3675ca7c6911f.jpeg

19. הסרת המשאבים

ב-Cloud Shell, מוחקים את רכיבי ההדרכה.

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

הפריטים הבאים נמחקו מ-Cloud Console:

תיקייה ב-Artifact Registry

99c17044e2f80919.png

מבטלים את הפריסה של המודל ממרשם המודלים של Vertex AI:

f5b315f089ae6283.png

מחיקת נקודת הקצה מ-Vertex AI Online Prediction

9b58688a5037de84.png

מה השלב הבא?

כדאי לצפות בסרטוני ההדרכה האלה…

קריאה נוספת וסרטונים

מאמרי עזרה