1. סקירה כללית
בשיעור ה-Lab הזה נשתמש ב-Vertex AI כדי לקבל תחזיות אונליין ובאצווה ממודל מותאם אישית.
שיעור ה-Lab הזה הוא חלק מסדרת הסרטונים יצירת אב טיפוס. חשוב להשלים את שיעור ה-Lab הקודם לפני שמנסים את השיעור הזה. אפשר לצפות בסרטון המצורף כדי לקבל מידע נוסף:
.
מה תלמדו
תלמדו איך:
- העלאת מודלים למרשם המודלים של Vertex AI
- פריסת מודל בנקודת קצה (endpoint)
- קבלת חיזויים אונליין ובאצווה באמצעות ממשק המשתמש ו-SDK
העלות הכוללת להרצת הסדנה הזו ב-Google Cloud היא כ-$1.
2. מבוא ל-Vertex AI
במעבדה הזו נעשה שימוש במוצרי ה-AI החדשים ביותר שזמינים ב-Google Cloud. Vertex AI משלבת את חבילות ה-ML ב-Google Cloud לחוויית פיתוח חלקה. בעבר, היה אפשר לגשת למודלים שהותאמו אישית ולמודלים שהותאמו באמצעות AutoML דרך שירותים נפרדים. המוצר החדש משלב את שניהם ב-API אחד, יחד עם מוצרים חדשים אחרים. אפשר גם להעביר פרויקטים קיימים ל-Vertex AI.
Vertex AI כולל הרבה מוצרים שונים לתמיכה בתהליכי עבודה של למידת מכונה מקצה לקצה. בשיעור ה-Lab הזה נתמקד במוצרים הבאים: Predictions ו-Workbench
3. הגדרת הסביבה
כדי להגדיר את הסביבה, מבצעים את השלבים במאמר אימון מודלים מותאמים אישית באמצעות Vertex AI.
4. העלאת מודל למרשם
כדי שנוכל להשתמש במודל שלנו כדי לקבל תחזיות, אנחנו צריכים להעלות אותו למרשם המודלים של Vertex AI, שהוא מאגר שבו אפשר לנהל את מחזור החיים של מודלים של למידת מכונה.
אפשר להעלות מודלים כשמגדירים משימה מותאמת אישית של אימון, כפי שמתואר בהמשך.
לחלופין, אפשר לייבא מודלים אחרי השלמת משימת האימון, כל עוד שומרים את הארטיפקטים של המודל שנשמרו בקטגוריה של Cloud Storage. זו האפשרות שבה נשתמש בשיעור ה-Lab הזה.
עוברים לקטע Models במסוף.
בוחרים באפשרות ייבוא.
בוחרים באפשרות ייבוא כמודל חדש ומזינים שם למודל.
בקטע Model settings מייבאים את המודל באמצעות קונטיינר שנוצר מראש ומשתמשים ב-TensorFlow 2.8. כאן אפשר לראות את הרשימה המלאה של מאגרי חיזוי מוכנים.
לאחר מכן, מציינים את הנתיב לקטגוריה של Cloud Storage שבה שמרתם את הארטיפקטים של המודל במשימה של האימון בהתאמה אישית. הוא אמור להיראות כך: gs://{PROJECT_ID}-bucket/model_output
נעביר את הקטע Explainability (יכולת הסבר), אבל אם אתם רוצים לקבל מידע נוסף על Vertex Explainable AI, תוכלו לעיין במסמכים.
לאחר ייבוא המודל, הוא יופיע במרשם.
הערה: אם רוצים לעשות זאת דרך ה-SDK במקום דרך ממשק המשתמש, אפשר להריץ את הפקודה הבאה מהמחברות של Workbench כדי להעלות את המודל.
from google.cloud import aiplatform
my_model = aiplatform.Model.upload(display_name='flower-model',
artifact_uri='gs://{PROJECT_ID}-bucket/model_output',
serving_container_image_uri='us-docker.pkg.dev/vertex-ai/prediction/tf2-cpu.2-8:latest')
5. פריסת מודל בנקודת קצה
יש שני סוגים של משימות חיזוי שאפשר להריץ ב-Vertex AI: באצווה ואונליין.
חיזוי באצווה הוא בקשה לא סנכרונית. האפשרות הזו מתאימה כשלא צריך תשובה מיידית ורוצים לעבד נתונים שנצברו בבקשה אחת.
לעומת זאת, אם רוצים לקבל חיזויים עם זמן אחזור קצר מנתונים שמועברים למודל בזמן אמת, צריך להשתמש בחיזוי אונליין.
עכשיו, כשהמודל נמצא במרשם, אפשר להשתמש בו כדי לבצע תחזיות באצווה.
אבל אם רוצים לקבל תחזיות אונליין, צריך לפרוס את המודל לנקודת קצה. התכונה משייכת את פריטי המידע שנוצרו בתהליך הפיתוח (Artifact) של המודל שנשמרו למשאבים פיזיים לצורך תחזיות של זמן אחזור קצר.
כדי לפרוס לנקודת קצה, לוחצים על שלוש הנקודות בפינה השמאלית הרחוקה של המודל ובוחרים באפשרות פריסה לנקודת קצה.
נותנים שם לנקודת הקצה, משאירים את שאר ההגדרות כפי שהן ולוחצים על המשך.
נקודות קצה תומכות בהתאמה אוטומטית לעומס (autoscaling), כלומר אפשר להגדיר ערך מינימלי וערך מקסימלי, וצווארי בקבוק של מחשוב יתכווננו כדי לעמוד בביקוש התנועה בתוך הגבולות האלה.
מכיוון שהמעבדה הזו היא רק להדגמה ולא נשתמש בנקודת הקצה הזו לתנועה רבה, אפשר להגדיר את מספר התעודות המקסימלי לחישוב ל-1 ולבחור ב-n1-standard-4 בתור סוג המכונה.
נעביר על'מעקב אחר מודלים', אבל אם אתם רוצים לקבל מידע נוסף על התכונה הזו, תוכלו לעיין במסמכים.
לאחר מכן לוחצים על DEPLOY.
הפריסה תימשך כמה דקות אבל בסיום תראו שסטטוס הפריסה של המודל השתנה לDeployed on Vertex AI.
כדי לפרוס מודל באמצעות ה-SDK, מריצים את הפקודה הבאה.
my_model = aiplatform.Model("projects/{PROJECT_NUMBER}/locations/us-central1/models/{MODEL_ID}")
endpoint = my_model.deploy(
deployed_model_display_name='my-endpoint',
traffic_split={"0": 100},
machine_type="n1-standard-4",
accelerator_count=0,
min_replica_count=1,
max_replica_count=1,
)
6. קבלת חיזויים
חיזויים אונליין
כשהמודל נפרס בנקודת קצה, אפשר להפעיל אותו כמו כל נקודת קצה אחרת של REST. כלומר, אפשר להפעיל אותו מתוך פונקציית Cloud, מתוך צ'אטבוט, מאפליקציית אינטרנט וכו'.
למטרות הדגמה, נפעיל את נקודת הקצה הזו מ-Workbench.
חוזרים למחברת שיצרתם בסדנה הקודמת. יוצרים מסמך notebook חדש של TensorFlow 2 במרכז האפליקציות.
ייבוא של Vertex AI Python SDK, numpy ו-PIL
from google.cloud import aiplatform
import numpy as np
from PIL import Image
מורידים את התמונה שלמטה ומעלים אותה למכונה של Workbench. נבדוק את המודל בתמונה הזו של בן-חרצית.
קודם כול, מגדירים את נקודת הקצה. צריך להחליף את {PROJECT_NUMBER}
ואת {ENDPOINT_ID}
שלמטה.
endpoint = aiplatform.Endpoint(
endpoint_name="projects/{PROJECT_NUMBER}/locations/us-central1/endpoints/{ENDPOINT_ID}")
אפשר למצוא את endpoint_id בקטע Endpoints במסוף Cloud.
מספר הפרויקט מופיע בדף הבית של המסוף. חשוב לשים לב: המזהה הזה שונה ממזהה הפרויקט.
הקוד הבא פותח את התמונה ומשנה את הגודל שלה באמצעות PIL.
IMAGE_PATH = "test-image.jpg"
im = Image.open(IMAGE_PATH)
לאחר מכן, ממירים את נתוני numpy לסוג float32 ולרשימת. אנחנו ממירים לרשימה כי נתוני numpy לא ניתנים לסריאליזציה ב-JSON, ולכן אי אפשר לשלוח אותם בגוף הבקשה.
x_test = np.asarray(im).astype(np.float32).tolist()
לבסוף, מחייגים למספר endpoint.predict
.
endpoint.predict(instances=x_test).predictions
התוצאה שמתקבלת היא הפלט של המודל, שהוא שכבת softmax עם 5 יחידות. אם רוצים לכתוב לוגיקה מותאמת אישית כדי להחזיר את תווית המחרוזת במקום את המדד, אפשר להשתמש בתרחישי חיזוי מותאמים אישית.
חיזויים באצווה
יש דרכים שונות לעצב את הנתונים לחיזוי באצווה. כדי לפשט את הדברים, אנחנו נזנח את נתוני המספריים לקובץ json ונשמור את הקובץ ב-Cloud Storage.
with open('test-data.json', 'w') as fp:
json.dump(x_test, fp)
!gsutil cp test-data.json gs://{YOUR_BUCKET}
בשלב הבא, מגדירים את המודל. אופן הפעולה הזה דומה להגדרה של נקודת הקצה, אבל צריך לספק את ה-MODEL_ID
במקום ENDPOINT_ID
.
my_model=aiplatform.Model("projects/{PROJECT_NUMBER}/locations/us-central1/models/{MODEL_ID}")
כדי למצוא את מזהה המודל, בוחרים את שם המודל והגרסה בקטע Models במסוף, ואז בוחרים באפשרות VERSION DETAILS.
לבסוף, משתמשים ב-SDK כדי להפעיל משימה של חיזוי באצווה, מעבירים את הנתיב ב-Cloud Storage שבו שמרתם את קובץ ה-JSON ומספקים מיקום ב-Cloud Storage שבו יאוחסנו תוצאות החיזוי.
batch_prediction_job = my_model.batch_predict(
job_display_name='flower_batch_predict',
gcs_source='gs://{YOUR_BUCKET}/test-data.json',
gcs_destination_prefix='gs://{YOUR_BUCKET}/prediction-results',
machine_type='n1-standard-4',)
אפשר לעקוב אחרי התקדמות המשימה בקטע Batch Predictions (תחזיות בכמות גדולה) במסוף. חשוב לזכור שלא יעיל להריץ משימת חיזוי באצווה לתמונה אחת.
המאמרים הבאים
בדוגמה הזו, קודם המרנו את תמונת הבדיקה ל-NumPy לפני ביצוע הקריאה של החיזוי. בתרחישי שימוש ריאליסטיים יותר, סביר להניח שתרצו לשלוח את התמונה עצמה ולא להטעין אותה קודם ל-NumPy. כדי לעשות זאת, צריך לשנות את פונקציית ההצגה של TensorFlow כדי לפענח ביטים של תמונות. הדרך הזו דורשת קצת יותר עבודה, אבל היא יעילה הרבה יותר לתמונות גדולות ולבניית אפליקציות. כאן אפשר לראות דוגמה.
🎉 מזל טוב! 🎉
למדתם איך להשתמש ב-Vertex AI כדי:
- העלאת מודלים למרשם המודלים של Vertex AI
- קבלת חיזויים אונליין ובאצווה
מידע נוסף על החלקים השונים של Vertex זמין במסמכי העזרה.
7. הסרת המשאבים
כדאי לבטל את הפריסה של המודלים מנקודת הקצה אם לא מתכננים להשתמש בהם. אפשר גם למחוק את נקודת הקצה לגמרי. תמיד אפשר לפרוס מחדש מודל לנקודת קצה, אם צריך.
אחרי 180 דקות ללא פעילות, notebooks שמנוהלים ב-Workbench מופסק באופן אוטומטי, כך שלא צריך לחשוש מכיבוי המכונה. כדי לכבות את המכונה באופן ידני, לוחצים על הלחצן Stop בקטע Vertex AI Workbench במסוף. כדי למחוק את המחברות כולה, לוחצים על הלחצן 'מחיקה'.
כדי למחוק את הקטגוריה של האחסון, עוברים לתפריט הניווט במסוף Cloud, לוחצים על Storage, בוחרים את הקטגוריה ולוחצים על Delete: