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

1. מבוא

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

מה תפַתחו

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

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

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

dd5c102ce1ab0150.png

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

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

מה תלמדו

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

מה צריך להכין

  • פרויקט ב-Google Cloud

הרשאות IAM

אדמין רשתות של Compute

אדמין רשתות של Compute

עריכה של ספריית שירותים

אדמין DNS

צפייה בניהול רשתות

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

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

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

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

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

3. הגדרת Simplyl-vpc

יוצרים את ה-Simplel-vpc

gcloud Services להפעיל את networkmanagement.googleapis.com

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

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

Inside Cloud Shell, מפעילים את ה-API לניהול רשתות עבור Network Intelligence

gcloud services enable networkmanagement.googleapis.com

יצירת רשת משנה של notebook בניהול המשתמש

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

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

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 מספק יכולות של תעבורת נתונים יוצאת (egress NAT), כלומר שמארחי אינטרנט לא יכולים ליזום תקשורת עם notebook שמנוהל על ידי משתמש, ולכן הוא מאובטח יותר.

בתוך Cloud Shell, יוצרים את הנתב האזורי בענן, 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, יוצרים את הנתב האזורי בענן, us-central1.

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

ב-Inside Cloud Shell, יוצרים את שער הענן האזורי 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 מ-somel-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

יצירה של נקודת קצה (endpoint) של 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.

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

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

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

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

ב-Inside 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. יצירת חשבון שירות שמנוהל על ידי משתמש (Notebook)

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

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

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

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

ב-Inside 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"

ב-Inside 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"

ב-Inside 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, מציגים את חשבון השירות ורושמים את כתובת האימייל שייעשה בה שימוש ליצירת ה-notebook המנוהל על ידי המשתמש.

gcloud iam service-accounts list

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

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

Inside Cloud Shell יוצרים את הלקוח המערבי.

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"

Inside 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 להתחבר למכונות הווירטואליות, יוצרים כלל של חומת אש:

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

בתוך 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. יצירת notebook בניהול משתמשים

את notebook API

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

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

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, כי כבר יצרת notebook בשלב הקודם. אחרי שהמודל נפרס, צריך לחזור למדריך כדי להתחיל את הקטע הבא.

ee68b7ba0cfd2746.png

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

כשמשתמשים בחיזוי אונליין, המערכת יוצרת מרכז בקרה למעקב שמוגדר כברירת מחדל דרך VERTEX AI ← PREDICTION ← ENDPOINT NAME (Diamonds-cpr_endpoint). עם זאת, לצורך הבדיקה שלנו, עלינו להגדיר שעת התחלה ושעת סיום, לכן נדרש מרכז שליטה מותאם אישית.

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

במדריך נשתמש במדדים שלpreion_latencies. יש מדדים נוספים שזמינים ב-aiplatform.

מדד

תיאור

prediction/online/prediction_latencies

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

יוצרים תרשים למדד prediction_latencies

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

536668ab0b29d77.png

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

c1edd34208cb5ee2.png

מעדכנים את התכונה 'קיבוץ לפי' לפי האפשרות הבאה ובוחרים באפשרות 'שמירת תרשים'.

e180a5d8a044b6e1.png

d2ecd6677a3b34e0.png

לוחצים על 'שמירה', ואז תתבקשו לבחור מרכז בקרה. בחרו 'מרכז בקרה חדש' ו- מזינים שם.

e29a39dc941c8599.png

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

בקטע הבא, מוודאים שב-Vertex Custom Dashboard מוצג השעה הנכונה.

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

f43ebed798ce1147.png

צריך להרחיב את המקרא כדי לקבל תצוגת טבלה.

61ffeef22e067ca9.png

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

9027e8785c023129.png

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

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

יוצרים ב-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. Ok, משתני בדיקה

Ok מציע למשתמשי הקצה את היכולת להתאים אישית את הבדיקות בהתאם לדרישות הרשת והאפליקציה. למטרת המדריך, נשתמש באפשרות המפורטת למטה עם מחרוזת ביצוע לדוגמה:

c == עובד אחד

z == משך זמן

m == שיטת HTTP 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, שבו תשתמשו בשלבים הבאים.

עוברים אל VERTEX AI ← חיזוי אונליין

ce4d4a88a3fa2345.png

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

בקטע הבא, יתבצע התחברות ללקוח westo כדי להוריד ולהפעיל את 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 או 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. Ok Validation (us-west1)

עכשיו, אחרי שמריצים את הפקודה Ok ממכונת מחשוב ב-us-west1, מעריכים את התוצאות הבאות:

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

תוצאות 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). מזינים 10 דק' או מציינים את שעת ההתחלה ושעת הסיום. יש לוודא שאזור הזמן נכון.

4102b1d0438c78e3.png

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

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

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

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

בינת רשת

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

עוברים אל Cloud Console Network Intelligence ← Performance Dashboard (מרכז הבקרה של הביצועים) ובוחרים את האפשרויות הבאות שמפורטות בצילום המסך למטה, שמציינת שזמן האחזור הוא 32 עד 39 אלפיות השנייה.

aade5f757115721.png

סיכום הבסיס HEY us-west1

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

כלי זמן האחזור

משך

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

כ-32 עד 39 אלפיות השנייה

Cloud Monitoring: זמן האחזור הכולל לחיזוי [99%]

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 או 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. Ok Validation (us-central1)

עכשיו, לאחר שהרצתם Ok ממכונת מחשוב ב-us-central1, מעריכים את התוצאות הבאות:

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

תוצאות HEY

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

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

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

26,965 תשובות עם קוד סטטוס 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

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

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

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

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

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

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

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

בינת רשת

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

עוברים אל Cloud Console Network Intelligence ← Performance Dashboard (מרכז הבקרה של הביצועים) ובוחרים את האפשרויות הבאות שמפורטות בצילום המסך למטה, שמציינת זמן אחזור מ- 0 .2 עד 0 .8 ms.

eaa84848c3185fde.png

סיכום הבסיס HEY us-central1

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

כלי זמן האחזור

משך

מודיעין רשת: זמן אחזור של us-central1 בתוך אזור

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

Cloud Monitoring: זמן האחזור הכולל לחיזוי [99%]

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 נמחק את הפריטים הבאים:

תיקיית Artifact Registry

99c17044e2f80919.png

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

f5b315f089ae6283.png

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

9b58688a5037de84.png

מה השלב הבא?

מעיינים בכמה מהמדריכים האלה...

המשך קריאה סרטונים

מסמכי עזר