יצירת צינורות עיבוד נתונים לאימון

צינורות עיבוד נתונים לאימון מאפשרים לכם לבצע אימון מותאם אישית של למידת מכונה (ML) וליצור באופן אוטומטי משאב Model על סמך פלט האימון.

אם המשימה שלכם כוללת רק הפעלה של משימת אימון ויצירה אוטומטית של משאב מודל בלי לתזמן תהליך עבודה מלא, יכול להיות ששימוש בצינור אימון עצמאי כמו שמתואר במסמך הזה יספיק. עם זאת, אם המטרה שלכם היא ליצור מחזור חיים חזק, אוטומטי וניתן לחזרה של למידת מכונה מקצה לקצה, שכולל כמה שלבים (כמו עיבוד נתונים, אימון, הערכה, פריסה או מעקב), מומלץ להשתמש ב-Vertex AI Pipelines, כי הוא מיועד לניהול תהליכי עבודה.

לפני שיוצרים צינור עיבוד נתונים

לפני שיוצרים צינור עיבוד נתונים לאימון ב-Vertex AI, צריך ליצור אפליקציית אימון ב-Python או קונטיינר בהתאמה אישית כדי להגדיר את קוד האימון ואת התלות שרוצים להריץ ב-Vertex AI. אם יוצרים אפליקציית אימון ב-Python באמצעות PyTorch,‏ TensorFlow,‏ scikit-learn או XGBoost, אפשר להשתמש בקונטיינרים המובנים שלנו כדי להריץ את הקוד. אם אתם לא בטוחים איזו מהאפשרויות האלה לבחור, כדאי לעיין בדרישות לגבי קוד האימון כדי לקבל מידע נוסף.

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

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

  • מפעילים CustomJob ומעלים את המודל שנוצר ל-Vertex AI
  • להפעיל משימת כוונון היפר-פרמטרים ולהעלות את המודל שנוצר ל-Vertex AI

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

מה נכלל בCustomJob

כשיוצרים משימה בהתאמה אישית, מציינים הגדרות ש-Vertex AI צריך כדי להריץ את קוד האימון, כולל:

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

אם רוצים ליצור משימה מותאמת אישית עצמאית מחוץ לצינור אימון של Vertex AI, אפשר לעיין במדריך בנושא משימות בהתאמה אישית.

הגדרת צינור עיבוד הנתונים לשימוש במערך נתונים מנוהל

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

כדי להשתמש במערך נתונים מנוהל בצינור ההדרכה:

  1. יוצרים את מערך הנתונים.
  2. מעדכנים את אפליקציית האימון כך שתשתמש במערך נתונים מנוהל. מידע נוסף זמין במאמר איך Vertex AI מעביר את מערך הנתונים לאפליקציית האימון.
  3. מציינים מערך נתונים מנוהל כשיוצרים את צינור האימון. לדוגמה, אם יוצרים את צינור האימון באמצעות API בארכיטקטורת REST, צריך לציין את הגדרות מערך הנתונים בקטע inputDataConfig.

    צריך ליצור את צינור האימון באותו אזור שבו יצרתם את מערך הנתונים.

מידע נוסף זמין במאמר בנושא הפניית API ב-TrainingPipeline.

הגדרת אימון מבוזר

בצינור ההדרכה, אפשר להגדיר את משימת ההדרכה בלי שרת (serverless) או את משימת ההתאמה של היפר-פרמטרים להדרכה מבוזרת על ידי ציון של כמה מאגרי עובדים.

כל הדוגמאות בדף הזה מציגות משימות אימון עם רפליקה אחת ועם worker pool אחד. כדי לשנות אותן לאימון מבוזר:

  • משתמשים במאגר העובדים הראשון כדי להגדיר את הרפליקה הראשית, ומגדירים את מספר הרפליקות ל-1.
  • אפשר להוסיף עוד מאגרי עובדים כדי להגדיר רפליקות של עובדים, רפליקות של שרת פרמטרים או רפליקות של מעריך, אם מסגרת למידת המכונה תומכת במשימות נוספות של אשכולות לאימון מבוזר.

מידע נוסף על שימוש באימון מבוזר

העלאה של מודל ו-CustomJob

צינור האימון הזה כולל משימה בהתאמה אישית עם שלב נוסף שנועד להקל על פריסת המודל ב-Vertex AI אחרי האימון. צינור ההכשרה הזה מבצע שני דברים עיקריים:

  1. צינור העיבוד של האימון יוצר משאב CustomJob. המשימה בהתאמה אישית מפעילה את אפליקציית האימון באמצעות משאבי המחשוב שאתם מציינים.

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

יש שתי דרכים שונות להגדיר את המיקום של ארטיפקטים של מודלים:

  • אם הגדרתם baseOutputDirectory למשימת האימון, ודאו שקוד האימון שומר את ארטיפקטי המודל במיקום הזה באמצעות משתנה הסביבה $AIP_MODEL_DIR שהוגדר על ידי Vertex AI. אחרי שמשימת האימון מסתיימת, מערכת Vertex AI מחפשת את ארטיפקטים של המודל שנוצרו ב-gs://BASE_OUTPUT_DIRECTORY/model.

  • אם מגדירים את השדה modelToUpload.artifactUri, צינור עיבוד הנתונים של האימון מעלה את ארטיפקטים של המודל מה-URI הזה. חובה להגדיר את השדה הזה אם לא הגדרתם את baseOutputDirectory.

