שימוש ב-Vertex AI TensorBoard עם אימון מותאם אישית

כשמשתמשים באימון בהתאמה אישית כדי לאמן מודלים, אפשר להגדיר את משימת האימון כך שהיומנים של Vertex AI TensorBoard יועלו אוטומטית אל Vertex AI TensorBoard.

אתם יכולים להשתמש בשילוב הזה כדי לעקוב אחרי האימון כמעט בזמן אמת, כי Vertex AI TensorBoard מזרימה ב-Vertex AI TensorBoard יומנים בזמן שהם נכתבים ב-Cloud Storage.

הוראות להגדרה הראשונית מופיעות במאמר הגדרה של Vertex AI TensorBoard.

שינויים בסקריפט האימון

סקריפט האימון צריך להיות מוגדר כך שיכתוב יומנים של TensorBoard לקטגוריה של Cloud Storage, שהמיקום שלה יהיה זמין באופן אוטומטי דרך משתנה סביבה מוגדר מראש AIP_TENSORBOARD_LOG_DIR בשירות Vertex AI Training.

בדרך כלל אפשר לעשות את זה על ידי ציון os.environ['AIP_TENSORBOARD_LOG_DIR'] בתור ספריית היומן לממשקי ה-API של קוד פתוח לכתיבת יומנים ב-TensorBoard. בדרך כלל, המיקום של AIP_TENSORBOARD_LOG_DIR מוגדר באמצעות המשתנה staging_bucket.

כדי להגדיר את סקריפט האימון ב-TensorFlow 2.x, יוצרים קריאה חוזרת (callback) של TensorBoard ומגדירים את המשתנה log_dir ל-os.environ['AIP_TENSORBOARD_LOG_DIR']. הקריאה החוזרת של TensorBoard נכללת ברשימת הקריאות החוזרות של TensorFlow model.fit.

  tensorboard_callback = tf.keras.callbacks.TensorBoard(
       log_dir=os.environ['AIP_TENSORBOARD_LOG_DIR'],
       histogram_freq=1
  )
  
  model.fit(
       x=x_train,
       y=y_train,
       epochs=epochs,
       validation_data=(x_test, y_test),
       callbacks=[tensorboard_callback],
  )
  

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

יצירת משימת אימון בהתאמה אישית

בדוגמה הבאה מוצג תהליך ליצירת משימת אימון בהתאמה אישית.

דוגמה מפורטת ליצירת משימת אימון בהתאמה אישית מופיעה במאמר Hello custom training. הוראות ליצירת קונטיינרים מותאמים אישית לאימון זמינות במאמר יצירת קובץ אימג' של קונטיינר מותאם אישית לאימון.

כדי ליצור משימת אימון בהתאמה אישית, אפשר להשתמש ב-Vertex AI SDK ל-Python או ב-REST.

Python

Python

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

  • project: . אפשר למצוא את המזהים האלה בדף welcome במסוף Google Cloud .
  • location: המיקום שבו יופעל ה-CustomJob. המיקום הזה צריך להיות זהה למיקום של מופע TensorBoard שצוין.
  • staging_bucket: קטגוריית Cloud Storage שבה יאוחסנו זמנית ארטיפקטים במהלך קריאות ל-API, כולל יומני TensorBoard.
  • display_name: השם המוצג של משימת האימון המותאמת אישית.
  • script_path: הנתיב, ביחס לספריית העבודה במערכת הקבצים המקומית, לסקריפט שמשמש כנקודת הכניסה לקוד האימון.
  • container_uri: ה-URI של קובץ אימג' של קונטיינר האימונים יכול להיות Vertex AI. מאגר תגים מוכן מראש לאימון או מאגר תגים בהתאמה אישית.
  • model_serving_container_image_uri: ה-URI של קונטיינר פרסום המודל שמתאים להצגת המודל שנוצר על ידי סקריפט האימון.
  • dataset_id: מספר המזהה של מערך הנתונים שמשמש לאימון.
  • model_display_name: השם המוצג של המודל שאומן.
  • args: ארגומנטים בשורת הפקודה שיועברו לסקריפט Python.
  • replica_count: מספר העותקים של העובדים לשימוש. ברוב המקרים, מגדירים את הערך הזה ל-1 עבור מאגר העובדים הראשון.
  • machine_type: סוג המכונה הווירטואלית שבה רוצים להשתמש. רשימה של מכונות וירטואליות נתמכות זמינה במאמר סוגי מכונות.
  • accelerator_type: סוג ה-GPU לצירוף לכל מכונת VM במאגר המשאבים. רשימת מעבדי ה-GPU הנתמכים מופיעה במאמר בנושא מעבדי GPU.
  • accelerator_count מספר יחידות ה-GPU לצירוף לכל מכונה וירטואלית במאגר המשאבים. ערך ברירת המחדל הוא 1.
  • training_fraction_split: החלק ממערך הנתונים שישמש לאימון המודל.
  • validation_fraction_split: השבר של מערך הנתונים שמשמש לאימות המודל.
  • test_fraction_split: השבר של מערך הנתונים שמשמש להערכת המודל.
  • sync: האם להפעיל את השיטה הזו באופן סינכרוני.
  • tensorboard_resource_name: שם המשאב של מופע Vertex TensorBoard שאליו יועלו יומני TensorBoard של CustomJob.
  • service_account: חובה להשתמש באפשרות הזו כשמריצים עם TensorBoard. במאמר יצירה של חשבון שירות עם ההרשאות הנדרשות מוסבר איך עושים את זה.

