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

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

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

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

.

מה לומדים

נסביר לכם איך:

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

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

2. מבוא ל-Vertex AI

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

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

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

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

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

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

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

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

training_prediction

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

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

תפריט המודל

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

import_model

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

new_model

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

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

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

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

flower_model

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

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

deploy_model

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

endpoint_name

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

שיעור ה-Lab הזה מיועד להדגמה בלבד, ואנחנו לא מתכוונים להשתמש בנקודת הקצה הזו לתנועת גולשים רבה. לכן, אתם יכולים להגדיר את הערך Max number of compute notes (מספר מקסימלי של מחשוב) ל-1, ולבחור ב-n1-standard-4 בתור Machine type.

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. קבלת חיזויים

חיזויים אונליין

כשהמודל שלך פרוס בנקודת קצה, ניתן להגיע אליו כמו לכל נקודת קצה אחרת של מנוחה. כלומר, אפשר לקרוא לו מפונקציה של Cloud Functions, מצ'אט בוט, מאפליקציית אינטרנט וכו'.

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

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

לאחר מכן ממירים את הנתונים המספריים לסוג float32 ולרשימה. אנחנו ממירים לרשימה כי נתוני מספריים לא ניתנים לסידור בפורמט 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}") 

כדי למצוא את מזהה הדגם, בוחרים את שם הדגם והגרסה שלו בקטע 'מודלים' במסוף ולאחר מכן בוחרים באפשרות פרטי גרסה

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_pred

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

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

🎉 כל הכבוד! 🎉

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

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

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

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

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

undeploy_model

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

עצירת המופע

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

מחיקת האחסון