אם מציינים גם baseOutputDirectory וגם modelToUpload.artifactUri,‏ Vertex AI משתמש ב-modelToUpload.artifactUri.

כדי ליצור צינור אימונים מהסוג הזה:

המסוף

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

    מעבר אל 'אימון צינורות עיבוד נתונים'

  2. לוחצים על יצירה כדי לפתוח את החלונית אימון מודל חדש.

  3. בשלב Training method, מציינים את ההגדרות הבאות:

    1. אם רוצים להשתמש במערך נתונים מנוהל לצורך אימון, צריך לציין Dataset ו-Annotation set.

      אחרת, בתפריט הנפתח Dataset (מערך נתונים), בוחרים באפשרות No managed dataset (אין מערך נתונים מנוהל).

    2. בוחרים באפשרות אימון מותאם אישית (מתקדם).

    לוחצים על Continue.

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

  5. בשלב Training container (מאגר תגים לאימון), מציינים את ההגדרות הבאות:

    1. בוחרים אם להשתמש במאגר תגים מוכן מראש או במאגר תגים בהתאמה אישית להדרכה.

    2. בהתאם לבחירה, מבצעים אחת מהפעולות הבאות:

    3. בשדה Model output directory (ספריית פלט של המודל), מציינים את ה-URI של Cloud Storage של ספרייה בקטגוריה שיש לכם גישה אליה. הספרייה לא צריכה להתקיים עדיין.

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

      בסיום האימון, Vertex AI מחפש ארטיפקטים של המודל בספריית משנה של ה-URI הזה כדי ליצור Model. (ספריית המשנה הזו זמינה לקוד האימון שלכם כמשתנה הסביבה AIP_MODEL_DIR).

      אם לא משתמשים בכוונון היפר-פרמטרים, מערכת Vertex AI מצפה למצוא ארטיפקטים של מודלים ב-BASE_OUTPUT_DIRECTORY/model/.

    4. אופציונלי: בשדה Arguments (ארגומנטים), אפשר לציין ארגומנטים לשימוש ב-Vertex AI כשהוא מתחיל להריץ את קוד האימון. האורך המקסימלי של כל הארגומנטים יחד הוא 100,000 תווים. ההתנהגות של הארגומנטים האלה שונה בהתאם לסוג מאגר התגים שבו אתם משתמשים:

    לוחצים על Continue.

  6. בשלב Hyperparameter tuning (התאמת היפרפרמטרים), מוודאים שהתיבה Enable hyperparameter tuning (הפעלת התאמת היפרפרמטרים) לא מסומנת. לוחצים על המשך.

  7. בשלב Compute and pricing (חישוב ותמחור), מציינים את ההגדרות הבאות:

    1. בתפריט הנפתח Region, בוחרים באפשרות region that supports custom training (אזור שתומך באימון בהתאמה אישית).

    2. בקטע Worker pool 0 (מאגר עובדים 0), מציינים את משאבי מחשוב שבהם רוצים להשתמש לאימון.

      אם מציינים מאיצים, צריך לוודא שסוג המאיץ שנבחר זמין באזור שנבחר.

      אם רוצים לבצע אימון מבוזר, לוחצים על Add more worker pools (הוספת מאגרי עובדים) ומציינים קבוצה נוספת של משאבי מחשוב לכל מאגר עובדים נוסף שרוצים.

    לוחצים על Continue.

  8. בשלב Prediction container (מאגר התחזיות), מציינים את ההגדרות הבאות:

    1. בוחרים אם להשתמש במאגר תגים מוכן מראש או במאגר תגים בהתאמה אישית כדי להציג תחזיות מהמודל שאומן.

    2. בהתאם לבחירה, מבצעים אחת מהפעולות הבאות:

    3. השדה Model directory מכיל את הערך שהגדרתם קודם בשדה Model output directory בשלב Training container. שינוי של אחד מהשדות האלה משפיע באותו אופן. מידע נוסף על השדה הזה זמין בהוראות הקודמות.

    4. משאירים את השדות בקטע Predict schemata (תכנון תחזיות) ריקים.

  9. כדי להפעיל את צינור ההכשרה בלי שרת (serverless), לוחצים על Start training (התחלת ההכשרה).

REST

בדוגמת הקוד הבאה מוצג אופן היצירה של צינור אימון באמצעות השיטה create של משאב trainingPipeline.

הערה: אם רוצים להגדיר את צינור העיבוד הזה ליצירת גרסה חדשה של המודל, אפשר להוסיף את הערך PARENT_MODEL בשדה trainingPipeline.

מידע נוסף זמין במאמר בנושא ניהול גרסאות של מודלים באמצעות מרשם המודלים של Vertex AI.

