היפרפרמטרים הם משתנים ששולטים בתהליך האימון של מודל, כמו גודל אצווה או מספר השכבות הנסתרות ברשת נוירונים עמוקה. כוונון היפר-פרמטרים מחפש את השילוב הטוב ביותר של ערכי היפר-פרמטרים על ידי אופטימיזציה של ערכי מדדים בסדרת ניסויים. מדדים הם סיכומים סקלריים שמוסיפים למאמן, כמו דיוק המודל.
מידע נוסף על כוונון היפר-פרמטרים ב-Vertex AI לדוגמה מפורטת, אפשר לעיין ב-Vertex AI: Hyperparameter Tuning codelab.
בדף הזה נסביר איך:
כדי להכין את אפליקציית האימון לכוונון היפרפרמטרים, צריך לעדכן אותה כך שתקבל היפרפרמטרים כארגומנטים של שורת הפקודה, ותדווח על ערכי מדדים ל-Vertex AI.
יוצרים משימת אימון של היפר-פרמטרים. מידע נוסף על אפשרויות ההגדרה זמין במאמר הסבר על הגדרת אופטימיזציה של היפרפרמטרים.
הכנת בקשת ההכשרה
במשימת כוונון היפר-פרמטרים, Vertex AI יוצר ניסויים של משימת האימון עם קבוצות שונות של היפר-פרמטרים ומעריך את היעילות של הניסוי באמצעות המדדים שציינתם. Vertex AI מעביר ערכים של היפרפרמטרים לאפליקציית האימון כארגומנטים של שורת פקודה. כדי ש-Vertex AI יוכל להעריך את היעילות של ניסוי, אפליקציית האימון צריכה לדווח על המדדים ל-Vertex AI.
בקטעים הבאים מוסבר על:
- איך Vertex AI מעביר היפר-פרמטרים לאפליקציית האימון.
- אפשרויות להעברת מדדים מאפליקציית האימון אל Vertex AI.
מידע נוסף על הדרישות לגבי אפליקציות לאימון מודלים ללא שרת שפועלות ב-Vertex AI
טיפול בארגומנטים של שורת הפקודה עבור ההיפר-פרמטרים שרוצים לכוון
Vertex AI מגדיר ארגומנטים של שורת פקודה כשהוא קורא לאפליקציית האימון. משתמשים בארגומנטים של שורת הפקודה בקוד:
מגדירים שם לכל ארגומנט של היפר-פרמטר ומנתחים אותו באמצעות מנתח הארגומנטים המועדף, כמו
argparse. משתמשים באותם שמות של ארגומנטים כשמגדירים את משימת האימון של ההיפרפרמטרים.לדוגמה, אם אפליקציית האימון היא מודול Python בשם
my_trainerואתם מבצעים אופטימיזציה של היפרפרמטר בשםlearning_rate, Vertex AI מתחיל כל ניסיון בפקודה כמו הבאה:python3 -m my_trainer --learning_rate learning-rate-in-this-trial
Vertex AI קובע את learning-rate-in-this-trial ומעביר אותו באמצעות הארגומנט
learning_rate.מקצים את הערכים מהארגומנטים של שורת הפקודה להיפרפרמטרים בקוד האימון.
מידע נוסף על הדרישות לניתוח ארגומנטים בשורת הפקודה
דיווח על המדדים ל-Vertex AI
כדי לדווח על המדדים ל-Vertex AI, משתמשים בחבילת Python cloudml-hypertune. הספרייה הזו מספקת פונקציות עזר לדיווח על מדדים ל-Vertex AI.
מידע נוסף על דיווח על מדדי היפרפרמטרים
יצירת משימת כוונון של היפר-פרמטרים
בהתאם לכלי שבו רוצים להשתמש כדי ליצור HyperparameterTuningJob, בוחרים באחת מהכרטיסיות הבאות:
המסוף
במסוף Google Cloud , אי אפשר ליצור משאב HyperparameterTuningJob ישירות. עם זאת, אפשר ליצור משאב TrainingPipeline שיוצר HyperparameterTuningJob.
בהוראות הבאות מוסבר איך ליצור TrainingPipeline שיוצר HyperparameterTuningJob ולא עושה שום דבר אחר. אם רוצים להשתמש בתכונות נוספות של TrainingPipeline, כמו אימון עם מערך נתונים מנוהל, אפשר לקרוא את המאמר יצירת צינורות אימון.
במסוף Google Cloud , בקטע Vertex AI, עוברים לדף Training pipelines.
לוחצים על יצירה כדי לפתוח את החלונית אימון מודל חדש.
בשלב Training method, מציינים את ההגדרות הבאות:
ברשימה הנפתחת Dataset (קבוצת נתונים), בוחרים באפשרות No managed dataset (אין קבוצת נתונים מנוהלת).
בוחרים באפשרות אימון מותאם אישית (מתקדם).
לוחצים על Continue.
בשלב פרטי המודל, בוחרים באפשרות הדרכה על מודל חדש או הדרכה על גרסה חדשה. אם בוחרים באפשרות 'אימון מודל חדש', מזינים שם לבחירה, MODEL_NAME, למודל. לוחצים על המשך.
בשלב Training container (מאגר תגים לאימון), מציינים את ההגדרות הבאות:
בוחרים אם להשתמש במאגר תגים מוכן מראש או במאגר תגים בהתאמה אישית להדרכה.
בהתאם לבחירה, מבצעים אחת מהפעולות הבאות:
אם רוצים להשתמש במאגר מוכן מראש לאימון, צריך לספק ל-Vertex AI את המידע שהוא צריך כדי להשתמש בחבילת האימון שהעליתם ל-Cloud Storage:
משתמשים בתפריטים הנפתחים Model framework (מסגרת מודל) ו-Model framework version (גרסת מסגרת המודל) כדי לציין את מאגר התגים המובנה שבו רוצים להשתמש.
בשדה Package location (מיקום החבילה), מציינים את ה-URI של Cloud Storage של אפליקציית האימון של Python שיצרתם והעליתם. הקובץ הזה בדרך כלל מסתיים ב-
.tar.gz.בשדה Python module [מודול Python], מזינים את שם המודול של נקודת הכניסה של אפליקציית האימון.
אם רוצים להשתמש בקונטיינר בהתאמה אישית לאימון, בשדה Container image (קובץ אימג' של קונטיינר) מציינים את ה-URI של קובץ האימג' של הקונטיינר ב-Artifact Registry או ב-Docker Hub.
בשדה Model output directory (ספריית פלט של המודל), אפשר לציין את ה-URI של Cloud Storage של ספרייה בקטגוריה שיש לכם גישה אליה. הספרייה לא צריכה להתקיים עדיין.
הערך הזה מועבר אל Vertex AI בשדה
baseOutputDirectoryAPI, שקובע כמה משתני סביבה שהאפליקציה לאימון יכולה לגשת אליהם כשהיא פועלת.אופציונלי: בשדה Arguments (ארגומנטים), אפשר לציין ארגומנטים לשימוש ב-Vertex AI כשהוא מתחיל להריץ את קוד האימון. האורך המקסימלי של כל הארגומנטים יחד הוא 100,000 תווים. ההתנהגות של הארגומנטים האלה שונה בהתאם לסוג מאגר התגים שבו אתם משתמשים:
אם אתם משתמשים בקונטיינר מוכן מראש, Vertex AI מעביר את הארגומנטים כדגלים של שורת פקודה אל מודול Python.
אם אתם משתמשים בקונטיינר בהתאמה אישית, מערכת Vertex AI מחליפה את ההוראה
CMDבקונטיינר שלכם בארגומנטים.
לוחצים על Continue.
בשלב Hyperparameter tuning (התאמת היפרפרמטרים), מסמנים את התיבה Enable hyperparameter tuning (הפעלת התאמת היפרפרמטרים) ומציינים את ההגדרות הבאות:
בקטע New Hyperparameter (היפרפרמטר חדש), מציינים את Parameter name (שם הפרמטר) ואת Type (הסוג) של ההיפרפרמטר שרוצים לכוונן. בהתאם לסוג שציינתם, מגדירים את ההגדרות הנוספות של ההיפר-פרמטרים שמופיעות.
אם רוצים לשנות יותר מפרמטר היפר, לוחצים על הוספת פרמטר חדש וחוזרים על השלב הקודם בקטע החדש שמופיע.
חוזרים על הפעולה הזו לכל היפר-פרמטר שרוצים לכוון.
בשדה Metric to optimize ובתפריט הנפתח Goal, מציינים את השם והיעד של המדד שרוצים לבצע לו אופטימיזציה.
בשדה Maximum number of trials (מספר הניסיונות המקסימלי), מציינים את מספר הניסיונות המקסימלי שרוצים ש-Vertex AI תריץ עבור משימת כוונון ההיפר-פרמטרים.
בשדה Maximum number of parallel trials (מספר מקסימלי של ניסויים מקבילים), מציינים את המספר המקסימלי של ניסויים ש-Vertex AI יכול להריץ בו-זמנית.
ברשימה הנפתחת Search algorithm, מציינים search algorithm לשימוש ב-Vertex AI.
אין צורך להפעיל את המתג הפעלת עצירה מוקדמת, כי הוא לא משפיע על התוצאות.
לוחצים על Continue.
בשלב Compute and pricing (חישוב ותמחור), מציינים את ההגדרות הבאות:
בתפריט הנפתח Region, בוחרים באפשרות region that supports custom training (אזור שתומך באימון בהתאמה אישית).
בקטע Worker pool 0 (מאגר עובדים 0), מציינים את משאבי מחשוב שבהם רוצים להשתמש לאימון.
אם מציינים מאיצים, צריך לוודא שסוג המאיץ שנבחר זמין באזור שנבחר.
אם רוצים לבצע אימון מבוזר, לוחצים על Add more worker pools (הוספת מאגרי עובדים) ומציינים קבוצה נוספת של משאבי מחשוב לכל מאגר עובדים נוסף שרוצים.
לוחצים על Continue.
בשלב Prediction container (מאגר תגים לחיזוי), בוחרים באפשרות No prediction container (אין מאגר תגים לחיזוי).
כדי להפעיל את צינור ההכשרה בלי שרת (serverless), לוחצים על Start training (התחלת ההכשרה).
gcloud
בשלבים הבאים מוסבר איך להשתמש ב-Google Cloud CLI כדי ליצור HyperparameterTuningJob עם הגדרה מינימלית יחסית. כדי לקבל מידע על כל אפשרויות ההגדרה שאפשר להשתמש בהן למשימה הזו, אפשר לעיין במסמכי העזרה של הפקודה gcloud ai hp-tuning-jobs create ושל משאב ה-API HyperparameterTuningJob.
יוצרים קובץ YAML בשם
config.yamlעם כמה שדות API שרוצים לציין עבורHyerparameterTuningJobהחדש:config.yamlstudySpec: metrics: - metricId: METRIC_ID goal: METRIC_GOAL parameters: - parameterId: HYPERPARAMETER_ID doubleValueSpec: minValue: DOUBLE_MIN_VALUE maxValue: DOUBLE_MAX_VALUE trialJobSpec: workerPoolSpecs: - machineSpec: machineType: MACHINE_TYPE replicaCount: 1 containerSpec: imageUri: CUSTOM_CONTAINER_IMAGE_URIמחליפים את מה שכתוב בשדות הבאים:
METRIC_ID: השם של מדד היפר-פרמטר לאופטימיזציה. קוד האימון צריך לדווח על המדד הזה כשהוא פועל.
METRIC_GOAL: היעד של מדד ההיפר-פרמטר,MAXIMIZEאוMINIMIZE.
HYPERPARAMETER_ID: השם של היפר-פרמטר לכוונון. קוד האימון צריך לנתח דגל של שורת פקודה עם השם הזה. בדוגמה הזו, ההיפרפרמטר צריך לקבל ערכים של נקודה צפה. מידע נוסף על סוגי נתונים של היפרפרמטרים
DOUBLE_MIN_VALUE: הערך המינימלי (מספר) שרוצים ש-Vertex AI ינסה עבור ההיפרפרמטר הזה.
DOUBLE_MAX_VALUE: הערך המקסימלי (מספר) שרוצים ש-Vertex AI ינסה עבור ההיפרפרמטר הזה.
MACHINE_TYPE: סוג המכונה הווירטואלית שבה רוצים להשתמש לאימון.
CUSTOM_CONTAINER_IMAGE_URI: ה-URI של קובץ אימג' של קונטיינר Docker עם קוד האימון. למד כיצד ליצור קובץ אימג' של קונטיינר בהתאמה אישיתבדוגמה הזו, צריך להשתמש במאגר תגים בהתאמה אישית.
HyperparameterTuningJobתומכים גם בקוד אימון בהפצה של קוד מקור ב-Python במקום בקונטיינר מותאם אישית.
באותה ספרייה שבה נמצא הקובץ
config.yaml, מריצים את פקודת ה-Shell הבאה:gcloud ai hp-tuning-jobs create \ --region=LOCATION \ --display-name=DISPLAY_NAME \ --max-trial-count=MAX_TRIAL_COUNT \ --parallel-trial-count=PARALLEL_TRIAL_COUNT \ --config=config.yamlמחליפים את מה שכתוב בשדות הבאים:
LOCATION: האזור שבו רוצים ליצור אתHyperparameterTuningJob. משתמשים באזור שתומך באימון ללא שרת.
DISPLAY_NAME: שם תצוגה קליט לבחירתכם עבורHyperparameterTuningJob. מידע נוסף זמין במאמר בנושא משאבי REST.
MAX_TRIAL_COUNT: המספר המקסימלי של ניסיונות להרצה.
PARALLEL_TRIAL_COUNT: המספר המקסימלי של ניסויים להרצה במקביל.
REST
בדוגמת הקוד הבאה מוסבר איך ליצור משימה של כוונון היפר-פרמטרים באמצעות השיטה create של המשאב hyperparameterTuningJob.
לפני שמשתמשים בנתוני הבקשה, צריך להחליף את הנתונים הבאים:
-
LOCATION: האזור שבו רוצים ליצור אתHyperparameterTuningJob. משתמשים באזור שתומך באימון ללא שרת. - PROJECT: מזהה הפרויקט.
-
DISPLAY_NAME: שם תצוגה קליט לבחירתכם עבורHyperparameterTuningJob. מידע נוסף זמין במאמר בנושא משאבי REST. - מציינים את המדדים:
-
METRIC_ID: השם של מדד היפר-פרמטר לאופטימיזציה. קוד האימון צריך לדווח על המדד הזה כשהוא פועל. -
METRIC_GOAL: היעד של מדד ההיפר-פרמטר,MAXIMIZEאוMINIMIZE.
-
- מציינים את ההיפר-פרמטרים:
-
HYPERPARAMETER_ID: השם של היפר-פרמטר לכוונון. קוד האימון צריך לנתח דגל של שורת פקודה עם השם הזה. - PARAMETER_SCALE: (אופציונלי). איך צריך לשנות את קנה המידה של הפרמטר. משאירים את הערך לא מוגדר
לפרמטרים קטגוריים. יכול להיות
UNIT_LINEAR_SCALE,UNIT_LOG_SCALE,UNIT_REVERSE_LOG_SCALEאוSCALE_TYPE_UNSPECIFIED - אם סוג ההיפרפרמטר הזה הוא DOUBLE, מציינים את הערכים המינימלי (DOUBLE_MIN_VALUE) והמקסימלי (DOUBLE_MAX_VALUE) של ההיפרפרמטר הזה.
- אם הסוג של ההיפרפרמטר הזה הוא INTEGER, מציינים את הערכים המינימלי (INTEGER_MIN_VALUE) והמקסימלי (INTEGER_MAX_VALUE) של ההיפרפרמטר הזה.
- אם סוג ההיפרפרמטר הזה הוא CATEGORICAL, מציינים את הערכים הקבילים (CATEGORICAL_VALUES) כמערך של מחרוזות.
- אם סוג הפרמטר ההיפר הזה הוא DISCRETE, מציינים את הערכים הקבילים (DISCRETE_VALUES) כמערך של מספרים.
- מציינים היפרפרמטרים מותנים. היפרפרמטרים מותנים מתווספים לניסוי כשהערך של ההיפרפרמטר הראשי תואם לתנאי שציינתם.
מידע נוסף על היפרפרמטרים מותנים
- CONDITIONAL_PARAMETER:
ParameterSpecשל הפרמטר המותנה. המפרט הזה כולל את שם הפרמטר, קנה המידה, טווח הערכים וכל פרמטר מותנה שתלוי בהיפרפרמטר הזה. - אם סוג הפרמטר ההיפר הוא INTEGER, מציינים רשימה של מספרים שלמים בתור INTEGERS_TO_MATCH. אם הערך של ההיפרפרמטר הראשי תואם לאחד מהערכים שצוינו, הפרמטר המותנה הזה יתווסף לניסוי.
- אם סוג הפרמטר ההיפר-פרמטר של ההורה הוא CATEGORICAL, מציינים רשימה של קטגוריות בתור CATEGORIES_TO_MATCH. אם הערך של ההיפרפרמטר הראשי תואם לאחד מהערכים שצוינו, הפרמטר המותנה הזה יתווסף לניסוי.
- אם סוג הפרמטר ההיפר הוא DISCRETE, צריך לציין רשימה של מספרים שלמים בתור DISCRETE_VALUES_TO_MATCH. אם הערך של ההיפרפרמטר הראשי תואם לאחד מהערכים שצוינו, הפרמטר המותנה הזה יתווסף לניסוי.
- CONDITIONAL_PARAMETER:
-
- ALGORITHM: (אופציונלי). אלגוריתם החיפוש שבו יש להשתמש במשימת כוונון ההיפר-פרמטרים הזו.
הערך צריך להיות אחד מהערכים האלה: יכול להיות
ALGORITHM_UNSPECIFIED,GRID_SEARCHאוRANDOM_SEARCH. -
MAX_TRIAL_COUNT: המספר המקסימלי של ניסיונות להרצה. -
PARALLEL_TRIAL_COUNT: המספר המקסימלי של ניסויים להרצה במקביל. - MAX_FAILED_TRIAL_COUNT: מספר המשימות שיכולות להיכשל לפני שמשימת כוונון ההיפר-פרמטר נכשלת.
- מגדירים את משימת ההכשרה המותאמת אישית לניסיון:
-
MACHINE_TYPE: סוג המכונה הווירטואלית שבה רוצים להשתמש לאימון. - ACCELERATOR_TYPE: (אופציונלי). סוג המאיץ לצירוף לכל תקופת ניסיון.
- ACCELERATOR_COUNT: (אופציונלי). מספר המאיצים לצירוף לכל תקופת ניסיון.
- REPLICA_COUNT: מספר העותקים המשוכפלים של העובדים שבהם יש להשתמש בכל ניסיון.
- אם אפליקציית האימון פועלת בקונטיינר בהתאמה אישית, צריך לציין את הפרטים הבאים:
-
CUSTOM_CONTAINER_IMAGE_URI: ה-URI של קובץ אימג' של קונטיינר Docker עם קוד האימון. למד כיצד ליצור קובץ אימג' של קונטיינר בהתאמה אישית - CUSTOM_CONTAINER_COMMAND: (אופציונלי). הפקודה שתופעל כשהקונטיינר יופעל. הפקודה הזו מבטלת את נקודת הכניסה שמוגדרת כברירת מחדל במאגר.
- CUSTOM_CONTAINER_ARGS: (אופציונלי). הארגומנטים שיועברו כשמפעילים את הקונטיינר.
-
- אם אפליקציית האימון היא חבילת Python שפועלת במאגר מובנה מראש, צריך לציין את הפרטים הבאים:
- PYTHON_PACKAGE_EXECUTOR_IMAGE_URI: ה-URI של קובץ אימג' של קונטיינר שמריץ את חבילת Python שצוינה. מידע נוסף על מאגרי תגים מוכנים מראש לאימון
- PYTHON_PACKAGE_URIS: המיקום ב-Cloud Storage של קובצי חבילת Python שהם תוכנית האימון והחבילות שתלויות בה. המספר המקסימלי של כתובות ה-URI של החבילות הוא 100.
- PYTHON_MODULE: השם של מודול Python להפעלה אחרי התקנת החבילות.
- PYTHON_PACKAGE_ARGS: (אופציונלי). ארגומנטים של שורת הפקודה שיועברו למודול Python.
- SERVICE_ACCOUNT: (אופציונלי). חשבון השירות שבו Vertex AI ישתמש כדי להריץ את הקוד. מידע נוסף על צירוף חשבון שירות בהתאמה אישית
- TIMEOUT: (אופציונלי). זמן הריצה המקסימלי לכל תקופת ניסיון.
-
- מציינים את התוויות LABEL_NAME ו-LABEL_VALUE שרוצים להוסיף למשימת הכוונון של ההיפר-פרמטרים.
ה-method של ה-HTTP וכתובת ה-URL:
POST https://LOCATION-aiplatform.googleapis.com/v1/projects/PROJECT/locations/LOCATION/hyperparameterTuningJobs
תוכן בקשת JSON:
{
"displayName": DISPLAY_NAME,
"studySpec": {
"metrics": [
{
"metricId": METRIC_ID,
"goal": METRIC_GOAL
}
],
"parameters": [
{
"parameterId": PARAMETER_ID,
"scaleType": PARAMETER_SCALE,
// Union field parameter_value_spec can be only one of the following:
"doubleValueSpec": {
"minValue": DOUBLE_MIN_VALUE,
"maxValue": DOUBLE_MAX_VALUE
},
"integerValueSpec": {
"minValue": INTEGER_MIN_VALUE,
"maxValue": INTEGER_MAX_VALUE
},
"categoricalValueSpec": {
"values": [
CATEGORICAL_VALUES
]
},
"discreteValueSpec": {
"values": [
DISCRETE_VALUES
]
}
// End of list of possible types for union field parameter_value_spec.
"conditionalParameterSpecs": [
"parameterSpec": {
CONDITIONAL_PARAMETER
}
// Union field parent_value_condition can be only one of the following:
"parentIntValues": {
"values": [INTEGERS_TO_MATCH]
}
"parentCategoricalValues": {
"values": [CATEGORIES_TO_MATCH]
}
"parentDiscreteValues": {
"values": [DISCRETE_VALUES_TO_MATCH]
}
// End of list of possible types for union field parent_value_condition.
]
}
],
"ALGORITHM": ALGORITHM
},
"maxTrialCount": MAX_TRIAL_COUNT,
"parallelTrialCount": PARALLEL_TRIAL_COUNT,
"maxFailedTrialCount": MAX_FAILED_TRIAL_COUNT,
"trialJobSpec": {
"workerPoolSpecs": [
{
"machineSpec": {
"machineType": MACHINE_TYPE,
"acceleratorType": ACCELERATOR_TYPE,
"acceleratorCount": ACCELERATOR_COUNT
},
"replicaCount": REPLICA_COUNT,
// Union field task can be only one of the following:
"containerSpec": {
"imageUri": CUSTOM_CONTAINER_IMAGE_URI,
"command": [
CUSTOM_CONTAINER_COMMAND
],
"args": [
CUSTOM_CONTAINER_ARGS
]
},
"pythonPackageSpec": {
"executorImageUri": PYTHON_PACKAGE_EXECUTOR_IMAGE_URI,
"packageUris": [
PYTHON_PACKAGE_URIS
],
"pythonModule": PYTHON_MODULE,
"args": [
PYTHON_PACKAGE_ARGS
]
}
// End of list of possible types for union field task.
}
],
"scheduling": {
"TIMEOUT": TIMEOUT
},
"serviceAccount": SERVICE_ACCOUNT
},
"labels": {
LABEL_NAME_1": LABEL_VALUE_1,
LABEL_NAME_2": LABEL_VALUE_2
}
}
כדי לשלוח את הבקשה צריך להרחיב אחת מהאפשרויות הבאות:
אתם אמורים לקבל תגובת JSON שדומה לזו:
{
"name": "projects/12345/locations/us-central1/hyperparameterTuningJobs/6789",
"displayName": "myHyperparameterTuningJob",
"studySpec": {
"metrics": [
{
"metricId": "myMetric",
"goal": "MINIMIZE"
}
],
"parameters": [
{
"parameterId": "myParameter1",
"integerValueSpec": {
"minValue": "1",
"maxValue": "128"
},
"scaleType": "UNIT_LINEAR_SCALE"
},
{
"parameterId": "myParameter2",
"doubleValueSpec": {
"minValue": 1e-07,
"maxValue": 1
},
"scaleType": "UNIT_LINEAR_SCALE"
}
],
"ALGORITHM": "RANDOM_SEARCH"
},
"maxTrialCount": 20,
"parallelTrialCount": 1,
"trialJobSpec": {
"workerPoolSpecs": [
{
"machineSpec": {
"machineType": "n1-standard-4"
},
"replicaCount": "1",
"pythonPackageSpec": {
"executorImageUri": "us-docker.pkg.dev/vertex-ai/training/training-tf-cpu.2-1:latest",
"packageUris": [
"gs://my-bucket/my-training-application/trainer.tar.bz2"
],
"pythonModule": "my-trainer.trainer"
}
}
]
}
}
Java
לפני שמנסים את הדוגמה הזו, צריך לפעול לפי Javaהוראות ההגדרה במאמר Vertex AI quickstart using client libraries. מידע נוסף מופיע במאמרי העזרה של Vertex AI Java API.
כדי לבצע אימות ב-Vertex AI, צריך להגדיר את Application Default Credentials. מידע נוסף זמין במאמר הגדרת אימות לסביבת פיתוח מקומית.
Python
במאמר התקנת Vertex AI SDK ל-Python מוסבר איך להתקין או לעדכן את Vertex AI SDK ל-Python. מידע נוסף מופיע ב מאמרי העזרה של Python API.
הגדרת משימת אימון של היפר-פרמטרים
משימות כוונון של היפר-פרמטרים מחפשות את השילוב הטוב ביותר של היפר-פרמטרים כדי לבצע אופטימיזציה של המדדים. כדי לעשות את זה, המערכת מריצה כמה ניסיונות של אפליקציית האימון עם קבוצות שונות של היפרפרמטרים.
כשמגדירים משימת כוונון של היפר-פרמטר, צריך לציין את הפרטים הבאים:
היפרפרמטרים שרוצים לכוונן ומדדים שרוצים להשתמש בהם כדי להעריך ניסויים.
פרטים על מספר הניסויים שיופעלו כחלק ממשימת ההתאמה הזו, כמו הפרטים הבאים:
פרטים על משימת האימון בלי שרת (serverless) שמופעלת לכל תקופת ניסיון, כמו:
סוג המכונה שבה מופעלים ג'ובים של תקופת הניסיון והמאיצים שבהם הג'וב משתמש.
פרטי העבודה של מאגר התגים המותאם אישית או חבילת Python.
הגבלת מספר תקופות הניסיון
קובעים כמה ניסויים רוצים לאפשר לשירות להריץ ומגדירים את הערך maxTrialCount באובייקט HyperparameterTuningJob.
יש שני אינטרסים מנוגדים שצריך לקחת בחשבון כשמחליטים כמה תקופות ניסיון לאפשר:
- זמן (ולכן גם עלות)
- דיוק
הגדלת מספר הניסויים בדרך כלל מניבה תוצאות טובות יותר, אבל לא תמיד. בדרך כלל, יש נקודה שמעבר לה התועלת הנוספת פוחתת, ואחריה לניסויים נוספים יש השפעה מועטה או בכלל לא על הדיוק. לפני שמתחילים עבודה עם מספר גדול של ניסויים, כדאי להתחיל עם מספר קטן של ניסויים כדי להעריך את ההשפעה של ההיפרפרמטרים שבחרתם על הדיוק של המודל.
כדי להפיק את המרב מהתאמת ההיפר-פרמטרים, לא מומלץ להגדיר ערך מקסימלי שהוא נמוך פי עשרה ממספר ההיפר-פרמטרים שבהם אתם משתמשים.
ניסויים מקבילים
אפשר לציין כמה ניסויים יכולים לרוץ במקביל על ידי הגדרת parallelTrialCount ב-HyperparameterTuningJob.
היתרון בהרצת ניסויים מקבילים הוא קיצור הזמן שנדרש להרצת משימת האימון (בזמן אמת – בדרך כלל לא משתנה הזמן הכולל שנדרש לעיבוד). עם זאת, הפעלה מקבילה עלולה להפחית את היעילות הכוללת של משימת ההתאמה. הסיבה לכך היא ששיפור הפרמטרים העל משתמש בתוצאות של ניסויים קודמים כדי להקצות ערכים לפרמטרים העל של ניסויים עוקבים. כשמריצים ניסויים במקביל, חלק מהניסויים מתחילים בלי שהתוצאות של ניסויים אחרים שעדיין פועלים ישפיעו עליהם.
אם משתמשים בניסויים מקבילים, שירות אופטימיזציית ההיפר-פרמטרים מספק כמה אשכולות לעיבוד נתונים לצורך אימון (או כמה מכונות נפרדות במקרה של מאמן חד-תהליכי). הגדרת המפרט של מאגר העבודה שקבעתם למשימה משמשת לכל אשכול אימון בנפרד.
טיפול בתקופות ניסיון שנכשלו
אם ניסיונות כוונון ההיפרפרמטרים מסתיימים עם שגיאות, יכול להיות שכדאי לסיים את משימת האימון מוקדם מהמתוכנן. מגדירים את השדה maxFailedTrialCount ב-HyperparameterTuningJob למספר הניסיונות הכושלים שרוצים לאפשר. אחרי שמספר הניסיונות הזה נכשל, Vertex AI מסיים את משימת האימון. הערך של maxFailedTrialCount חייב להיות קטן מ-maxTrialCount או שווה לו.
אם לא מגדירים את maxFailedTrialCount, או אם מגדירים אותו ל-0, Vertex AI משתמש בכללים הבאים כדי לטפל בניסיונות שנכשלו:
- אם הניסיון הראשון של העבודה נכשל, Vertex AI מסיים את העבודה באופן מיידי. אם הניסיון הראשון נכשל, כנראה שיש בעיה בקוד האימון, ולכן סביר להניח שגם ניסיונות נוספים ייכשלו. הפסקת העבודה מאפשרת לאבחן את הבעיה בלי לחכות לניסיונות נוספים ובלי לשלם עלויות גבוהות יותר.
- אם הניסיון הראשון מצליח, יכול להיות ש-Vertex AI יסיים את הג'וב אחרי כשלים בניסיונות הבאים, על סמך אחד מהקריטריונים הבאים:
- מספר הניסיונות הכושלים גדל יותר מדי.
- היחס בין ניסיונות כושלים לניסיונות מוצלחים גבוה מדי.
הכללים האלה עשויים להשתנות. כדי להבטיח התנהגות ספציפית, מגדירים את השדה maxFailedTrialCount.
ניהול משימות כוונון של היפר-פרמטר
בקטעים הבאים מוסבר איך לנהל את המשימות של כוונון היפרפרמטרים.
אחזור מידע על משימת כוונון של היפרפרמטרים
בדוגמאות הקוד הבאות אפשר לראות איך לאחזר משימת אופטימיזציה של היפרפרמטרים.
gcloud
משתמשים בפקודה gcloud ai hp-tuning-jobs describe:
gcloud ai hp-tuning-jobs describe ID_OR_NAME \
--region=LOCATION
מחליפים את מה שכתוב בשדות הבאים:
ID_OR_NAME: השם או המזהה המספרי שלHyperparameterTuningJob. (המזהה הוא החלק האחרון של השם).יכול להיות שראיתם את המזהה או את השם כשנוצר
HyperparameterTuningJob. אם אתם לא יודעים את המזהה או השם, אתם יכולים להריץ את הפקודהgcloud ai hp-tuning-jobs listולחפש את המשאב המתאים.
LOCATION: האזור שבו נוצרHyperparameterTuningJob.
REST
דוגמת הקוד הבאה מראה איך לאחזר משימה של כוונון היפר-פרמטרים באמצעות השיטה get של המשאב hyperparameterTuningJob.
לפני שמשתמשים בנתוני הבקשה, צריך להחליף את הנתונים הבאים:
-
LOCATION: האזור שבו נוצרHyperparameterTuningJob. - NAME: השם של משימת כוונון ההיפר-פרמטר. שם המשרה מופיע בפורמט הבא
projects/{project}/LOCATIONS/{LOCATION}/hyperparameterTuningJobs/{hyperparameterTuningJob}.
ה-method של ה-HTTP וכתובת ה-URL:
GET https://LOCATION-aiplatform.googleapis.com/v1/NAME
כדי לשלוח את הבקשה צריך להרחיב אחת מהאפשרויות הבאות:
אתם אמורים לקבל תגובת JSON שדומה לזו:
{
"name": "projects/12345/LOCATIONs/us-central1/hyperparameterTuningJobs/6789",
"displayName": "my-hyperparameter-tuning-job",
"studySpec": {
"metrics": [
{
"metricId": "my_metric",
"goal": "MINIMIZE"
}
],
"parameters": [
{
"parameterId": "my_parameter",
"doubleValueSpec": {
"minValue": 1e-05,
"maxValue": 1
}
}
]
},
"maxTrialCount": 3,
"parallelTrialCount": 1,
"trialJobSpec": {
"workerPoolSpecs": [
{
"machineSpec": {
"machineType": "n1-standard-4"
},
"replicaCount": "1",
"pythonPackageSpec": {
"executorImageUri": "us-docker.pkg.dev/vertex-ai/training/training-tf-cpu.2-1:latest",
"packageUris": [
"gs://my-bucket/my-training-application/trainer.tar.bz2"
],
"pythonModule": "my-trainer.trainer"
}
}
]
},
"trials": [
{
"id": "2",
"state": "SUCCEEDED",
"parameters": [
{
"parameterId": "my_parameter",
"value": 0.71426874725564571
}
],
"finalMeasurement": {
"stepCount": "2",
"metrics": [
{
"metricId": "my_metric",
"value": 0.30007445812225342
}
]
},
"startTime": "2020-09-09T23:39:15.549112551Z",
"endTime": "2020-09-09T23:47:08Z"
},
{
"id": "3",
"state": "SUCCEEDED",
"parameters": [
{
"parameterId": "my_parameter",
"value": 0.3078893356622992
}
],
"finalMeasurement": {
"stepCount": "2",
"metrics": [
{
"metricId": "my_metric",
"value": 0.30000102519989014
}
]
},
"startTime": "2020-09-09T23:49:22.451699360Z",
"endTime": "2020-09-09T23:57:15Z"
},
{
"id": "1",
"state": "SUCCEEDED",
"parameters": [
{
"parameterId": "my_parameter",
"value": 0.500005
}
],
"finalMeasurement": {
"stepCount": "2",
"metrics": [
{
"metricId": "my_metric",
"value": 0.30005377531051636
}
]
},
"startTime": "2020-09-09T23:23:12.283374629Z",
"endTime": "2020-09-09T23:36:56Z"
}
],
"state": "JOB_STATE_SUCCEEDED",
"createTime": "2020-09-09T23:22:31.777386Z",
"startTime": "2020-09-09T23:22:34Z",
"endTime": "2020-09-10T01:31:24.271307Z",
"updateTime": "2020-09-10T01:31:24.271307Z"
}
Java
לפני שמנסים את הדוגמה הזו, צריך לפעול לפי Javaהוראות ההגדרה במאמר Vertex AI quickstart using client libraries. מידע נוסף מופיע במאמרי העזרה של Vertex AI Java API.
כדי לבצע אימות ב-Vertex AI, צריך להגדיר את Application Default Credentials. מידע נוסף זמין במאמר הגדרת אימות לסביבת פיתוח מקומית.
Python
במאמר התקנת Vertex AI SDK ל-Python מוסבר איך להתקין או לעדכן את Vertex AI SDK ל-Python. מידע נוסף מופיע ב מאמרי העזרה של Python API.
ביטול משימת כוונון של היפר-פרמטר
בדוגמאות הקוד הבאות אפשר לראות איך לבטל משימת אופטימיזציה של היפרפרמטרים.
gcloud
משתמשים בפקודה gcloud ai hp-tuning-jobs cancel:
gcloud ai hp-tuning-jobs cancel ID_OR_NAME \
--region=LOCATION
מחליפים את מה שכתוב בשדות הבאים:
ID_OR_NAME: השם או המזהה המספרי שלHyperparameterTuningJob. (המזהה הוא החלק האחרון של השם).יכול להיות שראיתם את המזהה או את השם כשנוצר
HyperparameterTuningJob. אם אתם לא יודעים את המזהה או השם, אתם יכולים להריץ את הפקודהgcloud ai hp-tuning-jobs listולחפש את המשאב המתאים.
LOCATION: האזור שבו נוצרHyperparameterTuningJob.
REST
בדוגמת הקוד הבאה מוצג איך לבטל משימת כוונון היפר-פרמטרים באמצעות השיטה cancel של המשאב hyperparameterTuningJob.
לפני שמשתמשים בנתוני הבקשה, צריך להחליף את הנתונים הבאים:
-
LOCATION: האזור שבו נוצרHyperparameterTuningJob. - NAME: השם של משימת כוונון ההיפר-פרמטר. שם המשרה מופיע בפורמט הבא
projects/{project}/locations/{location}/hyperparameterTuningJobs/{hyperparameterTuningJob}.
ה-method של ה-HTTP וכתובת ה-URL:
POST https://LOCATION-aiplatform.googleapis.com/v1/NAME:cancel
כדי לשלוח את הבקשה צריך להרחיב אחת מהאפשרויות הבאות:
אמור להתקבל קוד סטטוס של הצלחה (2xx) ותגובה ריקה.
Python
במאמר התקנת Vertex AI SDK ל-Python מוסבר איך להתקין או לעדכן את Vertex AI SDK ל-Python. מידע נוסף מופיע ב מאמרי העזרה של Python API.
מחיקת משימת כוונון של היפר-פרמטר
בדוגמאות הקוד הבאות אפשר לראות איך מוחקים משימת כוונון היפר-פרמטרים באמצעות Vertex AI SDK ל-Python ו-API בארכיטקטורת REST.
REST
כדי למחוק משימה של כוונון היפר-פרמטרים באמצעות השיטה delete של המשאב hyperparameterTuningJob, משתמשים בדוגמת הקוד הבאה.
לפני שמשתמשים בנתוני הבקשה, צריך להחליף את הנתונים הבאים:
- LOCATION: האזור שלכם.
- NAME: השם של משימת כוונון ההיפר-פרמטר. שם המשרה מופיע בפורמט הבא
projects/{project}/LOCATIONs/{LOCATION}/hyperparameterTuningJobs/{hyperparameterTuningJob}.
ה-method של ה-HTTP וכתובת ה-URL:
DELETE https://LOCATION-aiplatform.googleapis.com/v1/NAME
כדי לשלוח את הבקשה צריך להרחיב אחת מהאפשרויות הבאות:
אמור להתקבל קוד סטטוס של הצלחה (2xx) ותגובה ריקה.
Python
במאמר התקנת Vertex AI SDK ל-Python מוסבר איך להתקין או לעדכן את Vertex AI SDK ל-Python. מידע נוסף מופיע ב מאמרי העזרה של Python API.
המאמרים הבאים
- מידע נוסף על המושגים שקשורים לכוונון היפרפרמטרים
- איך מתזמנים משימות אימון בלי שרת (serverless) על סמך זמינות המשאבים