אימון מודל באמצעות AutoML מקצה לקצה

בדף הזה מוסבר איך לאמן מודל סיווג או רגרסיה מתוך מערך נתונים טבלאי באמצעות Tabular Workflow for End-to-End AutoML (תהליך עבודה טבלאי ל-AutoML מקצה לקצה).

לפני שמתחילים

לפני שמבצעים אימון של מודל, צריך לבצע את הפעולות הבאות:

אם אתם מקבלים שגיאה שקשורה למכסות בזמן הפעלת Tabular Workflow for End-to-End AutoML, יכול להיות שתצטרכו לבקש מכסה גבוהה יותר. איך מנהלים את המכסות של Tabular Workflows

קבלת ה-URI של תוצאת כוונון ההיפרפרמטרים הקודמת

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

מסוף Google Cloud

כדי למצוא את ה-URI של תוצאת אופטימיזציית ההיפר-פרמטרים באמצעות מסוף Google Cloud , פועלים לפי השלבים הבאים:

  1. במסוף Google Cloud , בקטע Vertex AI, עוברים לדף Pipelines.

    כניסה לדף Pipelines

  2. לוחצים על הכרטיסייה הפעלות.

  3. בוחרים את ההרצה של צינור הנתונים שרוצים להשתמש בה.

  4. בוחרים באפשרות הרחבת ארטיפקטים.

  5. לוחצים על הרכיב exit-handler-1.

  6. לוחצים על הרכיב stage_1_tuning_result_artifact_uri_empty.

  7. מחפשים את הרכיב automl-tabular-cv-trainer-2.

  8. לוחצים על הארטיפקט המשויך tuning_result_output.

  9. בוחרים בכרטיסייה Node Info (פרטי הצומת).

  10. מעתיקים את ה-URI לשימוש בשלב Train a model (אימון מודל).

תוצאת חיפוש של אדריכלות

‫API: Python

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


def get_task_detail(
  task_details: List[Dict[str, Any]], task_name: str
) -> List[Dict[str, Any]]:
  for task_detail in task_details:
      if task_detail.task_name == task_name:
          return task_detail

pipeline_task_details = job.gca_resource.job_detail.task_details

stage_1_tuner_task = get_task_detail(
    pipeline_task_details, "automl-tabular-stage-1-tuner"
)
stage_1_tuning_result_artifact_uri = (
    stage_1_tuner_task.outputs["tuning_result_output"].artifacts[0].uri
)

אימון מודל

מסוף Google Cloud