לפני שמשתמשים בנתוני הבקשה, צריך להחליף את הנתונים הבאים:

  • LOCATION_ID: האזור שבו מריצים את קוד האימון והמודל Model מאוחסן.
  • PROJECT_ID: מזהה הפרויקט.
  • TRAINING_PIPELINE_NAME: חובה. שם תצוגה ל-trainingPipeline.
  • אם אפליקציית האימון משתמשת במערך נתונים של Vertex AI, צריך לציין את הפרטים הבאים:
    • DATASET_ID: מזהה קבוצת הנתונים.
    • ANNOTATIONS_FILTER: מסנן את מערך הנתונים לפי ההערות שאתם מציינים.
    • ANNOTATION_SCHEMA_URI: מסנן את מערך הנתונים לפי ה-URI של סכימת ההערות שצוין.
    • אפשר להשתמש באחת מהאפשרויות הבאות כדי לציין איך פריטי הנתונים יפוצלו לקבוצות אימון, אימות ובדיקה.
      • כדי לפצל את מערך הנתונים על סמך שברים שמגדירים את הגודל של כל קבוצה, צריך לציין את הפרטים הבאים:
        • TRAINING_FRACTION: השבר של מערך הנתונים שישמש לאימון המודל.
        • VALIDATION_FRACTION: השבר של מערך הנתונים שמשמש לאימות המודל.
        • TEST_FRACTION: השבר של מערך הנתונים שמשמש להערכת המודל.
      • כדי לפצל את מערך הנתונים על סמך מסננים, מציינים את הפרטים הבאים:
        • TRAINING_FILTER: מסנן את מערך הנתונים כך שיוצגו רק פריטי הנתונים שישמשו לאימון המודל.
        • VALIDATION_FILTER: מסנן את מערך הנתונים כך שיכלול רק את פריטי הנתונים שבהם יש להשתמש כדי לאמת את המודל.
        • TEST_FILTER: מסנן את מערך הנתונים כך שיוצגו רק פריטי הנתונים שישמשו להערכת המודל.
      • כדי להשתמש בחלוקה מוגדרת מראש, צריך לציין את הפרטים הבאים:
        • PREDEFINED_SPLIT_KEY: שם העמודה שמשמשת לפיצול מערך הנתונים. הערכים הקבילים בעמודה הזו הם training,‏ validation ו-test.
      • כדי לפצל את מערך הנתונים על סמך חותמת הזמן בפריטי הנתונים, מציינים את הפרטים הבאים:
        • TIMESTAMP_TRAINING_FRACTION: החלק ממערך הנתונים שישמש לאימון המודל.
        • TIMESTAMP_VALIDATION_FRACTION: השבר של מערך הנתונים שמשמש לאימות המודל.
        • TIMESTAMP_TEST_FRACTION: השבר של מערך הנתונים שמשמש להערכת המודל.
        • TIMESTAMP_SPLIT_KEY: השם של עמודת חותמת הזמן שמשמשת לפיצול מערך הנתונים.
    • OUTPUT_URI_PREFIX: המיקום ב-Cloud Storage שאליו Vertex AI מייצא את מערך נתוני האימון, אחרי שהוא פוצל למערכי אימון, אימות ובדיקה.
  • מגדירים את משימת ההכשרה בהתאמה אישית:
    • MACHINE_TYPE: סוג המכונה. אפשר לעיין בסוגי המכונות שזמינים לאימון.
    • ACCELERATOR_TYPE: (אופציונלי). סוג המאיץ לצירוף לכל תקופת ניסיון.
    • ACCELERATOR_COUNT: (אופציונלי). מספר המאיצים לצירוף לכל תקופת ניסיון.
    • REPLICA_COUNT: מספר העותקים המשוכפלים של העובדים שבהם יש להשתמש בכל ניסיון.
    • אם אפליקציית האימון פועלת בקונטיינר בהתאמה אישית, צריך לציין את הפרטים הבאים:
      • CUSTOM_CONTAINER_IMAGE_URI: ה-URI של קובץ אימג' של קונטיינר ב-Artifact Registry או ב-Docker Hub שיופעל בכל רפליקה של עובד.
      • CUSTOM_CONTAINER_COMMAND: (אופציונלי). הפקודה שתופעל כשהקונטיינר יופעל. הפקודה הזו מבטלת את נקודת הכניסה שמוגדרת כברירת מחדל במאגר.
      • CUSTOM_CONTAINER_ARGS: (אופציונלי). הארגומנטים שיועברו כשמפעילים את הקונטיינר. האורך המקסימלי של כל הארגומנטים יחד הוא 100,000 תווים.
    • אם אפליקציית האימון היא חבילת Python שפועלת במאגר מובנה מראש, צריך לציין את הפרטים הבאים:
      • PYTHON_PACKAGE_EXECUTOR_IMAGE_URI: ה-URI של קובץ אימג' של קונטיינר שמריץ את חבילת Python שצוינה. אפשר לעיין בקונטיינרים מוכנים מראש שזמינים לאימון.
      • PYTHON_PACKAGE_URIS: המיקום ב-Cloud Storage של קובצי חבילת Python שהם תוכנית האימון והחבילות שתלויות בה. המספר המקסימלי של כתובות ה-URI של החבילות הוא 100.
      • PYTHON_MODULE: השם של מודול Python להפעלה אחרי התקנת החבילות.
      • PYTHON_PACKAGE_ARGS: (אופציונלי). ארגומנטים של שורת פקודה שיועברו למודול Python. האורך המקסימלי של כל הארגומנטים יחד הוא 100,000 תווים.
    • TIMEOUT: (אופציונלי). זמן הריצה המקסימלי של העבודה.
  • MODEL_NAME: שם מוצג של המודל שהועלה (נוצר) על ידי TrainingPipeline.
  • MODEL_DESCRIPTION: תיאור של המודל.
  • IMAGE_URI: ה-URI של קובץ האימג' של הקונטיינר שבו רוצים להשתמש להרצת תחזיות. לדוגמה: us-docker.pkg.dev/vertex-ai/prediction/tf2-cpu.2-1:latest. אפשר להשתמש בקונטיינרים מוכנים מראש או בקונטיינרים בהתאמה אישית.
  • modelToUpload.labels: כל קבוצה של צמדי מפתח/ערך לארגון המודלים. לדוגמה:
    • ‪"env": "prod"
    • ‪"tier": "backend"
  • מציינים את LABEL_NAME ואת LABEL_VALUE של כל התוויות שרוצים להחיל על צינור האימון הזה.

