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

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

סקירה כללית על מוצרי Vertex

3. הגדרת הסביבה

כדי להגדיר את הסביבה, מבצעים את השלבים במאמר אימון מודלים מותאמים אישית באמצעות Vertex AI.

4. העלאת מודל למרשם

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

אפשר להעלות מודלים כשמגדירים משימה מותאמת אישית של אימון, כפי שמתואר בהמשך.

training_prediction

לחלופין, אפשר לייבא מודלים אחרי השלמת משימת האימון, כל עוד שומרים את הארטיפקטים של המודל שנשמרו בקטגוריה של Cloud Storage. זו האפשרות שבה נשתמש בשיעור ה-Lab הזה.

עוברים לקטע Models במסוף.

תפריט המודל

בוחרים באפשרות ייבוא.

import_model

בוחרים באפשרות ייבוא כמודל חדש ומזינים שם למודל.

new_model

בקטע Model settings מייבאים את המודל באמצעות קונטיינר שנוצר מראש ומשתמשים ב-TensorFlow 2.8. כאן אפשר לראות את הרשימה המלאה של מאגרי חיזוי מוכנים.

לאחר מכן, מציינים את הנתיב לקטגוריה של Cloud Storage שבה שמרתם את הארטיפקטים של המודל במשימה של האימון בהתאמה אישית. הוא אמור להיראות כך: gs://{PROJECT_ID}-bucket/model_output

נעביר את הקטע Explainability (יכולת הסבר), אבל אם אתם רוצים לקבל מידע נוסף על Vertex Explainable AI, תוכלו לעיין במסמכים.

לאחר ייבוא המודל, הוא יופיע במרשם.

flower_model

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

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

deploy_model

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

endpoint_name

נקודות קצה תומכות בהתאמה אוטומטית לעומס (autoscaling), כלומר אפשר להגדיר ערך מינימלי וערך מקסימלי, וצווארי בקבוק של מחשוב יתכווננו כדי לעמוד בביקוש התנועה בתוך הגבולות האלה.

מכיוון שהמעבדה הזו היא רק להדגמה ולא נשתמש בנקודת הקצה הזו לתנועה רבה, אפשר להגדיר את מספר התעודות המקסימלי לחישוב ל-1 ולבחור ב-n1-standard-4 בתור סוג המכונה.

endpoint_compute

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

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

tf_kernel

ייבוא של Vertex AI Python SDK,‏ numpy ו-PIL

from google.cloud import aiplatform

import numpy as np
from PIL import Image

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

test_image

קודם כול, מגדירים את נקודת הקצה. צריך להחליף את {PROJECT_NUMBER} ואת {ENDPOINT_ID} שלמטה.

endpoint = aiplatform.Endpoint(
    endpoint_name="projects/{PROJECT_NUMBER}/locations/us-central1/endpoints/{ENDPOINT_ID}")

אפשר למצוא את endpoint_id בקטע Endpoints במסוף Cloud.

endpoint_id

מספר הפרויקט מופיע בדף הבית של המסוף. חשוב לשים לב: המזהה הזה שונה ממזהה הפרויקט.

project_number

הקוד הבא פותח את התמונה ומשנה את הגודל שלה באמצעות 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.

model_id

לבסוף, משתמשים ב-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 (תחזיות בכמות גדולה) במסוף. חשוב לזכור שלא יעיל להריץ משימת חיזוי באצווה לתמונה אחת.

batch_pred

המאמרים הבאים

בדוגמה הזו, קודם המרנו את תמונת הבדיקה ל-NumPy לפני ביצוע הקריאה של החיזוי. בתרחישי שימוש ריאליסטיים יותר, סביר להניח שתרצו לשלוח את התמונה עצמה ולא להטעין אותה קודם ל-NumPy. כדי לעשות זאת, צריך לשנות את פונקציית ההצגה של TensorFlow כדי לפענח ביטים של תמונות. הדרך הזו דורשת קצת יותר עבודה, אבל היא יעילה הרבה יותר לתמונות גדולות ולבניית אפליקציות. כאן אפשר לראות דוגמה.

🎉 מזל טוב! 🎉

למדתם איך להשתמש ב-Vertex AI כדי:

  • העלאת מודלים למרשם המודלים של Vertex AI
  • קבלת חיזויים אונליין ובאצווה

מידע נוסף על החלקים השונים של Vertex זמין במסמכי העזרה.

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

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

undeploy_model

אחרי 180 דקות ללא פעילות, notebooks שמנוהלים ב-Workbench מופסק באופן אוטומטי, כך שלא צריך לחשוש מכיבוי המכונה. כדי לכבות את המכונה באופן ידני, לוחצים על הלחצן Stop בקטע Vertex AI Workbench במסוף. כדי למחוק את המחברות כולה, לוחצים על הלחצן 'מחיקה'.

עצירת המופע

כדי למחוק את הקטגוריה של האחסון, עוברים לתפריט הניווט במסוף Cloud, לוחצים על Storage, בוחרים את הקטגוריה ולוחצים על Delete:

מחיקת האחסון