כדי לאמן מודל באמצעות מסוף Google Cloud , מבצעים את השלבים הבאים:

  1. במסוף Google Cloud , בקטע Vertex AI, עוברים לדף Pipelines.

    כניסה לדף Pipelines

  2. בוחרים בכרטיסייה גלריית התבניות.

  3. בכרטיס AutoML for Tabular Classification / Regression, לוחצים על Create run.

  4. בדף Run details, קובעים את ההגדרות הבאות:

    1. מזינים שם להרצת הצינור.
    2. אופציונלי: אם רוצים להגדיר את חשבון השירות של Vertex AI Pipelines או את חשבון השירות של העובד ב-Dataflow, פותחים את האפשרויות המתקדמות. מידע נוסף על חשבונות שירות
    3. לוחצים על Continue.

  5. בדף Runtime configuration, מגדירים את ההגדרות הבאות:

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

      הקטגוריות של הפרויקט מופיעות בקטע Cloud Storage במסוף Google Cloud .

      כניסה לדף Buckets

    2. לוחצים על Continue.

  6. בדף Training method, מגדירים את האפשרויות הבאות:

    1. בוחרים את השם של מערך הנתונים שרוצים להשתמש בו כדי לאמן את המודל.
    2. בוחרים את עמודת היעד. עמודת היעד היא הערך שהמודל יחזה. מידע נוסף על הדרישות לגבי עמודת היעד
    3. מזינים את שם התצוגה של המודל החדש.
    4. אופציונלי: כדי לבחור איך לפצל את הנתונים בין קבוצות האימון, הבדיקה והאימות, פותחים את האפשרויות המתקדמות. אפשר לבחור מבין האפשרויות הבאות לפיצול הנתונים:
      • אקראי (ברירת מחדל): ‏ Vertex AI בוחר באופן אקראי את השורות שמשויכות לכל אחת מקבוצות הנתונים. כברירת מחדל, מערכת Vertex AI בוחרת 80% משורות הנתונים שלכם לקבוצת נתונים לאימון, 10% לקבוצת נתונים לתיקוף ו-10% לקבוצת נתונים לבדיקה. מגדירים את אחוז שורות הנתונים שרוצים לשייך לכל אחת מקבוצות הנתונים.
      • ידני: מערכת Vertex AI בוחרת שורות נתונים לכל אחד ממערכי הנתונים על סמך הערכים בעמודה של פיצול הנתונים. מזינים את השם של העמודה לפיצול הנתונים.
      • כרונולוגי: מערכת Vertex AI מפצלת את הנתונים על סמך חותמת הזמן בעמודת הזמן. מזינים את השם של עמודת הזמן. אפשר גם להגדיר את אחוז שורות הנתונים שרוצים לשייך לקבוצת הנתונים לאימון, לקבוצת הנתונים לתיקוף ולקבוצת הנתונים לבדיקה.
      • שכבות: מערכת Vertex AI בוחרת באופן אקראי את השורות שמשויכות לכל אחד ממערכי הנתונים, אבל שומרת על חלוקת הערכים של עמודת היעד. מזינים את השם של עמודת היעד. אפשר גם להגדיר את אחוז שורות הנתונים שרוצים לשייך לקבוצת נתונים לאימון, לקבוצת נתונים לתיקוף ולקבוצת נתונים לבדיקה.
      מידע נוסף על פיצול נתונים
    5. אופציונלי: אפשר להריץ את צינור העיבוד בלי חיפוש הארכיטקטורה. אם בוחרים באפשרות Skip architecture search (דילוג על חיפוש ארכיטקטורה), תתבקשו לספק קבוצה של היפרפרמטרים מהרצת צינור קודמת בדף Training options (אפשרויות אימון).
    6. לוחצים על Continue.

  7. בדף Training options, קובעים את ההגדרות הבאות:

    1. אופציונלי: לוחצים על יצירת נתונים סטטיסטיים. כשמפיקים נתונים סטטיסטיים, התפריטים הנפתחים שינוי מתמלאים.
    2. בודקים את רשימת העמודות ומוציאים מהאימון עמודות שלא אמורות לשמש לאימון המודל.
    3. בודקים את השינויים שנבחרו לתכונות הכלולות, ואם מותר להשתמש בנתונים לא תקינים, ומבצעים את העדכונים הנדרשים. מידע נוסף על טרנספורמציות ועל נתונים לא תקינים
    4. אם בחרתם לדלג על חיפוש הארכיטקטורה בדף Training method, צריך לספק את הנתיב אל hyperparameter tuning result מריצה קודמת של צינור.
    5. אופציונלי: אם רוצים לציין את עמודת המשקל, פותחים את האפשרויות המתקדמות ובוחרים את האפשרות הרצויה. מידע נוסף על עמודות משקל
    6. אופציונלי: אם רוצים לשנות את יעד האופטימיזציה מברירת המחדל, פותחים את האפשרויות המתקדמות ובוחרים את האפשרות הרצויה. מידע נוסף על יעדי אופטימיזציה
    7. אופציונלי: אם בוחרים לבצע את החיפוש של הארכיטקטורה בדף Training method (שיטת האימון), אפשר לציין את מספר הניסויים המקבילים. פותחים את האפשרויות המתקדמות ומזינים את הערך.
    8. אופציונלי: אפשר לספק ערכים קבועים לקבוצת משנה של היפרפרמטרים. ‫Vertex AI מחפש את הערכים האופטימליים של ההיפרפרמטרים הנותרים שלא נקבעו. האפשרות הזו מתאימה אם יש לכם העדפה ברורה לגבי סוג המודל. אתם יכולים לבחור בין רשתות עצביות לבין עצים מחוזקים כסוג המודל. פותחים את האפשרויות המתקדמות ומזינים החלפה של מפרט המחקר בפורמט JSON.

      לדוגמה, אם רוצים להגדיר את סוג המודל לרשתות נוירונים (NN), מזינים את הפקודה הבאה:

      [
        {
          "parameter_id": "model_type",
          "categorical_value_spec": {
            "values": ["nn"]
          }
        }
      ]
      

    9. לוחצים על Continue.

  8. בדף Compute and pricing (חישוב וחיוב), מבצעים את ההגדרות הבאות:

    1. מזינים את מספר השעות המקסימלי שרוצים לאמן את המודל. מידע נוסף על תמחור
    2. אופציונלי: בקטע Compute Settings אפשר להגדיר את סוגי המכונות ואת מספר המכונות לכל שלב בתהליך העבודה. האפשרות הזו מתאימה אם יש לכם מערך נתונים גדול ואתם רוצים לבצע אופטימיזציה של חומרת המכונה בהתאם.

  9. לוחצים על שליחה.

‫API: Python

בדוגמת הקוד הבאה אפשר לראות איך מריצים צינור עיבוד נתונים לאימון מודל:

job = aiplatform.PipelineJob(
    ...
    template_path=template_path,
    parameter_values=parameter_values,
    ...
)
job.run(service_account=SERVICE_ACCOUNT)

הפרמטר האופציונלי service_account ב-job.run() מאפשר להגדיר את חשבון השירות של Vertex AI Pipelines לחשבון לפי בחירתכם.

הפונקציה הבאה מגדירה את צינור הנתונים ואת ערכי הפרמטרים. נתוני האימון יכולים להיות קובץ CSV ב-Cloud Storage או טבלה ב-BigQuery.

template_path, parameter_values = automl_tabular_utils.get_automl_tabular_pipeline_and_parameters(...)

זוהי קבוצת משנה של פרמטרים של get_automl_tabular_pipeline_and_parameters:

שם הפרמטר סוג הגדרה
data_source_csv_filenames String ‫URI של קובץ CSV שמאוחסן ב-Cloud Storage.
data_source_bigquery_table_path String כתובת URI של טבלה ב-BigQuery.
dataflow_service_account String (אופציונלי) חשבון שירות מותאם אישית להרצת משימות Dataflow. אפשר להגדיר את עבודת Dataflow כך שתשתמש בכתובות IP פרטיות וברשת משנה ספציפית של VPC. הפרמטר הזה משמש כשינוי של חשבון השירות שמוגדר כברירת מחדל של עובד Dataflow.
prediction_type String בוחרים באפשרות classification כדי לאמן מודל סיווג או באפשרות regression כדי לאמן מודל רגרסיה.
optimization_objective String אם מאמנים מודל סיווג בינארי, יעד ברירת המחדל הוא AUC ROC. אם מאמנים מודל רגרסיה, יעד ברירת המחדל הוא RMSE. אם רוצים להגדיר יעד אופטימיזציה אחר למודל, בוחרים אחת מהאפשרויות שמופיעות בקטע יעדי אופטימיזציה למודלים של סיווג או רגרסיה.
enable_probabilistic_inference בוליאני אם מאמנים מודל רגרסיה ומגדירים את הערך הזה ל-true, מודלים של Vertex AI את התפלגות ההסתברות של ההסקה. הסקת מסקנות הסתברותית יכולה לשפר את איכות המודל על ידי טיפול בנתונים רועשים וכימות של אי הוודאות. אם מציינים את quantiles, ‏ Vertex AI מחזיר גם את הכמויות של ההתפלגות.
quantiles List[float] הקוונטילים שבהם יש להשתמש להסקת מסקנות הסתברותית. קוונטיל מציין את הסבירות לכך שערך היעד יהיה נמוך מערך נתון. צריך לספק רשימה של עד חמישה מספרים ייחודיים בין 0 ל-1, לא כולל.

אפשרויות להתאמה אישית של תהליכי עבודה

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

  • ביטול מרחב החיפוש
  • הגדרת ציוד ואביזרים
  • זיקוק המודל
  • דילוג על חיפוש הארכיטקטורה

שינוי מרחב החיפוש

הפרמטר get_automl_tabular_pipeline_and_parameters הבא מאפשר לספק ערכים קבועים לקבוצת משנה של היפרפרמטרים. מערכת Vertex AI מחפשת את הערכים האופטימליים של ההיפרפרמטרים הנותרים שלא קבועים. צריך להשתמש בפרמטר הזה אם רוצים לבחור בין רשתות נוירונים לבין עצים משופרים לסוג המודל.

שם הפרמטר סוג הגדרה
study_spec_parameters_override List[Dict[String, Any]] (אופציונלי) קבוצת משנה מותאמת אישית של היפרפרמטרים. הפרמטר הזה מגדיר את רכיב automl-tabular-stage-1-tuner בצינור עיבוד הנתונים.