ה-method של ה-HTTP וכתובת ה-URL:

POST https://LOCATION_ID-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION_ID/trainingPipelines

גוף בקשת JSON:

{
  "displayName": "TRAINING_PIPELINE_NAME",
  "inputDataConfig": {
    "datasetId": DATASET_ID,
    "annotationsFilter": ANNOTATIONS_FILTER,
    "annotationSchemaUri": ANNOTATION_SCHEMA_URI,

    // Union field split can be only one of the following:
    "fractionSplit": {
      "trainingFraction": TRAINING_FRACTION,
      "validationFraction": VALIDATION_FRACTION,
      "testFraction": TEST_FRACTION
    },
    "filterSplit": {
      "trainingFilter": TRAINING_FILTER,
      "validationFilter": VALIDATION_FILTER,
      "testFilter": TEST_FILTER
    },
    "predefinedSplit": {
      "key": PREDEFINED_SPLIT_KEY
    },
    "timestampSplit": {
      "trainingFraction": TIMESTAMP_TRAINING_FRACTION,
      "validationFraction": TIMESTAMP_VALIDATION_FRACTION,
      "testFraction": TIMESTAMP_TEST_FRACTION,
      "key": TIMESTAMP_SPLIT_KEY
    }
    // End of list of possible types for union field split.
    "gcsDestination": {
      "outputUriPrefix": OUTPUT_URI_PREFIX
    }
  },
  "trainingTaskDefinition": "gs://google-cloud-aiplatform/schema/trainingjob/definition/custom_task_1.0.0.yaml",
  "trainingTaskInputs": {
    "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
      }
    }
  },
  "modelToUpload": {
    "displayName": "MODEL_NAME",
    "predictSchemata": {},
    "containerSpec": {
      "imageUri": "IMAGE_URI"
    }
  },
  "labels": {
    LABEL_NAME_1": LABEL_VALUE_1,
    LABEL_NAME_2": LABEL_VALUE_2
  }
}

כדי לשלוח את הבקשה עליכם לבחור אחת מהאפשרויות הבאות:

curl

שומרים את גוף הבקשה בקובץ בשם request.json ומריצים את הפקודה הבאה:

curl -X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json; charset=utf-8" \
-d @request.json \
"https://LOCATION_ID-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION_ID/trainingPipelines"

PowerShell

שומרים את גוף הבקשה בקובץ בשם request.json ומריצים את הפקודה הבאה:

$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }

Invoke-WebRequest `
-Method POST `
-Headers $headers `
-ContentType: "application/json; charset=utf-8" `
-InFile request.json `
-Uri "https://LOCATION_ID-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION_ID/trainingPipelines" | Select-Object -Expand Content

התשובה מכילה מידע על המפרטים וגם על TRAININGPIPELINE_ID.

Java

לפני שמנסים את הדוגמה הזו, צריך לפעול לפי Javaהוראות ההגדרה במאמר Vertex AI quickstart using client libraries. מידע נוסף מופיע במאמרי העזרה של Vertex AI Java API.

כדי לבצע אימות ב-Vertex AI, צריך להגדיר את Application Default Credentials. מידע נוסף זמין במאמר הגדרת אימות לסביבת פיתוח מקומית.

import com.google.cloud.aiplatform.v1.LocationName;
import com.google.cloud.aiplatform.v1.Model;
import com.google.cloud.aiplatform.v1.ModelContainerSpec;
import com.google.cloud.aiplatform.v1.PipelineServiceClient;
import com.google.cloud.aiplatform.v1.PipelineServiceSettings;
import com.google.cloud.aiplatform.v1.TrainingPipeline;
import com.google.gson.JsonArray;
import com.google.gson.JsonObject;
import com.google.protobuf.Value;
import com.google.protobuf.util.JsonFormat;
import java.io.IOException;

public class CreateTrainingPipelineCustomJobSample {

  public static void main(String[] args) throws IOException {
    // TODO(developer): Replace these variables before running the sample.
    String project = "PROJECT";
    String displayName = "DISPLAY_NAME";
    String modelDisplayName = "MODEL_DISPLAY_NAME";
    String containerImageUri = "CONTAINER_IMAGE_URI";
    String baseOutputDirectoryPrefix = "BASE_OUTPUT_DIRECTORY_PREFIX";
    createTrainingPipelineCustomJobSample(
        project, displayName, modelDisplayName, containerImageUri, baseOutputDirectoryPrefix);
  }

  static void createTrainingPipelineCustomJobSample(
      String project,
      String displayName,
      String modelDisplayName,
      String containerImageUri,
      String baseOutputDirectoryPrefix)
      throws IOException {
    PipelineServiceSettings settings =
        PipelineServiceSettings.newBuilder()
            .setEndpoint("us-central1-aiplatform.googleapis.com:443")
            .build();
    String location = "us-central1";

    // Initialize client that will be used to send requests. This client only needs to be created
    // once, and can be reused for multiple requests. After completing all of your requests, call
    // the "close" method on the client to safely clean up any remaining background resources.
    try (PipelineServiceClient client = PipelineServiceClient.create(settings)) {
      JsonObject jsonMachineSpec = new JsonObject();
      jsonMachineSpec.addProperty("machineType", "n1-standard-4");

      // A working docker image can be found at
      // gs://cloud-samples-data/ai-platform/mnist_tfrecord/custom_job
      // This sample image accepts a set of arguments including model_dir.
      JsonObject jsonContainerSpec = new JsonObject();
      jsonContainerSpec.addProperty("imageUri", containerImageUri);
      JsonArray jsonArgs = new JsonArray();
      jsonArgs.add("--model_dir=$(AIP_MODEL_DIR)");
      jsonContainerSpec.add("args", jsonArgs);

      JsonObject jsonJsonWorkerPoolSpec0 = new JsonObject();
      jsonJsonWorkerPoolSpec0.addProperty("replicaCount", 1);
      jsonJsonWorkerPoolSpec0.add("machineSpec", jsonMachineSpec);
      jsonJsonWorkerPoolSpec0.add("containerSpec", jsonContainerSpec);

      JsonArray jsonWorkerPoolSpecs = new JsonArray();
      jsonWorkerPoolSpecs.add(jsonJsonWorkerPoolSpec0);

      JsonObject jsonBaseOutputDirectory = new JsonObject();
      // The GCS location for outputs must be accessible by the project's AI Platform
      // service account.
      jsonBaseOutputDirectory.addProperty("output_uri_prefix", baseOutputDirectoryPrefix);

      JsonObject jsonTrainingTaskInputs = new JsonObject();
      jsonTrainingTaskInputs.add("workerPoolSpecs", jsonWorkerPoolSpecs);
      jsonTrainingTaskInputs.add("baseOutputDirectory", jsonBaseOutputDirectory);

      Value.Builder trainingTaskInputsBuilder = Value.newBuilder();
      JsonFormat.parser().merge(jsonTrainingTaskInputs.toString(), trainingTaskInputsBuilder);
      Value trainingTaskInputs = trainingTaskInputsBuilder.build();
      String trainingTaskDefinition =
          "gs://google-cloud-aiplatform/schema/trainingjob/definition/custom_task_1.0.0.yaml";
      String imageUri = "gcr.io/cloud-aiplatform/prediction/tf-cpu.1-15:latest";
      ModelContainerSpec containerSpec =
          ModelContainerSpec.newBuilder().setImageUri(imageUri).build();
      Model modelToUpload =
          Model.newBuilder()
              .setDisplayName(modelDisplayName)
              .setContainerSpec(containerSpec)
              .build();
      TrainingPipeline trainingPipeline =
          TrainingPipeline.newBuilder()
              .setDisplayName(displayName)
              .setTrainingTaskDefinition(trainingTaskDefinition)
              .setTrainingTaskInputs(trainingTaskInputs)
              .setModelToUpload(modelToUpload)
              .build();
      LocationName parent = LocationName.of(project, location);
      TrainingPipeline response = client.createTrainingPipeline(parent, trainingPipeline);
      System.out.format("response: %s\n", response);
      System.out.format("Name: %s\n", response.getName());
    }
  }
}

Python

במאמר התקנת Vertex AI SDK ל-Python מוסבר איך להתקין או לעדכן את Vertex AI SDK ל-Python. מידע נוסף מופיע ב מאמרי העזרה של Python API.

בדוגמאות הבאות מוצג איך להשתמש ב-Vertex AI SDK ל-Python כדי ליצור צינור אימון בלי שרת (serverless). בוחרים אם להשתמש במאגר תגים מותאם אישית או במאגר תגים מוכן מראש לאימון:

מאגר מוכן מראש

כשמשתמשים ב-Vertex AI SDK ל-Python כדי ליצור צינור אימון שמריץ את קוד Python במאגר מובנה מראש, אפשר לספק את קוד האימון באחת מהדרכים הבאות:

  • מציינים את מזהה ה-URI של חבילת הפצה של מקור Python ב-Cloud Storage.

    (האפשרות הזו זמינה גם כשיוצרים צינור אימון בלי להשתמש ב-Vertex AI SDK ל-Python).

  • מציינים את הנתיב לתסריט Python במחשב המקומי. לפני שיוצרים צינור אימון, חבילות Vertex AI SDK ל-Python את הסקריפט כהפצה של מקור ומעלות אותו לקטגוריה של Cloud Storage שבחרתם.

    (האפשרות הזו זמינה רק כשמשתמשים ב-Vertex AI SDK ל-Python).

כדי לראות דוגמת קוד לכל אחת מהאפשרויות האלה, בוחרים בכרטיסייה המתאימה:

חבילה

בדוגמה הבאה נעשה שימוש במחלקה CustomPythonPackageTrainingJob.

def create_training_pipeline_custom_package_job_sample(
    project: str,
    location: str,
    staging_bucket: str,
    display_name: str,
    python_package_gcs_uri: str,
    python_module_name: str,
    container_uri: str,
    model_serving_container_image_uri: str,
    dataset_id: Optional[str] = None,
    model_display_name: Optional[str] = None,
    args: Optional[List[Union[str, float, int]]] = None,
    replica_count: int = 1,
    machine_type: str = "n1-standard-4",
    accelerator_type: str = "ACCELERATOR_TYPE_UNSPECIFIED",
    accelerator_count: int = 0,
    training_fraction_split: float = 0.8,
    validation_fraction_split: float = 0.1,
    test_fraction_split: float = 0.1,
    sync: bool = True,
    tensorboard_resource_name: Optional[str] = None,
    service_account: Optional[str] = None,
):
    aiplatform.init(project=project, location=location, staging_bucket=staging_bucket)

    job = aiplatform.CustomPythonPackageTrainingJob(
        display_name=display_name,
        python_package_gcs_uri=python_package_gcs_uri,
        python_module_name=python_module_name,
        container_uri=container_uri,
        model_serving_container_image_uri=model_serving_container_image_uri,
    )

    # This example uses an ImageDataset, but you can use another type
    dataset = aiplatform.ImageDataset(dataset_id) if dataset_id else None

    model = job.run(
        dataset=dataset,
        model_display_name=model_display_name,
        args=args,
        replica_count=replica_count,
        machine_type=machine_type,
        accelerator_type=accelerator_type,
        accelerator_count=accelerator_count,
        training_fraction_split=training_fraction_split,
        validation_fraction_split=validation_fraction_split,
        test_fraction_split=test_fraction_split,
        sync=sync,
        tensorboard=tensorboard_resource_name,
        service_account=service_account,
    )

    model.wait()

    print(model.display_name)
    print(model.resource_name)
    print(model.uri)
    return model

Script

בדוגמה הבאה נעשה שימוש במחלקה CustomTrainingJob.

def create_training_pipeline_custom_job_sample(
    project: str,
    location: str,
    staging_bucket: str,
    display_name: str,
    script_path: str,
    container_uri: str,
    model_serving_container_image_uri: str,
    dataset_id: Optional[str] = None,
    model_display_name: Optional[str] = None,
    args: Optional[List[Union[str, float, int]]] = None,
    replica_count: int = 0,
    machine_type: str = "n1-standard-4",
    accelerator_type: str = "ACCELERATOR_TYPE_UNSPECIFIED",
    accelerator_count: int = 0,
    training_fraction_split: float = 0.8,
    validation_fraction_split: float = 0.1,
    test_fraction_split: float = 0.1,
    sync: bool = True,
    tensorboard_resource_name: Optional[str] = None,
    service_account: Optional[str] = None,
):
    aiplatform.init(project=project, location=location, staging_bucket=staging_bucket)

    job = aiplatform.CustomTrainingJob(
        display_name=display_name,
        script_path=script_path,
        container_uri=container_uri,
        model_serving_container_image_uri=model_serving_container_image_uri,
    )

    # This example uses an ImageDataset, but you can use another type
    dataset = aiplatform.ImageDataset(dataset_id) if dataset_id else None

    model = job.run(
        dataset=dataset,
        model_display_name=model_display_name,
        args=args,
        replica_count=replica_count,
        machine_type=machine_type,
        accelerator_type=accelerator_type,
        accelerator_count=accelerator_count,
        training_fraction_split=training_fraction_split,
        validation_fraction_split=validation_fraction_split,
        test_fraction_split=test_fraction_split,
        sync=sync,
        tensorboard=tensorboard_resource_name,
        service_account=service_account,
    )

    model.wait()

    print(model.display_name)
    print(model.resource_name)
    print(model.uri)
    return model

מאגר תגים בהתאמה אישית

בדוגמה הבאה נעשה שימוש במחלקה CustomContainerTrainingJob.

def create_training_pipeline_custom_container_job_sample(
    project: str,
    location: str,
    staging_bucket: str,
    display_name: str,
    container_uri: str,
    model_serving_container_image_uri: str,
    dataset_id: Optional[str] = None,
    model_display_name: Optional[str] = None,
    args: Optional[List[Union[str, float, int]]] = None,
    replica_count: int = 1,
    machine_type: str = "n1-standard-4",
    accelerator_type: str = "ACCELERATOR_TYPE_UNSPECIFIED",
    accelerator_count: int = 0,
    training_fraction_split: float = 0.8,
    validation_fraction_split: float = 0.1,
    test_fraction_split: float = 0.1,
    sync: bool = True,
    tensorboard_resource_name: Optional[str] = None,
    service_account: Optional[str] = None,
):
    aiplatform.init(project=project, location=location, staging_bucket=staging_bucket)

    job = aiplatform.CustomContainerTrainingJob(
        display_name=display_name,
        container_uri=container_uri,
        model_serving_container_image_uri=model_serving_container_image_uri,
    )

    # This example uses an ImageDataset, but you can use another type
    dataset = aiplatform.ImageDataset(dataset_id) if dataset_id else None

    model = job.run(
        dataset=dataset,
        model_display_name=model_display_name,
        args=args,
        replica_count=replica_count,
        machine_type=machine_type,
        accelerator_type=accelerator_type,
        accelerator_count=accelerator_count,
        training_fraction_split=training_fraction_split,
        validation_fraction_split=validation_fraction_split,
        test_fraction_split=test_fraction_split,
        sync=sync,
        tensorboard=tensorboard_resource_name,
        service_account=service_account,
    )

    model.wait()

    print(model.display_name)
    print(model.resource_name)
    print(model.uri)
    return model

משימת כוונון של היפר-פרמטר והעלאת מודל

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

  1. צינור האימון יוצר משאב של משימת כוונון של היפר-פרמטרים. משימת כוונון ההיפר-פרמטר יוצרת כמה ניסויים. בכל ניסיון, משימה מותאמת אישית מריצה את אפליקציית האימון באמצעות משאבי המחשוב וההיפרפרמטרים שאתם מציינים.

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

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

משימות כוונון של היפר-פרמטר כוללות הגדרות נוספות שאפשר לקבוע. מידע נוסף על ההגדרות של HyperparameterTuningJob

REST

בדוגמת הקוד הבאה מוצג אופן היצירה של צינור אימון באמצעות השיטה create של משאב trainingPipeline.

לפני שמשתמשים בנתוני הבקשה, צריך להחליף את הנתונים הבאים:

  • LOCATION_ID: האזור של הפרויקט.
  • PROJECT_ID: מזהה הפרויקט.
  • TRAINING_PIPELINE_NAME: חובה. שם תצוגה ל-trainingPipeline.
  • אם אפליקציית האימון משתמשת במערך נתונים של Vertex AI, צריך לציין את הפרטים הבאים:
    • DATASET_ID: מזהה קבוצת הנתונים.
    • ANNOTATIONS_FILTER: מסנן את מערך הנתונים לפי ההערות שאתם מציינים.
    • ANNOTATION_SCHEMA_URI: מסנן את מערך הנתונים לפי ה-URI של סכימת ההערות שצוין.
    • אפשר להשתמש באחת מהאפשרויות הבאות כדי לציין איך פריטי הנתונים יפוצלו לקבוצות אימון, אימות ובדיקה.
      • כדי לפצל את מערך הנתונים על סמך שברים שמגדירים את הגודל של כל קבוצה, צריך לציין את הפרטים הבאים:
        • TRAINING_FRACTION: השבר של מערך הנתונים שישמש לאימון המודל.
        • VALIDATION_FRACTION: השבר של מערך הנתונים שמשמש לאימות המודל.
        • TEST_FRACTION: השבר של מערך הנתונים שמשמש להערכת המודל.
      • כדי לפצל את מערך הנתונים על סמך מסננים, מציינים את הפרטים הבאים:
        • TRAINING_FILTER: מסנן את מערך הנתונים כך שיוצגו רק פריטי הנתונים שישמשו לאימון המודל.
        • VALIDATION_FILTER: מסנן את מערך הנתונים כך שיכלול רק את פריטי הנתונים שבהם יש להשתמש כדי לאמת את המודל.
        • TEST_FILTER: מסנן את מערך הנתונים כך שיוצגו רק פריטי הנתונים שישמשו להערכת המודל.
      • כדי להשתמש בחלוקה מוגדרת מראש, צריך לציין את הפרטים הבאים:
        • PREDEFINED_SPLIT_KEY: שם העמודה שמשמשת לפיצול מערך הנתונים. הערכים הקבילים בעמודה הזו הם training,‏ validation ו-test.
      • כדי לפצל את מערך הנתונים על סמך חותמת הזמן בפריטי הנתונים, מציינים את הפרטים הבאים:
        • TIMESTAMP_TRAINING_FRACTION: החלק ממערך הנתונים שישמש לאימון המודל.
        • TIMESTAMP_VALIDATION_FRACTION: השבר של מערך הנתונים שמשמש לאימות המודל.
        • TIMESTAMP_TEST_FRACTION: השבר של מערך הנתונים שמשמש להערכת המודל.
        • TIMESTAMP_SPLIT_KEY: השם של עמודת חותמת הזמן שמשמשת לפיצול מערך הנתונים.
    • OUTPUT_URI_PREFIX: המיקום ב-Cloud Storage שאליו Vertex AI מייצא את מערך נתוני האימון, אחרי שהוא פוצל למערכי אימון, אימות ובדיקה.
  • מציינים את משימת כוונון ההיפר-פרמטר:
    • מציינים את המדדים:
      • METRIC_ID: השם של המדד הזה.
      • METRIC_GOAL: היעד של המדד הזה. הערך יכול להיות MAXIMIZE או MINIMIZE.
    • מציינים את ההיפר-פרמטרים:
      • PARAMETER_ID: השם של ההיפר-פרמטר הזה.
      • PARAMETER_SCALE: (אופציונלי). איך צריך לשנות את קנה המידה של הפרמטר. משאירים את הערך לא מוגדר לפרמטרים CATEGORICAL. יכול להיות 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) כמערך של מספרים.
    • 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 של קובץ אימג' של קונטיינר ב-Artifact Registry או ב-Docker Hub שיופעל בכל רפליקה של עובד.
        • 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.
    • מידע נוסף על אפשרויות לתזמון משימות
    • TIMEOUT: (אופציונלי). זמן הריצה המקסימלי לכל תקופת ניסיון.
    • מציינים את התוויות LABEL_NAME ו-LABEL_VALUE שרוצים להוסיף למשימת האופטימיזציה של ההיפר-פרמטרים.
  • MODEL_NAME: שם מוצג של המודל שהועלה (נוצר) על ידי TrainingPipeline.
  • MODEL_DESCRIPTION: אופציונלי. תיאור של המודל.
  • PREDICTION_IMAGE_URI: חובה. מציינים אחת משתי האפשרויות הבאות:
  • modelToUpload.labels: אופציונלי. כל קבוצה של צמדי מפתח/ערך שמשמשת לארגון המודלים. לדוגמה:
    • ‪"env": "prod"
    • ‪"tier": "backend"
  • מציינים את LABEL_NAME ואת LABEL_VALUE לכל התוויות שרוצים להחיל על צינור האימון הזה.

ה-method של ה-HTTP וכתובת ה-URL:

POST https://LOCATION_ID-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION_ID/trainingPipelines

גוף בקשת JSON:

{
  "displayName": "TRAINING_PIPELINE_NAME",
  "inputDataConfig": {
    "datasetId": DATASET_ID,
    "annotationsFilter": ANNOTATIONS_FILTER,
    "annotationSchemaUri": ANNOTATION_SCHEMA_URI,

    // Union field split can be only one of the following:
    "fractionSplit": {
      "trainingFraction": TRAINING_FRACTION,
      "validationFraction": VALIDATION_FRACTION,
      "testFraction": TEST_FRACTION
    },
    "filterSplit": {
      "trainingFilter": TRAINING_FILTER,
      "validationFilter": VALIDATION_FILTER,
      "testFilter": TEST_FILTER
    },
    "predefinedSplit": {
      "key": PREDEFINED_SPLIT_KEY
    },
    "timestampSplit": {
      "trainingFraction": TIMESTAMP_TRAINING_FRACTION,
      "validationFraction": TIMESTAMP_VALIDATION_FRACTION,
      "testFraction": TIMESTAMP_TEST_FRACTION,
      "key": TIMESTAMP_SPLIT_KEY
    }
    // End of list of possible types for union field split.
    "gcsDestination": {
      "outputUriPrefix": OUTPUT_URI_PREFIX
    }
  },
  "trainingTaskDefinition": "gs://google-cloud-aiplatform/schema/trainingjob/definition/hyperparameter_tuning_task_1.0.0.yaml",
  "trainingTaskInputs": {
    "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.
      }
    ],
    "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
      }
    },
    "labels": {
      LABEL_NAME_1": LABEL_VALUE_1,
      LABEL_NAME_2": LABEL_VALUE_2
    }
  },
  "modelToUpload": {
    "displayName": "MODEL_NAME",
    "description": "MODEL_DESCRIPTION",
    "predictSchemata": {},
    "containerSpec": {
      "imageUri": "PREDICTION_IMAGE_URI"
    }
  },
  "labels": {
    LABEL_NAME_1": LABEL_VALUE_1,
    LABEL_NAME_2": LABEL_VALUE_2
  }
}

כדי לשלוח את הבקשה עליכם לבחור אחת מהאפשרויות הבאות:

curl

שומרים את גוף הבקשה בקובץ בשם request.json ומריצים את הפקודה הבאה:

curl -X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json; charset=utf-8" \
-d @request.json \
"https://LOCATION_ID-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION_ID/trainingPipelines"

PowerShell

שומרים את גוף הבקשה בקובץ בשם request.json ומריצים את הפקודה הבאה:

$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }

Invoke-WebRequest `
-Method POST `
-Headers $headers `
-ContentType: "application/json; charset=utf-8" `
-InFile request.json `
-Uri "https://LOCATION_ID-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION_ID/trainingPipelines" | Select-Object -Expand Content

התשובה מכילה מידע על המפרטים וגם על TRAININGPIPELINE_ID.

מעקב אחרי אימון

כדי לראות את יומני האימון:

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

    כניסה לדף Training

  2. לוחצים על שם המשרה כדי לעבור לדף המשרה המותאמת אישית.

  3. לוחצים על הצגת יומנים.

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

צפייה במודל שאומן

כשתהליך האימון של צינור הנתונים בלי שרת (serverless) מסתיים, אפשר למצוא את המודל המאומן במסוף Google Cloud , בקטע Vertex AI, בדף Models.

כניסה לדף Models

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