REST

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

  • LOCATION_ID: המיקום שבו רוצים להריץ את CustomJob, לדוגמה us-central1. המיקום הזה צריך להיות זהה למיקום של מופע TensorBoard שצוין.
  • PROJECT_ID: מזהה הפרויקט.
  • TENSORBOARD_INSTANCE_NAME: (חובה) השם המלא של מופע Vertex AI TensorBoard הקיים שבו מאוחסנים היומנים של Vertex AI TensorBoard:
    projects/PROJECT_ID/locations/LOCATION_ID/tensorboards/TENSORBOARD_INSTANCE_ID
    הערה: אם מופע TensorBoard לא קיים, יצירת customJobs תגרום לשגיאת 404.
  • GCS_BUCKET_NAME: "${PROJECT_ID}-tensorboard-logs-${LOCATION}"
  • USER_SA_EMAIL: (חובה) חשבון השירות שנוצר בשלבים הקודמים, או חשבון השירות שלכם. "USER_SA_NAME@${PROJECT_ID}.iam.gserviceaccount.com"
  • TRAINING_CONTAINER: TRAINING_CONTAINER.
  • INVOCATION_TIMESTAMP: "$(date +'%Y%m%d-%H%M%S')"
  • JOB_NAME: "tensorboard-example-job-${INVOCATION_TIMESTAMP}"
  • BASE_OUTPUT_DIR: (חובה) הנתיב שבו ייכתב כל הפלט של האימון. Google Cloud "gs://$GCS_BUCKET_NAME/$JOB_NAME"

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

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

תוכן בקשת JSON:

{
"displayName": JOB_NAME,
"jobSpec":{
"workerPoolSpecs":[
  {
    "replicaCount": "1",
     "machineSpec": {
        "machineType": "n1-standard-8",
      },
      "containerSpec": {
        "imageUri": TRAINING_CONTAINER,
      }
    }
  ],
  
  "base_output_directory": {
  "output_uri_prefix": BASE_OUTPUT_DIR,
   },
  "serviceAccount": USER_SA_EMAIL,
  "tensorboard": TENSORBOARD_INSTANCE_NAME,
  }
}

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

אתם אמורים לקבל תגובת JSON שדומה לזו:

{
  "name": "projects/PROJECT_ID/locations/LOCATION_ID/customJobs/CUSTOM_JOB_ID",
  "displayName": "DISPLAY_NAME",
  "jobSpec": {
    "workerPoolSpecs": [
      {
        "machineSpec": {
          "machineType": "n1-standard-8"
        },
        "replicaCount": "1",
        "diskSpec": {
          "bootDiskType": "pd-ssd",
          "bootDiskSizeGb": 100
        },
        "containerSpec": {
          "imageUri": "IMAGE_URI"
        }
      }
    ],
    "serviceAccount": "SERVICE_ACCOUNT",
    "baseOutputDirectory": {
      "outputUriPrefix": "OUTPUT_URI_PREFIX"
    },
    "tensorboard": "projects//locations/LOCATION_ID/tensorboards/tensorboard-id"
  },
  "state": "JOB_STATE_PENDING",
  "createTime": "CREATE-TIME",
  "updateTime": "UPDATE-TIME"
}

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