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 מסביבות מקומיות או מסביבות מרובות עננים. ארכיטקטורת הרשת מורכבת מהרכיבים הבאים:

בהמשך מפורטים פרטי התרחיש לדוגמה:
- גישה לחיזוי אונליין ב-us-central1 ממכונות GCE ב-us-west1 באמצעות HEY
- אימות השימוש ב-PSC כדי לגשת ל-Vertex API
- ביצוע curl באמצעות HEY למשך 5 דקות
- בדיקת זמן האחזור באמצעות Cloud Monitoring
- אימות של זמן האחזור בין אזורים באמצעות Network Intelligence
- גישה לחיזוי אונליין ב-us-central1 ממכונות GCE ב-us-central1 באמצעות HEY
- אימות השימוש ב-PSC כדי לגשת ל-Vertex API
- ביצוע curl באמצעות HEY למשך 5 דקות
- בדיקת זמן האחזור באמצעות Cloud Monitoring
- אימות של זמן האחזור בתוך האזור באמצעות Network Intelligence
מה תלמדו
- איך יוצרים נקודת קצה מסוג Private Service Connect
- איך ליצור עומס לחיזוי אונליין באמצעות HEY
- איך יוצרים מדדים של Vertex AI באמצעות Cloud Monitoring
- איך משתמשים ב-Network Intelligence כדי לאמת את זמן האחזור בתוך אזור ומחוצה לו
מה תצטרכו
- פרויקט ב-Google Cloud
הרשאות IAM
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
יצירת תת-רשת של Notebook שמנוהל על ידי משתמש
ב-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 (אדמין של מכונת Compute).
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, יוצרים את central-client.
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. יצירת מחברת שמנוהלת על ידי משתמש
בקטע הבא, יוצרים מחברת שמנוהלת על ידי משתמש שמשלבת את חשבון השירות שנוצר קודם, 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 שנפרס.

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

10. יצירת לוח בקרה מותאם אישית למעקב אחר תחזיות אונליין
התכונה 'חיזוי אונליין' יוצרת לוח בקרה של מעקב כברירת מחדל בקטע VERTEX AI → ONLINE PREDICTION → ENDPOINT NAME (diamonds-cpr_endpoint). עם זאת, כדי לבצע את הבדיקה, אנחנו צריכים להגדיר זמן התחלה וזמן סיום, ולכן נדרשת לוח בקרה בהתאמה אישית.
בקטע הבא תיצרו מדדים של Cloud Monitoring כדי לקבל מדידות של זמן האחזור על סמך גישה אזורית לנקודת הקצה של התחזית אונליין, כדי לאמת את זמני האחזור השונים כשניגשים לנקודת קצה ב-us-central1 ממכונות וירטואליות של GCE שנפרסו ב-us-west1 וב-us-central.
במדריך הזה נשתמש במדדים של זמני האחזור של החיזוי, אבל יש עוד מדדים שזמינים ב-aiplatform
מדד | תיאור |
prediction/online/prediction_latencies | השהייה של חיזוי אונליין של המודל שנפרס. |
יצירת תרשים עבור מדד השהיות של התחזית
במסוף Cloud, עוברים אל MONITORING → Metrics Explorer

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

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


לוחצים על Save (שמירה) ומופיעה בקשה לבחור לוח בקרה. בוחרים באפשרות 'לוח בקרה חדש' ומזינים שם.

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

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

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

11. יצירת שרת DNS פרטי לנקודת הקצה של PSC
יוצרים אזור DNS פרטי ב-aiml-vpc כדי לפתור את כל googleapis לכתובת ה-IP של נקודת הקצה (endpoint) של 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 (חיזוי אונליין)

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

אם בודקים את ההגדרה של זמני האחזור של התחזיות, אפשר לראות שמדובר במדד בצד השרת שמודד את הזמן הכולל שנדרש כדי להגיב לבקשת הלקוח אחרי קבלת תגובה מהמודל.
- משך זמן האחזור הכולל: משך הזמן הכולל שבקשה מבלה בשירות, שהוא זמן האחזור של המודל בתוספת זמן האחזור של התקורה.
לעומת זאת, מדד HEY הוא מדד בצד הלקוח שמתחשב בפרמטרים הבאים:
בקשת לקוח + זמן האחזור הכולל (כולל זמן האחזור של המודל) + תגובת לקוח
Network Intelligence
עכשיו נבדוק את חביון הרשת בין אזורים שדווח על ידי Network Intelligence כדי לקבל מושג לגבי החביון מ-us-west1 ל-us-central1 שדווח על ידי Google Cloud Platform.
עוברים אל מסוף Cloud Network Intelligence → לוח בקרה לביצועי הענן ובוחרים באפשרויות הבאות שמפורטות בצילום המסך שלמטה, שבו מוצג זמן אחזור של 32 עד 39 אלפיות השנייה.

סיכום קו בסיס של 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. Hey Validation (us-central1)
אחרי שמריצים את הפקודה Hey ממופע של מחשוב באזור 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 → Performance Dashboard (לוח בקרה לביצועי הענן) ובוחרים באפשרויות הבאות שמפורטות בצילום המסך שלמטה, שבו מוצג זמן אחזור של 0 .2 עד 0 .8 אלפיות השנייה.

סיכום קו בסיס של HEY us-central1
השוואה של זמן האחזור הכולל שדווח על ידי כלי הבדיקה מניבה זמן אחזור נמוך יותר מאשר ב-west-client, בגלל המחשוב (central-client) ונקודות הקצה של Vertex (מודל וחיזוי אונליין) באותו אזור.
כלי לבדיקת זמן האחזור | משך |
ניתוח נתונים של הרשת: זמן האחזור באזור us-central1 | ~0.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 חושב שהדרכות הן מדהימות!!

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

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

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

מה השלב הבא?
כדאי לעיין במדריכים הבאים…
קריאה נוספת וסרטונים
- סקירה כללית על Private Service Connect
- מה זה Private Service Connect?
- איך מקבלים חיזויים ממודל ML
- מה זה Vertex AI?