בדוגמת הקוד הבאה אפשר לראות איך מגדירים את סוג המודל כרשתות נוירונים (NN):

study_spec_parameters_override = [
  {
    "parameter_id": "model_type",
    "categorical_value_spec": {
      "values": ["nn"] # The default value is ["nn", "boosted_trees"], this reduces the search space
    }
  }
]

הגדרת החומרה

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

שם הפרמטר סוג הגדרה
stage_1_tuner_worker_pool_specs_override Dict[String, Any] (אופציונלי) הגדרה בהתאמה אישית של סוגי המכונות ומספר המכונות לאימון. הפרמטר הזה מגדיר את רכיב automl-tabular-stage-1-tuner בצינור עיבוד הנתונים.
cv_trainer_worker_pool_specs_override Dict[String, Any] (אופציונלי) הגדרה בהתאמה אישית של סוגי המכונות ומספר המכונות לאימון. הפרמטר הזה מגדיר את רכיב automl-tabular-stage-1-tuner בצינור עיבוד הנתונים.

הקוד הבא מדגים איך להגדיר את n1-standard-8 סוג המכונה עבור צומת ה-chief של TensorFlow ואת n1-standard-4 סוג המכונה עבור צומת ה-evaluator של TensorFlow:

worker_pool_specs_override = [
  {"machine_spec": {"machine_type": "n1-standard-8"}}, # override for TF chief node
  {},  # override for TF worker node, since it's not used, leave it empty
  {},  # override for TF ps node, since it's not used, leave it empty
  {
    "machine_spec": {
        "machine_type": "n1-standard-4" # override for TF evaluator node
    }
  }
]

זיקוק המודל

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

שם הפרמטר סוג הגדרה
run_distillation בוליאני אם מציבים TRUE, נוצרת גרסה קטנה יותר של מודל האנסמבל.

דילוג על חיפוש ארכיטקטורה

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

שם הפרמטר סוג הגדרה
stage_1_tuning_result_artifact_uri String (אופציונלי) כתובת ה-URI של תוצאת כוונון ההיפרפרמטרים מהרצת צינור קודמת.

יעדי אופטימיזציה למודלים של סיווג או רגרסיה

כשמאמנים מודל, מערכת Vertex AI בוחרת יעד אופטימיזציה שמוגדר כברירת מחדל על סמך סוג המודל וסוג הנתונים שמשמשים לעמודת היעד.

מודלים של סיווג מתאימים במיוחד למקרים הבאים:
יעד האופטימיזציה ערך API כדאי להשתמש ביעד הזה אם רוצים…
AUC ROC maximize-au-roc מקסום השטח מתחת לעקומת מאפייני ההפעלה של המקלט (ROC). מבחין בין מחלקות. ערך ברירת המחדל לסיווג בינארי.
אובדן לוגריתמי minimize-log-loss לשמור על רמת דיוק גבוהה ככל האפשר בהסתברויות של ההסקות. היעד היחיד שנתמך לסיווג לכמה כיתות.
AUC PR maximize-au-prc מגדילים את השטח מתחת לעקומת הדיוק וההחזרה. מבצע אופטימיזציה של התוצאות להסקת מסקנות לגבי הסיווג הפחות נפוץ.
Precision at Recall maximize-precision-at-recall אופטימיזציה של הדיוק בערך ספציפי של היענות.
ריקול ברמת דיוק maximize-recall-at-precision אופטימיזציה של ההחזרה ברמת דיוק ספציפית.
מודלים של רגרסיה מתאימים במיוחד ל:
יעד האופטימיזציה ערך API כדאי להשתמש ביעד הזה אם רוצים…
RMSE minimize-rmse ממזערים את שורש הטעות הריבועית הממוצעת (RMSE). מציג ערכים קיצוניים בצורה מדויקת יותר. ערך ברירת המחדל.
MAE minimize-mae ממזערים את השגיאה הממוצעת המוחלטת (MAE). המודל מתייחס לערכים קיצוניים כאל חריגים עם השפעה נמוכה יותר.
RMSLE minimize-rmsle מזעור שורש טעות ריבועית ממוצעת של לוגריתם (RMSLE). העונש ניתן על שגיאה בגודל יחסי ולא על שגיאה בערך מוחלט. המדד הזה שימושי כשגם הערכים החזויים וגם הערכים בפועל יכולים להיות גדולים מאוד.

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