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

1. סקירה כללית

בשיעור ה-Lab הזה תשתמשו ב-Vertex AI כדי לקבל תחזיות אונליין ותחזיות באצווה ממודל שאומן בהתאמה אישית.

שיעור ה-Lab הזה הוא חלק מסדרת הסרטונים Prototype to Production. חשוב להשלים את שיעור ה-Lab הקודם לפני שמנסים את שיעור ה-Lab הזה. אפשר לצפות בסרטון הבא כדי לקבל מידע נוסף:

.

מה לומדים

במאמר הזה נסביר איך:

  • העלאת מודלים ל-Vertex AI Model Registry
  • פריסת מודל לנקודת קצה
  • קבלת תחזיות אונליין ותחזיות באצווה באמצעות ממשק המשתמש ו-SDK

העלות הכוללת להרצת שיעור ה-Lab הזה ב-Google Cloud היא בערך 1$‎.

2. מבוא ל-Vertex AI

בשיעור ה-Lab הזה נעשה שימוש במוצר ה-AI החדש ביותר שזמין ב-Google Cloud. ‫Vertex AI משלב את מוצרי ה-ML ב-Google Cloud לחוויית פיתוח חלקה. בעבר, היה אפשר לגשת למודלים שאומנו באמצעות AutoML ולמודלים בהתאמה אישית דרך שירותים נפרדים. המוצר החדש משלב את שניהם ב-API אחד, יחד עם מוצרים חדשים אחרים. אפשר גם להעביר פרויקטים קיימים אל Vertex AI.

‫Vertex AI כולל מוצרים רבים ושונים לתמיכה בתהליכי עבודה של למידת מכונה מקצה לקצה. בשיעור ה-Lab הזה נתמקד במוצרים שמודגשים בהמשך: תחזיות וסביבת עבודה

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

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

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

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

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

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

training_prediction

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

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

תפריט המודלים

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

import_model

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

new_model

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

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

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

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

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 Functions, מצ'אטבוט, מאפליקציית אינטרנט וכו'.

לצורך הדגמה, נקרא לנקודת הקצה הזו מ-Workbench.

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

תחזיות באצווה

יש כמה דרכים לעצב את הנתונים לצורך חיזוי באצווה. לצורך פשטות, נשליך את נתוני numpy לקובץ json ונשמור את הקובץ ב-Cloud Storage.

with open('test-data.json', 'w') as fp:
    json.dump(x_test, fp)

!gsutil cp test-data.json gs://{YOUR_BUCKET}

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

‫🎉 איזה כיף! 🎉

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

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

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

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

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

undeploy_model

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

עצירת מכונה

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

מחיקת האחסון