Vertex AI Workbench: פיתוח מודל סיווג תמונות באמצעות למידת העברה וקובץ ה-notebook

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

בשיעור ה-Lab הזה תלמדו איך להגדיר ולהשיק הפעלות notebook באמצעות Vertex AI Workbench.

מה לומדים

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

  • שימוש בפרמטרים ב-notebook
  • הגדרה והפעלה של הפעלות notebook דרך ממשק המשתמש של Vertex AI Workbench

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

2. מבוא ל-Vertex AI

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

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

Vertex AI Workbench עוזר למשתמשים ליצור במהירות תהליכי עבודה מקצה לקצה שמבוססים על מסמכי notebook, באמצעות שילוב עמוק עם שירותי נתונים (כמו Dataproc,‏ Dataflow,‏ BigQuery ו-Dataplex) ו-Vertex AI. בעזרת ה-API הזה, מדעני הנתונים יכולים להתחבר לשירותי הנתונים של GCP, לנתח מערכי נתונים, להתנסות בשיטות שונות ליצירת מודלים, לפרוס מודלים מאומנים בסביבת הייצור ולנהל את MLOps במהלך מחזור החיים של המודל.

3. סקירה כללית של התרחיש לדוגמה

בשיעור ה-Lab הזה תלמדו איך להשתמש בלמידת העברה כדי לאמן מודל לסיווג תמונות באמצעות מערך הנתונים DeepWeeds מ-TensorFlow Datasets. תשתמשו ב-TensorFlow Hub כדי להתנסות עם וקטורי מאפיינים שחולצו מארכיטקטורות שונות של מודלים, כמו ResNet50,‏ Inception ו-MobileNet, כולם מודלים שהוכשרו מראש על מערך הנתונים של ImageNet. בעזרת המאגר של ה-notebook דרך ממשק המשתמש של Vertex AI Workbench, תוכלו להפעיל משימות ב-Vertex AI Training שמשתמשות במודלים המוכנים האלה, ולאמן מחדש את השכבה האחרונה כדי לזהות את הכיתות ממערך הנתונים DeepWeeds.

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

כדי להריץ את הקודלה הזה, צריך פרויקט ב-Google Cloud Platform שבו החיוב מופעל. כדי ליצור פרויקט, פועלים לפי ההוראות שמפורטות כאן.

שלב 1: מפעילים את ממשק ה-API של Compute Engine

עוברים אל Compute Engine ובוחרים באפשרות Enable (הפעלה) אם היא עדיין לא מופעלת.

שלב 2: מפעילים את Vertex AI API

עוברים אל הקטע Vertex AI במסוף Cloud ולוחצים על Enable Vertex AI API.

מרכז הבקרה של Vertex AI

שלב 3: יצירת מכונה של Vertex AI Workbench

בקטע Vertex AI במסוף Cloud, לוחצים על Workbench:

תפריט Vertex AI

מפעילים את Notebooks API, אם הוא לא פועל.

Notebook_api

לאחר ההפעלה, לוחצים על פנקסי רשימות מנוהלים:

Notebooks_UI

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

new_notebook

נותנים שם למחברת ולוחצים על הגדרות מתקדמות.

create_notebook

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

idle_timeout

אפשר להשאיר את כל שאר ההגדרות המתקדמות כפי שהן.

לאחר מכן, לוחצים על יצירה.

אחרי יצירת המכונה, בוחרים באפשרות Open JupyterLab.

open_jupyterlab

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

אימות

ל-Vertex AI Workbench יש שכבת תאימות למחשוב שמאפשרת להשיק ליבה (kernel) של TensorFlow, PySpark, R וכו', והכול ממכונת notebook אחת. אחרי האימות, תוכלו לבחור את סוג המחברת שבה תרצו להשתמש במרכז האפליקציות.

בשיעור ה-Lab הזה, בוחרים את הליבה 2 של TensorFlow.

tf_kernel

5. כתיבת קוד אימון

מערך הנתונים של DeepWeeds כולל 17,509 תמונות שמצלמים שמונה מינים שונים של עשבים שמקורם באוסטרליה. בקטע הזה תכתבו את הקוד לעיבוד מקדים של מערך הנתונים DeepWeeds, ותיצרו ותאמינו מודל לסיווג תמונות באמצעות וקטורי תכונות שהורדתם מ-TensorFlow Hub.

צריך להעתיק את קטעי הקוד הבאים לתאים של ה-notebook. ביצוע התאים הוא אופציונלי.

שלב 1: מורידים את מערך הנתונים ומעבירים אותו עיבוד מקדים

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

!pip install tfds-nightly

לאחר מכן, מייבאים את הספריות הנדרשות:

import tensorflow as tf
import tensorflow_datasets as tfds
import tensorflow_hub as hub

מורידים את הנתונים מ-TensorFlow Datasets ומחפשים את מספר הכיתות ואת גודל מערך הנתונים.

data, info = tfds.load(name='deep_weeds', as_supervised=True, with_info=True)
NUM_CLASSES = info.features['label'].num_classes
DATASET_SIZE = info.splits['train'].num_examples

מגדירים פונקציית עיבוד מראש כדי להגדיל את נתוני התמונה ב-255.

def preprocess_data(image, label):
  image = tf.image.resize(image, (300,300))
  return tf.cast(image, tf.float32) / 255., label

מערך הנתונים DeepWeeds לא כולל חלוקות לאימון/אימות. הוא מגיע רק עם מערך נתונים לאימון. בקוד שבהמשך משתמשים ב-80% מהנתונים האלה לאימון, וב-20% הנותרים לאימות.

# Create train/validation splits

# Shuffle dataset
dataset = data['train'].shuffle(1000)

