מבצעים אימון בלי שרת (serverless) ב-Vertex AI כדי להריץ קוד אימון משלכם ללמידת מכונה (ML) בענן, במקום להשתמש ב-AutoML. במסמך הזה מתוארות שיטות מומלצות שכדאי להביא בחשבון כשכותבים קוד לאימון.
.בחירת מבנה של קוד אימון
קודם כל, קובעים את המבנה של קוד האימון של ה-ML. אפשר לספק קוד אימון ל-Vertex AI באחת מהצורות הבאות:
סקריפט Python לשימוש עם קונטיינר מוכן מראש. משתמשים ב-Vertex AI SDK כדי ליצור משימה בהתאמה אישית. בשיטה הזו אפשר לספק את אפליקציית האימון כסקריפט Python יחיד.
אפליקציית אימון של Python לשימוש עם קונטיינר מוכן מראש. יוצרים הפצה של מקור Python עם קוד שמכשיר מודל ML ומייצא אותו ל-Cloud Storage. אפליקציית האימון הזו יכולה להשתמש בכל התלויות שכלולות בקונטיינר הבנוי מראש שמתכננים להשתמש בו.
משתמשים באפשרות הזו אם אחד מהקונטיינרים המוכנים מראש של Vertex AI לאימון כולל את כל התלויות שנדרשות לאימון. לדוגמה, אם רוצים לאמן באמצעות PyTorch, scikit-learn, TensorFlow או XGBoost, כנראה שהאפשרות הזו מתאימה יותר.
כדי לקרוא על שיטות מומלצות שספציפיות לאפשרות הזו, אפשר לעיין במדריך בנושא יצירת אפליקציית אימון של Python.
קובץ אימג' של קונטיינר בהתאמה אישית. יוצרים קובץ אימג' של Docker container image עם קוד שמכשיר מודל ML ומייצא אותו ל-Cloud Storage. כוללים בקובץ אימג' של קונטיינר את כל יחסי התלות שנדרשים לקוד.
משתמשים באפשרות הזו אם רוצים להשתמש בתלות שלא נכללת באחד מהקונטיינרים המוכנים מראש של Vertex AI לאימון. לדוגמה, אם רוצים לאמן מודל באמצעות מסגרת Python ML שלא זמינה במאגר מובנה מראש, או אם רוצים לאמן מודל באמצעות שפת תכנות שאינה Python, זו האפשרות הטובה יותר.
כדי ללמוד על שיטות מומלצות שרלוונטיות לאפשרות הזו, אפשר לעיין במדריך בנושא יצירת קובץ אימג' של קונטיינר בהתאמה אישית.
בהמשך המסמך מתוארות שיטות מומלצות שרלוונטיות לשני מבני קוד האימון.
שיטות מומלצות לכל קוד האימון ללא שרת
כשכותבים קוד אימון בלי שרת (serverless) ל-Vertex AI, חשוב לזכור שהקוד יפעל במכונה וירטואלית אחת או יותר בניהול שלGoogle Cloud. בקטע הזה מתוארות שיטות מומלצות שרלוונטיות לכל קוד האימון המותאם אישית.
גישה לשירותים של Google Cloud בתוך הקוד
בכמה מהקטעים הבאים מתואר איך לגשת לשירותים אחרים של Google CloudGoogle מהקוד. כדי לגשת לשירותים, צריך לכתוב את קוד האימון כך שישתמש ב-Application Default Credentials (ADC). Google Cloud בספריות לקוח רבות, האימות באמצעות ADC מוגדר כברירת מחדל. Google Cloud לא צריך להגדיר משתני סביבה. מערכת Vertex AI מגדירה אוטומטית את ADC לאימות בתור הסוכן של שירות הקוד המותאם אישית של Vertex AI עבור הפרויקט (כברירת מחדל) או בתור חשבון שירות מותאם אישית (אם הגדרתם כזה).
עם זאת, כשמשתמשים בספריית לקוח בקוד, יכול להיות ש-Vertex AI לא תמיד יתחבר לפרויקט הנכון כברירת מחדל. Google Cloud Google Cloud אם נתקלתם בשגיאות הרשאה, יכול להיות שהבעיה היא שאתם מתחברים לפרויקט הלא נכון.
הבעיה הזו מתרחשת כי Vertex AI לא מריץ את הקוד שלכם ישירות בפרויקט Google Cloud . במקום זאת, Vertex AI מריץ את הקוד באחד מכמה פרויקטים נפרדים שמנוהלים על ידי Google. Vertex AI משתמש בפרויקטים האלה באופן בלעדי לפעולות שקשורות לפרויקט שלכם. לכן, אל תנסו להסיק מזהה פרויקט מהסביבה בקוד של האימון או ההסקה. צריך לציין מזהי פרויקטים באופן מפורש.
אם לא רוצים לכתוב מזהה פרויקט בתוך קוד האימון, אפשר להפנות למשתנה הסביבה CLOUD_ML_PROJECT_ID: Vertex AI מגדיר את משתנה הסביבה הזה בכל מאגר אימון בלי שרת, כך שיכיל את מספר הפרויקט של הפרויקט שבו התחלתם את האימון בלי שרת. בכלי Google Cloud רבים אפשר להזין את מספר הפרויקט במקום מזהה הפרויקט.
לדוגמה, אם רוצים להשתמש בלקוח Python ל-Google BigQuery כדי לגשת לטבלה ב-BigQuery באותו פרויקט, אל תנסו להסיק את הפרויקט בקוד האימון:
בחירת פרויקט משתמעת
from google.cloud import bigquery
client = bigquery.Client()
במקום זאת, צריך להשתמש בקוד שבוחר פרויקט באופן מפורש:
בחירה מפורשת של פרויקט
import os
from google.cloud import bigquery
project_number = os.environ["CLOUD_ML_PROJECT_ID"]
client = bigquery.Client(project=project_number)
אם נתקלתם בשגיאות הרשאה אחרי שהגדרתם את הקוד בדרך הזו, כדאי לקרוא את הקטע הבא בנושא אילו משאבים הקוד יכול לגשת אליהם כדי לשנות את ההרשאות שזמינות לקוד האימון.
אילו משאבים הקוד יכול לגשת אליהם
כברירת מחדל, לאפליקציית האימון יש גישה לכל Google Cloud המשאבים שזמינים לסוכן השירות של Vertex AI Custom Code (CCSA) בפרויקט. אתם יכולים להעניק ל-CCSA, וכך לאפליקציית האימון שלכם, גישה למספר מוגבל של משאבים אחרים. לשם כך, צריך לפעול לפי ההוראות במאמר הענקת גישה לסוכני שירות של Vertex AI למשאבים אחרים. אם לאפליקציית האימון שלכם נדרשת גישה ברמה גבוהה יותר ממצב קריאה למשאבים שלא מופיעים בדף הזה, היא צריכה לקבל אסימון גישה מסוג OAuth 2.0 עם היקף הגישה https://www.googleapis.com/auth/cloud-platform. אפשר לעשות זאת רק באמצעות חשבון שירות בהתאמה אישית. Google Cloud
לדוגמה, כדאי לבדוק את הגישה של קוד האימון למשאבי Cloud Storage:
כברירת מחדל, ל-Vertex AI יש גישה לכל קטגוריה של Cloud Storage בפרויקט Google Cloud שבו מתבצע אימון ללא שרת. אפשר גם להעניק ל-Vertex AI גישה לקטגוריות של Cloud Storage בפרויקטים אחרים, או להשתמש בחשבון שירות בהתאמה אישית כדי להגדיר בדיוק לאילו קטגוריות תהיה גישה למשימה ספציפית.
קריאה וכתיבה של קבצים ב-Cloud Storage באמצעות Cloud Storage FUSE
בכל משימות האימון ללא שרתים, מערכת Vertex AI מטעינה קטגוריות של Cloud Storage שיש לכם גישה אליהן בספרייה /gcs/ של מערכת הקבצים של כל צומת אימון. כחלופה נוחה לשימוש בלקוח Python ל-Cloud Storage או בספרייה אחרת כדי לגשת ל-Cloud Storage, אתם יכולים לקרוא ולכתוב ישירות למערכת הקבצים המקומית כדי לקרוא נתונים מ-Cloud Storage או לכתוב נתונים ל-Cloud Storage. לדוגמה, כדי לטעון נתונים מ-gs://BUCKET/data.csv, אפשר להשתמש בקוד Python הבא:
file = open('/gcs/BUCKET/data.csv', 'r')
מערכת Vertex AI משתמשת ב-Cloud Storage FUSE כדי לטעון את קטגוריות האחסון. חשוב לזכור שספריות שנטענו על ידי Cloud Storage FUSE לא תואמות ל-POSIX.
פרטי הכניסה שבהם אתם משתמשים לאימון ללא שרתים קובעים לאילו קטגוריות יש לכם גישה בדרך הזו. בקטע הקודם בנושא אילו משאבים הקוד יכול לגשת אליהם מוסבר בדיוק לאילו קטגוריות יש לכם גישה כברירת מחדל ואיך להתאים אישית את הגישה הזו.
טעינת נתוני קלט
קוד ML פועל בדרך כלל על נתוני אימון כדי לאמן מודל. אל תאחסנו נתוני אימון יחד עם הקוד, בין אם אתם יוצרים אפליקציית אימון ב-Python או קובץ אימג' של קונטיינר בהתאמה אישית. אחסון נתונים באמצעות קוד עלול להוביל לפרויקט לא מאורגן, להקשות על שימוש חוזר בקוד במערכי נתונים שונים ולגרום לשגיאות במערכי נתונים גדולים.
אפשר לטעון נתונים ממערך נתונים מנוהל ב-Vertex AI או לכתוב קוד משלכם כדי לטעון נתונים ממקור מחוץ ל-Vertex AI, כמו BigQuery או Cloud Storage.
כדי להשיג את הביצועים הטובים ביותר כשאתם טוענים נתונים מ-Cloud Storage, מומלץ להשתמש בקטגוריה באזור שבו אתם מבצעים אימון ללא שרתים. כדי ללמוד איך לאחסן נתונים ב-Cloud Storage, אפשר לקרוא את המאמרים יצירת קטגוריות אחסון והעלאת אובייקטים.
כדי ללמוד על קטגוריות של Cloud Storage שאפשר לטעון מהן נתונים, כדאי לקרוא את הקטע הקודם בנושא אילו משאבים הקוד יכול לגשת אליהם.
כדי לטעון נתונים מ-Cloud Storage בקוד ההדרכה, אפשר להשתמש בתכונת Cloud Storage FUSE שמתוארת בקטע הקודם, או בכל ספרייה שתומכת ב-ADC. אין צורך לספק במפורש פרטי אימות בקוד.
לדוגמה, אפשר להשתמש באחת מספריות הלקוח שמוצגות במדריך Cloud Storage בנושא הורדת אובייקטים. במיוחד, לקוח Python ל-Cloud Storage כלול במאגרי קונטיינרים מוכנים מראש.
ב-TensorFlow, גם הסיווג tf.io.gfile.GFile תומך ב-ADC.
טעינה של מערך נתונים גדול
בהתאם לסוגי המכונות שבהן אתם מתכננים להשתמש במהלך אימון ללא שרת, יכול להיות שהמכונות הווירטואליות לא יוכלו לטעון את כל מערך הנתונים הגדול לזיכרון.
אם אתם צריכים לקרוא נתונים גדולים מדי שלא נכנסים לזיכרון, אתם יכולים להזרים את הנתונים או לקרוא אותם באופן מצטבר. יש שיטות מומלצות שונות לביצוע הפעולה הזו במסגרות שונות של ML. לדוגמה, הסיווג tf.data.Dataset של TensorFlow יכול להעביר בסטרימינג נתוני TFRecord או נתוני טקסט מ-Cloud Storage.
דרך נוספת לצמצם את כמות הנתונים שכל מכונה וירטואלית טוענת לזיכרון היא לבצע אימון בלי שרת (serverless) בכמה מכונות וירטואליות עם מקביליות נתונים. מידע נוסף זמין בקטע כתיבת קוד לאימון מבוזר במסמך הזה.
ייצוא של מודל ML מאומן
בדרך כלל, קוד למידת מכונה מייצא מודל מאומן בסוף האימון בצורה של פריט מידע אחד או יותר של המודל. אחר כך תוכלו להשתמש בארטיפקטים של המודל כדי לקבל מסקנות.
אחרי שהאימון ללא שרתים מסתיים, אי אפשר יותר לגשת למכונות הווירטואליות שהריצו את קוד האימון. לכן, קוד האימון צריך לייצא את ארטיפקטים של המודל למיקום מחוץ ל-Vertex AI.
מומלץ לייצא את ארטיפקטים של המודל לקטגוריה של Cloud Storage. כמו שמתואר בקטע הקודם בנושא אילו משאבים הקוד יכול לגשת אליהם, מערכת Vertex AI יכולה לגשת לכל קטגוריה של Cloud Storage בפרויקט Google Cloud שבו מתבצע אימון ללא שרת. משתמשים בספרייה שתומכת ב-ADC כדי לייצא את ארטיפקטים של המודל. לדוגמה, ממשקי TensorFlow API לשמירת מודלים של Keras יכולים לייצא ארטיפקטים ישירות לנתיב ב-Cloud Storage.
אם רוצים להשתמש במודל שאומן כדי להסיק מסקנות ב-Vertex AI, צריך לייצא את ארטיפקטים של המודל בפורמט שתואם לאחד מהקונטיינרים המובנים מראש להסקת מסקנות. מידע נוסף זמין במדריך לייצוא של פריטי מידע על מודלים לצורך הסקת מסקנות והסבר.
משתני סביבה לספריות מיוחדות ב-Cloud Storage
אם מציינים את השדה baseOutputDirectory API, Vertex AI מגדיר את משתני הסביבה הבאים כשהוא מפעיל את קוד האימון:
-
AIP_MODEL_DIR: URI של Cloud Storage של ספרייה שמיועדת לשמירת ארטיפקטים של מודלים. -
AIP_CHECKPOINT_DIR: URI של Cloud Storage של ספרייה שמיועדת לשמירת נקודות ביקורת. -
AIP_TENSORBOARD_LOG_DIR: URI של Cloud Storage של ספרייה שמיועדת לשמירת יומנים של TensorBoard. שימוש ב-Vertex AI TensorBoard עם אימון בהתאמה אישית
הערכים של משתני הסביבה האלה משתנים מעט בהתאם לשאלה אם אתם משתמשים בכוונון היפרפרמטרים. מידע נוסף מופיע במאמר בנושא הפניית API ל-baseOutputDirectory.
השימוש במשתני הסביבה האלה מאפשר לעשות שימוש חוזר באותו קוד אימון כמה פעמים – למשל עם נתונים שונים או אפשרויות תצורה שונות – ולשמור את ארטיפקטים של המודל ונקודות ביקורת במיקומים שונים, רק על ידי שינוי השדה baseOutputDirectory ב-API. עם זאת, אתם לא חייבים להשתמש במשתני הסביבה בקוד אם אתם לא רוצים. לדוגמה, אפשר להגדיר מיקומים בקידוד קשיח כדי לשמור נקודות ביקורת ולייצא ארטיפקטים של מודלים.
בנוסף, אם משתמשים ב-TrainingPipeline לאימון מותאם אישית ולא מציינים את השדה modelToUpload.artifactUri, מערכת Vertex AI משתמשת בערך של משתנה הסביבה AIP_MODEL_DIR בשביל modelToUpload.artifactUri. (לכוונון היפר-פרמטרים, Vertex AI משתמש בערך של משתנה הסביבה AIP_MODEL_DIR מהניסיון הטוב ביותר).
איך מוודאים עמידות להפעלות מחדש
המכונות הווירטואליות שמריצות את קוד האימון מופעלות מחדש מדי פעם. לדוגמה, Google Cloud יכול להיות שיהיה צורך להפעיל מחדש מכונה וירטואלית מסיבות שקשורות לתחזוקה. כשמכונה וירטואלית מופעלת מחדש, מערכת Vertex AI מתחילה להריץ את הקוד שוב מההתחלה.
אם אתם צופים שקוד האימון יפעל יותר מארבע שעות, כדאי להוסיף לקוד כמה התנהגויות שיאפשרו לו להתאושש מהפעלה מחדש:
מומלץ לייצא את התקדמות האימון ל-Cloud Storage לעיתים קרובות, לפחות פעם בארבע שעות, כדי שלא תאבדו את ההתקדמות אם מכונות ה-VM יופעלו מחדש.
בתחילת קוד האימון, בודקים אם כבר קיימת התקדמות באימון במיקום הייצוא. במקרה כזה, כדאי לטעון את מצב האימון שנשמר במקום להתחיל את האימון מההתחלה.
ארבע שעות הן קו מנחה ולא מגבלה מחייבת. אם חשוב לכם להבטיח את עמידות האפליקציה, כדאי להוסיף את ההתנהגויות האלה לקוד גם אם אתם לא מצפים שהאפליקציה תפעל כל כך הרבה זמן.
האופן שבו משיגים את ההתנהגויות האלה תלוי במסגרת ה-ML שבה משתמשים. לדוגמה, אם אתם משתמשים ב-TensorFlow Keras, כאן מוסבר איך להשתמש ב-callback ModelCheckpoint למטרה הזו.
מידע נוסף על אופן הניהול של מכונות וירטואליות ב-Vertex AI זמין במאמר הסבר על שירות האימון בהתאמה אישית.
שיטות מומלצות לשימוש בתכונות אופציונליות של אימון בלי שרת (serverless)
אם רוצים להשתמש בתכונות מסוימות של אימון בלי שרת (serverless), יכול להיות שיהיה צורך לבצע שינויים נוספים בקוד האימון. בקטע הזה מתוארות שיטות מומלצות לכתיבת קוד לכוונון היפר-פרמטרים, לשימוש ב-GPU, לאימון מבוזר ולשימוש ב-Vertex AI TensorBoard.
כתיבת קוד להפעלת רישום אוטומטי
אתם יכולים להפעיל רישום אוטומטי ביומן באמצעות Vertex AI SDK ל-Python כדי לתעד באופן אוטומטי פרמטרים ומדדי ביצועים כששולחים את המשימה המותאמת אישית. מידע נוסף זמין במאמר הפעלת משימת הדרכה עם מעקב אחר ניסויים.
כתיבת קוד להחזרת יומני קונטיינרים
כשכותבים יומנים מהשירות או מהעבודה, הם נאספים אוטומטית על ידי Cloud Logging, כל עוד היומנים נכתבים באחד מהמיקומים הבאים:
- זרמי פלט רגיל (
stdout) או שגיאה רגילה (stderr) - קובצי יומן ב-
/var/log-storage/ששמותיהם נקבעים לפי המוסכמהoutput*.log. - syslog (
/dev/log) - יומנים שנכתבו באמצעות ספריות הלקוח של Cloud Logging, שזמינות בשפות פופולריות רבות
רוב המפתחים צפויים לכתוב יומנים באמצעות פלט רגיל ושגיאה רגילה.
היומנים של הקונטיינר שנכתבים למיקומים הנתמכים האלה משויכים אוטומטית לשירות, לגרסה ולמיקום של Vertex AI serverless training, או למשימת serverless training. חריגים שנכללים ביומנים האלה נרשמים ומדווחים בError Reporting.
שימוש בטקסט פשוט לעומת JSON מובנה ביומנים
כשכותבים יומנים, אפשר לשלוח מחרוזת טקסט פשוט או שורה אחת של JSON מסודר, שנקרא גם נתונים 'מובנים'. הנתונים האלה נאספים ומנותחים על ידי Cloud Logging ומוצבים ב-jsonPayload. לעומת זאת, הודעה בטקסט פשוט ממוקמת ב-textPayload.
כתיבה של יומנים מובְנים
יש כמה דרכים להעביר יומנים מובנים בפורמט JSON. הדרכים הנפוצות ביותר הן באמצעות ספריית ה-Logging של Python או באמצעות העברת JSON גולמי באמצעות print.
ספריית הרישום של Python
import json import logging from pythonjsonlogger import jsonlogger class CustomJsonFormatter(jsonlogger.JsonFormatter): """Formats log lines in JSON.""" def process_log_record(self, log_record): """Modifies fields in the log_record to match Cloud Logging's expectations.""" log_record['severity'] = log_record['levelname'] log_record['timestampSeconds'] = int(log_record['created']) log_record['timestampNanos'] = int( (log_record['created'] % 1) * 1000 * 1000 * 1000) return log_record def configure_logger(): """Configures python logger to format logs as JSON.""" formatter = CustomJsonFormatter( '%(name)s|%(levelname)s|%(message)s|%(created)f' '|%(lineno)d|%(pathname)s', '%Y-%m-%dT%H:%M:%S') root_logger = logging.getLogger() handler = logging.StreamHandler() handler.setFormatter(formatter) root_logger.addHandler(handler) root_logger.setLevel(logging.WARNING) logging.warning("This is a warning log")
JSON גולמי
import json def log(severity, message): global_extras = {"debug_key": "debug_value"} structured_log = {"severity": severity, "message": message, **global_extras} print(json.dumps(structured_log)) def main(args): log("DEBUG", "Debugging the application.") log("INFO", "Info.") log("WARNING", "Warning.") log("ERROR", "Error.") log("CRITICAL", "Critical.")
שדות JSON מיוחדים בהודעות
כשמספקים יומן מובנה כמילון JSON, חלק מהשדות המיוחדים מוסרים מהשדה jsonPayload ונכתבים בשדה המתאים ב-LogEntry שנוצר, כפי שמתואר במסמכי התיעוד בנושא שדות מיוחדים.
לדוגמה, אם קובץ ה-JSON כולל מאפיין severity, הוא יוסר מ-jsonPayload ויופיע במקום זאת כ-severity של רשומת היומן. המאפיין message
משמש כטקסט התצוגה הראשי של רשומת היומן, אם הוא קיים.
התאמה בין יומני הקונטיינר לבין יומן בקשות (שירותים בלבד)
בכלי Logs Explorer, אפשר לראות יומנים שמשויכים לאותו trace בפורמט 'הורה-צאצא': כשלוחצים על סמל המשולש שמימין לרשומה ביומן הבקשות, יומני המאגר שקשורים לבקשה הזו מוצגים כשהם מוזחים מתחת ליומן הבקשות.
יומני קונטיינרים לא משויכים אוטומטית ליומני בקשות, אלא אם משתמשים בספריית לקוח של Cloud Logging.
כדי ליצור קורלציה בין יומני קונטיינרים לבין יומני בקשות בלי להשתמש בספריית לקוח, אפשר להשתמש בשורת יומן JSON מובנית שמכילה שדה logging.googleapis.com/trace עם מזהה המעקב שחולץ מהכותרת X-Cloud-Trace-Context.
צפייה ביומנים
כדי לראות את יומני הקונטיינר במסוף Google Cloud :
נכנסים לדף Vertex AI custom jobs במסוף Google Cloud .
לוחצים על השם של העבודה המותאמת אישית שרוצים לראות את היומנים שלה.
לוחצים על הצגת יומנים.
כתיבת קוד לכוונון היפר-פרמטרים
Vertex AI יכול לבצע כוונון היפר-פרמטרים בקוד האימון של ה-ML. מידע נוסף על אופן הפעולה של כוונון היפר-פרמטרים ב-Vertex AI ועל הגדרת משאב HyperparameterTuningJob
אם רוצים להשתמש בכוונון היפרפרמטרים, קוד האימון צריך לבצע את הפעולות הבאות:
מנתחים את הארגומנטים של שורת הפקודה שמייצגים את ההיפרפרמטרים שרוצים לכוונן, ומשתמשים בערכים המנותחים כדי להגדיר את ההיפרפרמטרים לאימון.
לדווח ל-Vertex AI על מדד כוונון ההיפר-פרמטרים לסירוגין.
ניתוח ארגומנטים בשורת הפקודה
כדי לבצע אופטימיזציה של היפרפרמטרים, מערכת Vertex AI מריצה את קוד האימון שלכם כמה פעמים, עם ארגומנטים שונים של שורת הפקודה בכל פעם. קוד האימון צריך לנתח את הארגומנטים האלה של שורת הפקודה ולהשתמש בהם כהיפרפרמטרים לאימון. לדוגמה, כדי לשנות את קצב הלמידה של הכלי לאופטימיזציה, יכול להיות שתרצו לנתח ארגומנט של שורת פקודה בשם --learning_rate. איך מגדירים אילו ארגומנטים של שורת הפקודה מסופקים על ידי Vertex AI
מומלץ להשתמש בספריית argparse
של Python כדי לנתח את הארגומנטים של שורת הפקודה.
דיווח על מדד כוונון ההיפרפרמטרים
קוד האימון צריך לדווח ל-Vertex AI מדי פעם על מדד ההיפר-פרמטר שאתם מנסים לבצע לו אופטימיזציה. לדוגמה, אם רוצים למקסם את רמת הדיוק של המודל, כדאי לדווח על המדד הזה בסוף כל תקופת אימון. מערכת Vertex AI משתמשת במידע הזה כדי להחליט באילו היפרפרמטרים להשתמש בניסוי האימון הבא. מידע נוסף על בחירה וציון של מדד לאופטימיזציה של היפר-פרמטרים
אפשר להשתמש בספריית Python cloudml-hypertune כדי לדווח על מדד הכוונון של ההיפר-פרמטרים. הספרייה הזו כלולה בכל המאגרים המוכנים מראש לאימון, ואפשר להשתמש ב-pip כדי להתקין אותה במאגר בהתאמה אישית.
מידע על התקנה ושימוש בספרייה הזו זמין במאגר cloudml-hypertune
GitHub או במאמר Vertex AI: Hyperparameter Tuning codelab.
כתיבת קוד ליחידות GPU
אתם יכולים לבחור מכונות וירטואליות עם מעבדים גרפיים (GPU) כדי להריץ את קוד האימון המותאם אישית. מידע נוסף על הגדרת אימון בלי שרת (serverless) לשימוש במכונות וירטואליות עם GPU
אם רוצים להתאמן עם יחידות GPU, צריך לוודא שקוד האימון יכול לנצל אותן. יכול להיות שיהיה צורך לבצע שינויים בקוד, בהתאם למסגרת ה-ML שבה אתם משתמשים. לדוגמה, אם אתם משתמשים ב-TensorFlow Keras, אתם צריכים לשנות את הקוד רק אם אתם רוצים להשתמש ביותר מ-GPU אחד. חלק ממסגרות ה-ML לא יכולות להשתמש במעבדי GPU בכלל.
בנוסף, צריך לוודא שהקונטיינר תומך ב-GPU: בוחרים קונטיינר מוכן מראש לאימון שתומך ב-GPU, או מתקינים את NVIDIA CUDA Toolkit ואת NVIDIA cuDNN בקונטיינר המותאם אישית.
אפשרות אחת היא להשתמש בתמונת בסיס ממאגר Docker של nvidia/cuda. אפשרות אחרת היא להשתמש במופע של קונטיינרים של למידה עמוקה (Deep Learning) כקובץ אימג' בסיסי.
כתיבת קוד לאימון מבוזר
כדי להתאמן על מערכי נתונים גדולים, אפשר להריץ את הקוד על כמה מכונות וירטואליות באשכול מבוזר שמנוהל על ידי Vertex AI. איך מגדירים כמה מכונות וירטואליות לאימון
חלק ממסגרות למידת מכונה, כמו TensorFlow ו-PyTorch, מאפשרות להריץ קוד אימון זהה על כמה מכונות. המערכת מתאמת באופן אוטומטי את חלוקת העבודה על סמך משתני הסביבה שמוגדרים בכל מכונה. כדאי לבדוק אם Vertex AI מגדיר משתני סביבה כדי לאפשר את זה למסגרת למידת המכונה שלכם.
לחלופין, אפשר להפעיל קונטיינר אחר בכל אחד ממאגרי העובדים. מאגר עובדים הוא קבוצה של מכונות וירטואליות שמוגדרות לשימוש באותן אפשרויות חישוב ובאותו קונטיינר. במקרה כזה, כדאי להסתמך על משתני הסביבה שהוגדרו על ידי Vertex AI כדי לתאם את התקשורת בין המכונות הווירטואליות. אתם יכולים להתאים אישית את קוד האימון של כל מאגר עובדים כדי לבצע כל משימה שרירותית שתרצו. האופן שבו עושים את זה תלוי ביעד ובמסגרת ה-ML שבה אתם משתמשים.
מעקב אחרי ניסויים באימון ללא שרת (serverless) והצגתם באופן חזותי באמצעות Vertex AI TensorBoard
Vertex AI TensorBoard היא גרסה מנוהלת של TensorBoard, פרויקט קוד פתוח של Google להדמיה של ניסויים בלמידת מכונה. בעזרת Vertex AI TensorBoard אפשר לעקוב אחרי ניסויים בלמידת מכונה, להציג אותם חזותית, להשוות ביניהם ולשתף אותם עם הצוות. אפשר גם להשתמש ב-Cloud Profiler כדי לזהות ולתקן צווארי בקבוק בביצועים, וכך לאמן מודלים מהר יותר ובעלות נמוכה יותר.
כדי להשתמש ב-Vertex AI TensorBoard עם אימון בלי שרת (serverless), צריך לבצע את הפעולות הבאות:
יוצרים פרויקט ב-Vertex AI TensorBoard כדי לאחסן את הניסויים (ראו יצירת פרויקט ב-TensorBoard).
מגדירים חשבון שירות להרצת משימת האימון ללא שרת עם ההרשאות המתאימות.
משנים את קוד ההדרכה בלי שרת (serverless) כדי לכתוב רישומים שתואמים ל-TensorBoard ב-Cloud Storage (ראו שינויים בסקריפט ההדרכה)
מדריך מפורט זמין במאמר שימוש ב-Vertex AI TensorBoard עם אימון ללא שרת.
המאמרים הבאים
מידע נוסף על יצירת אפליקציית אימון ב-Python לשימוש עם קונטיינר מוכן מראש או על יצירת קובץ אימג' של קונטיינר בהתאמה אישית
אם אתם לא בטוחים שאתם רוצים לבצע אימון בלי שרת (serverless), כדאי לקרוא השוואה בין אימון בלי שרת (serverless) לבין AutoML.