אתם יכולים לבצע אימון בלי שרת (serverless) ב-Gemini Enterprise Agent Platform כדי להריץ קוד אימון משלכם ללמידת מכונה (ML) בענן, במקום להשתמש ב-AutoML. במסמך הזה מתוארות שיטות מומלצות שכדאי להביא בחשבון כשכותבים קוד לאימון.
.בחירת מבנה של קוד אימון
קודם כל, קובעים את המבנה של קוד האימון של ה-ML. אפשר לספק קוד לאימון Agent Platform באחת מהצורות הבאות:
סקריפט Python לשימוש עם קונטיינר מוכן מראש. משתמשים ב-Vertex AI SDK כדי ליצור משימה בהתאמה אישית. בשיטה הזו אפשר לספק את אפליקציית האימון כסקריפט Python יחיד.
אפליקציית אימון של Python לשימוש עם קונטיינר מוכן מראש. יצירה של הפצה של מקור Python עם קוד שמכשיר מודל ML ומייצא אותו ל-Cloud Storage. אפליקציית האימון הזו יכולה להשתמש בכל התלויות שכלולות במאגר המידע המובנה מראש שמתכננים להשתמש בו.
משתמשים באפשרות הזו אם אחד מהקונטיינרים המוכנים מראש לאימון ב-Agent Platform כולל את כל התלויות שאתם צריכים לאימון. לדוגמה, אם רוצים לבצע אימון באמצעות PyTorch, scikit-learn, TensorFlow או XGBoost, כנראה שהאפשרות הזו מתאימה יותר.
כדי לקרוא על שיטות מומלצות שספציפיות לאפשרות הזו, אפשר לעיין במדריך בנושא יצירת אפליקציית אימון של Python.
קובץ אימג' של קונטיינר בהתאמה אישית. ליצור קובץ אימג' של קונטיינר Docker עם קוד שמכשיר מודל ML ומייצא אותו ל-Cloud Storage. כוללים בקובץ האימג' של הקונטיינר את כל יחסי התלות שנדרשים לקוד.
משתמשים באפשרות הזו אם רוצים להשתמש בתלות שלא נכללת באחד מהקונטיינרים המוכנים מראש של Agent Platform לאימון. לדוגמה, אם רוצים להתאמן באמצעות מסגרת Python ML שלא זמינה במאגר מובנה מראש, או אם רוצים להתאמן באמצעות שפת תכנות שאינה Python, זו האפשרות הטובה יותר.
כדי לקרוא על שיטות מומלצות שספציפיות לאפשרות הזו, אפשר לעיין במדריך בנושא יצירת תמונת קונטיינר בהתאמה אישית.
בהמשך המסמך מתוארות שיטות מומלצות שרלוונטיות לשני מבני קוד האימון.
שיטות מומלצות לכל קוד האימון ללא שרת
כשכותבים קוד אימון ללא שרתים ל-Agent Platform, צריך לזכור שהקוד יפעל במכונה וירטואלית (VM) אחת או יותר שמנוהלות על ידיGoogle Cloud. בקטע הזה מתוארות שיטות מומלצות שרלוונטיות לכל קוד אימון בהתאמה אישית.
גישה Google Cloud לשירותים בקוד
בכמה מהקטעים הבאים מתואר איך לגשת לשירותים אחרים Google Cloudמהקוד. כדי לגשת לשירותים Google Cloud , צריך לכתוב את קוד האימון כך שישתמש ב-Application Default Credentials (ADC). בספריות לקוח רבות, האימות באמצעות ADC מוגדר כברירת מחדל. Google Cloud אין צורך להגדיר משתני סביבה. פלטפורמת הסוכנים מגדירה באופן אוטומטי את ADC כדי לבצע אימות בתור סוכן של שירות קוד בהתאמה אישית בפלטפורמת הסוכנים של Gemini Enterprise עבור הפרויקט (כברירת מחדל) או בתור חשבון שירות בהתאמה אישית (אם הגדרתם חשבון כזה).
עם זאת, כשמשתמשים ב Google Cloud ספריית לקוח בקוד, יכול להיות ש-Agent Platform לא תתחבר תמיד לפרויקט הנכוןGoogle Cloud כברירת מחדל. אם נתקלתם בשגיאות הרשאה, יכול להיות שהבעיה היא שאתם מתחברים לפרויקט הלא נכון.
הבעיה הזו מתרחשת כי Agent Platform לא מריץ את הקוד שלכם ישירות בפרויקט Google Cloud . במקום זאת, Agent Platform מריץ את הקוד באחד מכמה פרויקטים נפרדים שמנוהלים על ידי Google. פלטפורמת הסוכנים משתמשת בפרויקטים האלה באופן בלעדי לפעולות שקשורות לפרויקט שלכם. לכן, אל תנסו להסיק מזהה פרויקט מהסביבה בקוד של האימון או ההסקה. צריך לציין מזהי פרויקטים באופן מפורש.
אם אתם לא רוצים לכתוב בתוך הקוד מזהה פרויקט בקוד האימון, אתם יכולים להפנות למשתנה הסביבה CLOUD_ML_PROJECT_ID: Agent Platform מגדירה את משתנה הסביבה הזה בכל קונטיינר אימון בלי שרת (serverless), כך שיכיל את מספר הפרויקט של הפרויקט שבו התחלתם את האימון בלי שרת (serverless). הרבה כלים של 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 המשאבים שזמינים לסוכן שירות הקוד המותאם אישית (CCSA) של פלטפורמת הסוכנים של Gemini Enterprise בפרויקט. כדי להעניק ל-CCSA, וכך לאפליקציית ההדרכה שלכם, גישה למספר מוגבל של משאבים אחרים, פועלים לפי ההוראות במאמר הענקת גישה לסוכני שירות של Gemini Enterprise Agent Platform למשאבים אחרים. אם לאפליקציית האימון שלכם נדרשת גישה ברמה גבוהה יותר מקריאה למשאבים שלא מופיעים בדף הזה, היא צריכה לקבל אסימון גישה מסוג OAuth 2.0 עם היקף הגישה https://www.googleapis.com/auth/cloud-platform. אפשר לעשות זאת רק באמצעות חשבון שירות בהתאמה אישית. Google Cloud
לדוגמה, כדאי לבדוק את הגישה של קוד האימון למשאבי Cloud Storage:
כברירת מחדל, ל-Agent Platform יש גישה לכל קטגוריית Cloud Storage בפרויקט Google Cloud שבו מתבצע אימון ללא שרת. אפשר גם לתת ל-Agent Platform גישה לקטגוריות Cloud Storage בפרויקטים אחרים, או להשתמש בחשבון שירות בהתאמה אישית כדי להתאים במדויק את הקטגוריות שאליהן עבודה ספציפית יכולה לגשת.
קריאה וכתיבה של קבצים ב-Cloud Storage באמצעות Cloud Storage FUSE
בכל משימות ההדרכה ללא שרת, Agent Platform מעלה את דלי ה-Cloud Storage שיש לכם גישה אליהם בספרייה /gcs/ של מערכת הקבצים של כל צומת הדרכה. כחלופה נוחה לשימוש בלקוח Python ל-Cloud Storage או בספרייה אחרת כדי לגשת ל-Cloud Storage, אתם יכולים לקרוא ולכתוב ישירות למערכת הקבצים המקומית כדי לקרוא נתונים מ-Cloud Storage או לכתוב נתונים ל-Cloud Storage. לדוגמה, כדי לטעון נתונים מ-gs://BUCKET/data.csv, אפשר להשתמש בקוד Python הבא:
file = open('/gcs/BUCKET/data.csv', 'r')
פלטפורמת הסוכן משתמשת ב-Cloud Storage FUSE כדי לטעון את קטגוריות האחסון. חשוב לזכור שספריות שנטענו באמצעות Cloud Storage FUSE לא תואמות ל-POSIX.
פרטי הכניסה שבהם אתם משתמשים לאימון ללא שרתים קובעים לאילו קטגוריות יש לכם גישה בדרך הזו. בקטע הקודם בנושא אילו משאבים הקוד יכול לגשת אליהם מוסבר בדיוק לאילו קטגוריות יש לכם גישה כברירת מחדל ואיך להתאים אישית את הגישה הזו.
טעינת נתוני קלט
קוד למידת מכונה פועל בדרך כלל על נתוני אימון כדי לאמן מודל. אל תאחסנו נתוני אימון יחד עם הקוד, בין אם אתם יוצרים אפליקציית אימון ב-Python או תמונת container בהתאמה אישית. אחסון נתונים עם קוד עלול להוביל לפרויקט לא מאורגן, להקשות על שימוש חוזר בקוד במערכי נתונים שונים ולגרום לשגיאות במערכי נתונים גדולים.
אתם יכולים לטעון נתונים ממערך נתונים מנוהל של Agent Platform או לכתוב קוד משלכם כדי לטעון נתונים ממקור מחוץ ל-Agent Platform, כמו BigQuery או Cloud Storage.
כדי להשיג את הביצועים הטובים ביותר כשאתם טוענים נתונים מ-Cloud Storage, מומלץ להשתמש בקטגוריית אחסון באזור שבו אתם מבצעים אימון ללא שרת. כדי ללמוד איך לאחסן נתונים ב-Cloud Storage, אפשר לקרוא את המאמרים יצירת קטגוריות אחסון והעלאת אובייקטים.
כדי לדעת מאיזה קטגוריות של Cloud Storage אפשר לטעון נתונים, אפשר לקרוא את הקטע הקודם בנושא אילו משאבים הקוד יכול לגשת אליהם.
כדי לטעון נתונים מ-Cloud Storage בקוד ההדרכה, אפשר להשתמש בתכונת Cloud Storage FUSE שמתוארת בקטע הקודם, או בכל ספרייה שתומכת ב-ADC. אין צורך לספק במפורש פרטי אימות בקוד.
לדוגמה, אפשר להשתמש באחת מספריות הלקוח שמוצגות במדריך Cloud Storage בנושא הורדת אובייקטים. בפרט, לקוח Python ל-Cloud Storage כלול במאגרי קונטיינרים מוכנים מראש.
המחלקות tf.io.gfile.GFile של TensorFlow תומכות גם ב-ADC.
טעינה של מערך נתונים גדול
בהתאם לסוגי המכונות שבהן אתם מתכננים להשתמש במהלך אימון ללא שרת, יכול להיות שהמכונות הווירטואליות לא יוכלו לטעון את כל מערך הנתונים הגדול לזיכרון.
אם אתם צריכים לקרוא נתונים גדולים מדי שלא נכנסים לזיכרון, כדאי להזרים את הנתונים או לקרוא אותם באופן מצטבר. יש שיטות מומלצות שונות לביצוע הפעולה הזו במסגרות שונות של ML. לדוגמה, המחלקה tf.data.Dataset
class
של TensorFlow יכולה להעביר בסטרימינג נתוני TFRecord או נתוני טקסט מ-Cloud Storage.
דרך נוספת לצמצם את כמות הנתונים שכל מכונה וירטואלית טוענת לזיכרון היא לבצע אימון ללא שרתים בכמה מכונות וירטואליות עם מקביליות נתונים. אפשר לעיין בקטע כתיבת קוד לאימון מבוזר במסמך הזה.
ייצוא של מודל ML מאומן
בדרך כלל, קוד למידת מכונה מייצא מודל מאומן בסוף האימון בצורה של פריטי מידע של מודל אחד או יותר. אחר כך תוכלו להשתמש בארטיפקטים של המודל כדי לקבל מסקנות.
אחרי שהאימון ללא שרת מסתיים, אי אפשר יותר לגשת למכונות הווירטואליות שהריצו את קוד האימון. לכן, קוד האימון צריך לייצא ארטיפקטים של המודל למיקום מחוץ ל-Agent Platform.
מומלץ לייצא את הארטיפקטים של המודל לקטגוריה של Cloud Storage. כמו שמתואר בקטע הקודם בנושא אילו משאבים הקוד יכול לגשת אליהם, Agent Platform יכול לגשת לכל קטגוריה של Cloud Storage ב Google Cloud פרויקט שבו מתבצע אימון ללא שרת. כדי לייצא את הארטיפקטים של המודל, צריך להשתמש בספרייה שתומכת ב-ADC. לדוגמה, TensorFlow APIs for saving Keras models יכול לייצא ארטיפקטים ישירות לנתיב של Cloud Storage.
TrainingPipelineTrainingPipelineאם רוצים להשתמש במודל שאומן כדי להציג מסקנות בפלטפורמת הסוכנים, צריך לייצא את ארטיפקטים של המודל בפורמט שתואם לאחד מהקונטיינרים המוכנים מראש להסקת מסקנות. מידע נוסף זמין במדריך לייצוא של ארטיפקטים של מודלים לצורך הסקת מסקנות והסבר.
משתני סביבה לספריות מיוחדות ב-Cloud Storage
אם מציינים את השדה baseOutputDirectory API, Agent Platform מגדירה את משתני הסביבה הבאים כשהיא מריצה את קוד האימון:
-
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, פלטפורמת הסוכנים משתמשת בערך של משתנה הסביבה AIP_MODEL_DIR עבור modelToUpload.artifactUri. (לצורך כוונון היפרפרמטרים, פלטפורמת הסוכנים משתמשת בערך של משתנה הסביבה AIP_MODEL_DIR מהניסוי הטוב ביותר).
איך מוודאים שהאפליקציה תפעל גם אחרי הפעלה מחדש
המכונות הווירטואליות שמריצות את קוד האימון מופעלות מחדש מדי פעם. לדוגמה, יכול להיות שצריך להפעיל מחדש מכונה וירטואלית לצורך תחזוקה.Google Cloud כשמפעילים מחדש מכונה וירטואלית, Agent Platform מתחיל להריץ את הקוד שלכם שוב מההתחלה.
אם אתם צופים שקוד האימון יפעל יותר מארבע שעות, כדאי להוסיף לקוד כמה התנהגויות שיאפשרו לו להתאושש מהפעלה מחדש:
כדאי לייצא את התקדמות האימון ל-Cloud Storage לעיתים קרובות, לפחות פעם בארבע שעות, כדי שלא תאבדו את ההתקדמות אם מכונות ה-VM יופעלו מחדש.
בתחילת קוד האימון, בודקים אם כבר קיימת התקדמות באימון במיקום הייצוא. במקרה כזה, טוענים את מצב האימון שנשמר במקום להתחיל את האימון מההתחלה.
ההנחיה היא ארבע שעות, אבל זו לא מגבלה מחייבת. אם חשוב לכם להבטיח את עמידות המערכת, כדאי להוסיף את ההתנהגויות האלה לקוד גם אם אתם לא מצפים שהקוד יפעל כל כך הרבה זמן.
האופן שבו משיגים את ההתנהגויות האלה תלוי במסגרת ה-ML שבה משתמשים. לדוגמה, אם אתם משתמשים ב-TensorFlow Keras, כאן מוסבר איך להשתמש ב-callback ModelCheckpoint למטרה הזו.
מידע נוסף על אופן הניהול של מכונות וירטואליות ב-Agent Platform זמין במאמר הסבר על שירות האימון בהתאמה אישית.
שיטות מומלצות לשימוש בתכונות אופציונליות של אימון ללא שרת
אם רוצים להשתמש בתכונות מסוימות של אימון ללא שרתים, יכול להיות שיהיה צורך לבצע שינויים נוספים בקוד האימון. בקטע הזה מתוארות שיטות מומלצות לכתיבת קוד לשימוש ב-GPU, לכוונון היפר-פרמטרים, לאימון מבוזר ול-Vertex AI TensorBoard.
כתיבת קוד להפעלת רישום אוטומטי
אתם יכולים להפעיל רישום אוטומטי ביומן באמצעות Agent Platform SDK for Python כדי לתעד באופן אוטומטי פרמטרים ומדדי ביצועים כששולחים את המשימה המותאמת אישית. פרטים נוספים זמינים במאמר הפעלת משימת אימון עם מעקב אחר ניסויים.
כתיבת קוד להחזרת יומני קונטיינרים
כשכותבים יומנים מהשירות או מהעבודה, הם נאספים אוטומטית על ידי Cloud Logging, כל עוד היומנים נכתבים באחד מהמיקומים הבאים:
- פלט רגיל (
stdout) או סטרימינג של שגיאה רגילה (stderr) - קובצי יומן ב-
/var/log-storage/ששמותיהם תואמים למוסכמת מתן השמותoutput*.log. - syslog (
/dev/log) - יומנים שנכתבו באמצעות ספריות הלקוח של Cloud Logging, שזמינות בשפות פופולריות רבות
רוב המפתחים צפויים לכתוב יומנים באמצעות פלט רגיל ושגיאה רגילה.
יומני ה-container שנכתבים למיקומים הנתמכים האלה משויכים באופן אוטומטי לשירות האימון ללא שרתים (serverless) של Gemini Enterprise Agent Platform, לגרסה ולמיקום, או למשימת האימון ללא שרתים. חריגים שנכללים ביומנים האלה נרשמים ומדווחים ב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 :
נכנסים לדף Gemini Enterprise Agent Platform custom jobs במסוף Google Cloud .
לוחצים על השם של העבודה המותאמת אישית שרוצים לראות את היומנים שלה.
לוחצים על הצגת יומנים.
כתיבת קוד לכוונון היפר-פרמטרים
Agent Platform יכולה לבצע כוונון של היפר-פרמטרים בקוד האימון של למידת המכונה. מידע נוסף על אופטימיזציה של היפר-פרמטרים ב-Agent Platform ועל הגדרת HyperparameterTuningJobמשאב.
אם רוצים להשתמש בכוונון היפרפרמטרים, קוד האימון צריך לבצע את הפעולות הבאות:
מנתחים ארגומנטים של שורת פקודה שמייצגים את ההיפרפרמטרים שרוצים לכוונן, ומשתמשים בערכים המנותחים כדי להגדיר את ההיפרפרמטרים לאימון.
דיווח ל-Agent Platform על מדד כוונון ההיפר-פרמטרים לסירוגין.
ניתוח הארגומנטים בשורת הפקודה
כדי לבצע כוונון היפר-פרמטרים, Agent Platform מריץ את קוד האימון שלכם כמה פעמים, עם ארגומנטים שונים של שורת הפקודה בכל פעם. קוד האימון צריך לנתח את הארגומנטים האלה של שורת הפקודה ולהשתמש בהם כהיפר-פרמטרים לאימון. לדוגמה, כדי לבצע כוונון של קצב הלמידה של האופטימיזציה, יכול להיות שתרצו לנתח ארגומנט של שורת הפקודה בשם --learning_rate. כאן מוסבר איך להגדיר אילו ארגומנטים של שורת הפקודה יסופקו על ידי Agent Platform.
מומלץ להשתמש בספרייה argparse
של Python כדי לנתח ארגומנטים של שורת פקודה.
דיווח על מדד כוונון ההיפר-פרמטרים
קוד האימון צריך לדווח ל-Agent Platform מדי פעם על מדד ההיפר-פרמטר שאתם מנסים לבצע לו אופטימיזציה. לדוגמה, אם אתם רוצים למקסם את הדיוק של המודל, כדאי לדווח על המדד הזה בסוף כל תקופת אימון. Agent Platform משתמש במידע הזה כדי להחליט באילו היפר-פרמטרים להשתמש בניסיון האימון הבא. מידע נוסף על בחירה וציון של מדד לכוונון היפר-פרמטרים
משתמשים בספריית Python cloudml-hypertune כדי לדווח על מדד האופטימיזציה של ההיפרפרמטרים. הספרייה הזו כלולה בכל המאגרים המוכנים מראש לאימון, ואפשר להשתמש ב-pip כדי להתקין אותה במאגר בהתאמה אישית.
מידע על התקנה ושימוש בספרייה הזו מופיע במאגר cloudml-hypertune
GitHub או ב-Codelab בנושא Agent Platform: Hyperparameter Tuning.
כתיבת קוד למעבדי GPU
אתם יכולים לבחור מכונות וירטואליות עם מעבדים גרפיים (GPU) כדי להריץ את קוד האימון המותאם אישית. מידע נוסף על הגדרת אימון בלי שרת (serverless) לשימוש במכונות וירטואליות עם GPU
אם רוצים להתאמן עם יחידות GPU, צריך לוודא שקוד האימון יכול לנצל אותן. יכול להיות שתצטרכו לבצע שינויים בקוד, בהתאם למסגרת ה-ML שבה אתם משתמשים. לדוגמה, אם אתם משתמשים ב-TensorFlow Keras, תצטרכו לשנות את הקוד רק אם אתם רוצים להשתמש ביותר מ-GPU אחד. חלק ממסגרות ה-ML לא יכולות להשתמש ב-GPU בכלל.
בנוסף, צריך לוודא שהקונטיינר תומך ב-GPU: בוחרים קונטיינר מוכן מראש לאימון שתומך ב-GPU, או מתקינים את ערכת הכלים NVIDIA CUDA ואת NVIDIA cuDNN בקונטיינר המותאם אישית. אחת הדרכים לעשות זאת היא להשתמש בתמונת בסיס ממאגר Docker, ודרך נוספת היא להשתמש במופע של Deep Learning Containers כתמונת בסיס.nvidia/cuda
כתיבת קוד לאימון מבוזר
כדי להתאמן על מערכי נתונים גדולים, אפשר להריץ את הקוד על כמה מכונות וירטואליות באשכול מבוזר שמנוהל על ידי Agent Platform. איך מגדירים כמה מכונות וירטואליות לאימון
חלק ממסגרות ה-ML, כמו TensorFlow ו-PyTorch, מאפשרות להריץ קוד אימון זהה בכמה מכונות. המערכת מתאמת באופן אוטומטי את חלוקת העבודה על סמך משתני הסביבה שמוגדרים בכל מכונה. בודקים אם Agent Platform מגדיר משתני סביבה כדי לאפשר את זה ל-ML framework.
אפשרות אחרת היא להפעיל קונטיינר שונה בכל אחד ממאגרי העובדים. מאגר עובדים הוא קבוצה של מכונות וירטואליות שמוגדרות להשתמש באותן אפשרויות חישוב ובאותו קונטיינר. במקרה כזה, כדאי להסתמך על משתני הסביבה שהוגדרו על ידי Agent Platform כדי לתאם את התקשורת בין המכונות הווירטואליות. אפשר להתאים אישית את קוד האימון של כל מאגר עובדים כדי לבצע משימות שרירותיות שרוצים. האופן שבו עושים את זה תלוי במטרה ובמסגרת ה-ML שבה משתמשים.
מעקב אחרי ניסויים של אימון ללא שרתים והצגה שלהם באמצעות 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 לשימוש עם קונטיינר מוכן מראש או על יצירת קובץ אימג' של קונטיינר בהתאמה אישית
אם אתם לא בטוחים שאתם רוצים לבצע אימון ללא שרתים, כדאי לקרוא השוואה בין אימון ללא שרתים לבין AutoML.