train_split = 0.8
val_split = 0.2
train_size = int(train_split * DATASET_SIZE)
val_size = int(val_split * DATASET_SIZE)

train_data = dataset.take(train_size)
train_data  = train_data.map(preprocess_data)
train_data  = train_data.batch(64)

validation_data = dataset.skip(train_size)
validation_data  = validation_data.map(preprocess_data)
validation_data  = validation_data.batch(64)

שלב 2: יצירת מודל

אחרי שיצרתם מערכי נתונים לאימון ולאימות, אתם מוכנים ליצור את המודל. TensorFlow Hub מספק ווקטורים של תכונות, שהם מודלים שהותאמו מראש בלי שכבת הסיווג העליונה. כדי ליצור כלי לחילוץ תכונות, עטיפה את המודל שעבר אימון מראש ב-hub.KerasLayer, שעוטף את TensorFlow savedModel כשכבת Keras. לאחר מכן תוסיפו שכבת סיווג ותיצרו מודל באמצעות Keras Sequential API.

קודם מגדירים את הפרמטר feature_extractor_model, שהוא השם של וקטור המאפיינים של TensorFlow Hub שבו תשתמשו כבסיס למודל.

feature_extractor_model = "inception_v3"

בשלב הבא צריך להפוך את התא הזה לתא פרמטר, שיאפשר לך להעביר ערך של feature_extractor_model בזמן הריצה.

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

property_inspector

תגים הם דרך פשוטה להוסיף מטא-נתונים למחברת. מקלידים 'parameters' (פרמטרים) בתיבה Add Tag (הוספת תג) ומקישים על Enter. בהמשך, כשמגדירים את הביצוע, מעבירים את הערכים השונים שרוצים לבדוק, במקרה הזה מודל TensorFlow Hub. חשוב לזכור שצריך להקליד את המילה parameters (ולא מילה אחרת), כי כך הכלי להפעלת המחברות יידע אילו תאים להגדיר כפרמטרים.

add_tag

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

יוצרים תא חדש ומגדירים את tf_hub_uri, שבו אתם משתמשים באינטרפולציה למחרוזות כדי להחליף את השם של המודל שעבר אימון מראש שרוצים להשתמש בו כמודל הבסיסי לביצוע ספציפי של ה-notebook. כברירת מחדל, הגדרת את feature_extractor_model כ-"inception_v3", אבל ערכים חוקיים אחרים הם "resnet_v2_50" או "mobilenet_v1_100_224". אפשר למצוא אפשרויות נוספות בקטלוג של TensorFlow Hub.

tf_hub_uri = f"https://tfhub.dev/google/imagenet/{feature_extractor_model}/feature_vector/5"

בשלב הבא יוצרים את הכלי לחילוץ המאפיינים באמצעות hub.KerasLayer ומעבירים את tf_hub_uri שהגדרתם למעלה. מגדירים את הארגומנט trainable=False כדי להקפיא את המשתנים, כך שהאימון ישנה רק את שכבת הסיווג החדשה שתוסיפו למעלה.

feature_extractor_layer = hub.KerasLayer(
    tf_hub_uri,
    trainable=False)

כדי להשלים את המודל, עוטפים את השכבה של מחלץ המאפיינים במודל tf.keras.Sequential ומוסיפים שכבה מקושרת באופן מלא לצורך סיווג. מספר היחידות בראש הסיווג הזה צריך להיות שווה למספר המחלקות במערך הנתונים:

model = tf.keras.Sequential([
  feature_extractor_layer,
  tf.keras.layers.Dense(units=NUM_CLASSES)
])

לבסוף, הידור וההתאמה של המודל.

model.compile(
  optimizer=tf.keras.optimizers.Adam(),
  loss=tf.keras.losses.SparseCategoricalCrossentropy(from_logits=True),
  metrics=['acc'])

model.fit(train_data, validation_data=validation_data, epochs=3)

6. הפעלת הפנקס

לוחצים על הסמל Executor בחלק העליון של המחברות.

מבצע/ת

שלב 1: הגדרה של משימת האימון

נותנים שם להפעלה ומספקים קטגוריית אחסון בפרויקט.

executor_config

מגדירים את סוג המכונה בתור 4 מעבדים, RAM בנפח 15GB.

ומוסיפים מעבד גרפי (GPU) אחד של NVIDIA.

מגדירים את הסביבה כ-TensorFlow Enterprise 2.6 (GPU).

בוחרים באפשרות 'ביצוע חד-פעמי'.

שלב 2: מגדירים את הפרמטרים

לוחצים על התפריט הנפתח אפשרויות מתקדמות כדי להגדיר את הפרמטר. כותבים feature_extractor_model=resnet_v2_50 בתיבה. הפעולה הזו תבטל את הערך inception_v3, ערך ברירת המחדל שהגדרתם לפרמטר הזה ב-notebook, עם הערך resnet_v2_50.

advanced_options

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

לאחר מכן לוחצים על שליחה.

שלב 3: בודקים את התוצאות

בכרטיסייה 'פעולות' בממשק המשתמש של המסוף אפשר לראות את הסטטוס של הפעלת ה-notebook.

executions_UI

אם תלחצו על שם הביצוע, תועברו למשימת האימון של Vertex AI שבה ה-notebook פועל.

vertex_training

כשהמשימה תסתיים, תוכלו ללחוץ על VIEW RESULT כדי לראות את מחברת הפלט.

view_result

ב-notebook של הפלט, הערך של feature_extractor_model הוחלף בערך שהעברת בזמן הריצה.

param_cells

🎉 מזל טוב! 🎉

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

  • שימוש בפרמטרים ב-notebook
  • הגדרה והפעלה של הרצות של notebooks מממשק המשתמש של Vertex AI Workbench

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

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

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

delete

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

מחיקת האחסון