יצירת משימת אימון בלי שרת (serverless)

משימות אימון ללא שרת (משאבי CustomJob ב-Agent Platform API) הן הדרך הבסיסית להריץ קוד אימון בהתאמה אישית של למידת מכונה (ML) ב-Gemini Enterprise Agent Platform.

לפני ששולחים משימה

לפני שיוצרים CustomJob ב-Agent Platform, צריך ליצור אפליקציית אימון ב-Python או קובץ אימג' של קונטיינר בהתאמה אישית כדי להגדיר את קוד האימון ואת יחסי התלות שרוצים להריץ ב-Agent Platform.

אנחנו ממליצים להשתמש בתכונה autopackaging של Google Cloud CLI, שמתוארת בהמשך המדריך, כדי ליצור קובץ אימג' של קונטיינר Docker מקוד במכונה המקומית, להעביר את קובץ האימג' של הקונטיינר ל-Artifact Registry וליצור CustomJob, והכול באמצעות פקודה אחת.

אחרת, תצטרכו ליצור באופן ידני אפליקציית אימון ב-Python או קובץ אימג' של קונטיינר בהתאמה אישית.

אם אתם לא בטוחים באיזו אפשרות לבחור, קראו את הדרישות לקוד האימון.

מה כוללת משימה ייעודית

כשיוצרים משימה ייעודית, מציינים את ההגדרות שנדרשות ל-Agent Platform כדי להריץ את קוד האימון, כולל:

במאגרי ה-Workers, אתם יכולים לציין את ההגדרות הבאות:

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

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

כדי להגדיר CustomJob לאימון מבוזר, צריך לציין כמה מאגרי מכונות של Worker.

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

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

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

יצירת CustomJob

כדי ליצור CustomJob, פועלים לפי ההוראות באחת מהכרטיסיות הבאות, בהתאם לכלי שבו רוצים להשתמש. אם אתם משתמשים ב-CLI של gcloud, אתם יכולים להשתמש בפקודה אחת כדי לארוז באופן אוטומטי את קוד האימון במכונה המקומית שלכם לקובץ אימג' של קונטיינר Docker, להעביר את קובץ האימג' של הקונטיינר ל-Artifact Registry וליצור CustomJob. באפשרויות האחרות, ההנחה היא שכבר יצרתם אפליקציית אימון ב-Python או קובץ אימג' של קונטיינר בהתאמה אישית.

gcloud

בדוגמאות הבאות משתמשים בפקודה gcloud ai custom-jobs create.

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

עם אריזה אוטומטית

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

  • יוצרים קובץ אימג' של Docker בהתאמה אישית על סמך הקוד שלכם.
  • מעבירים את קובץ האימג' בדחיפה ל-Artifact Registry.
  • מתחילים CustomJob על סמך התמונה.

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

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

מכיוון שהגרסה הזו של הפקודה יוצרת קובץ אימג' של Docker ומעבירה אותו, צריך לבצע את ההגדרות הבאות במחשב המקומי:

  1. מתקינים את Docker Engine.

  2. אם אתם משתמשים ב-Linux, הגדירו את Docker כך שתוכלו להריץ אותו בלי sudo.

  3. מפעילים את Artifact Registry API, אם הוא עדיין לא מופעל.

    התפקידים שנדרשים כדי להפעיל ממשקי API

    כדי להפעיל ממשקי API, צריך את ההרשאה serviceusage.services.enable. אם יצרתם את הפרויקט, סביר להניח שכבר יש לכם את ההרשאה הזו דרך התפקיד "בעלים" (roles/owner). אחרת, תוכלו לקבל את ההרשאה הזו דרך התפקיד "אדמין בממשק 'שימוש בשירות'" (roles/serviceusage.serviceUsageAdmin). איך מקצים תפקידים

    להפעלת ה-API

  4. מגדירים אימות ל-Docker כדי שתוכלו להעביר קובצי אימג' של Docker ל-Artifact Registry:

    gcloud auth configure-docker
    

מפתחים את קובץ האימג' של Docker, מעבירים אותו בדחיפה ויוצרים CustomJob

הפקודה הבאה יוצרת קובץ אימג' של Docker על סמך קובץ אימג' של קונטיינר אימון מוכן מראש וקוד Python מקומי, מעבירה את קובץ האימג' אל Artifact Registry ויוצרת CustomJob.

gcloud ai custom-jobs create \
  --region=LOCATION \
  --display-name=JOB_NAME \
  --worker-pool-spec=machine-type=MACHINE_TYPE,replica-count=REPLICA_COUNT,executor-image-uri=EXECUTOR_IMAGE_URI,local-package-path=WORKING_DIRECTORY,script=SCRIPT_PATH

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

  • ‫LOCATION: האזור שבו יופעלו הקונטיינר או חבילת Python.

  • ‫JOB_NAME: שדה חובה. השם המוצג של CustomJob.

  • ‫MACHINE_TYPE: סוג המכונה. סוגי המכונות שזמינים לאימון

  • ‫REPLICA_COUNT: מספר הרפליקות של ה-worker שבהן רוצים להשתמש. ברוב המקרים, מגדירים את הערך 1 למאגר ה-Workers הראשון.

  • ‫EXECUTOR_IMAGE_URI: ה-URI של קובץ האימג' של הקונטיינר שמריץ את הקוד שסופק. קונטיינרים זמינים מובנים לאימון

    התמונה הזו משמשת כתמונת הבסיס לקובץ אימג' של Docker החדש שאתם יוצרים באמצעות הפקודה הזו.

  • ‫WORKING_DIRECTORY: ספרייה במערכת הקבצים המקומית שמכילה את הסקריפט של נקודת הכניסה שמריץ את קוד האימון (ראו את הפריט הבא ברשימה).

    אפשר להשתמש בספריית האם של הסקריפט או בספרייה ברמה גבוהה יותר. יכול להיות שתרצו להשתמש בספרייה ברמה גבוהה יותר כדי לציין שם מודול Python מלא (ראו את הפריט הבא ברשימה). יכול להיות שתרצו להשתמש בספרייה ברמה גבוהה יותר אם היא מכילה קובץ requirements.txt או setup.py. מידע נוסף זמין במאמר התקנת יחסי תלות.

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

  • ‫SCRIPT_PATH: הנתיב, ביחס ל-WORKING_DIRECTORY במערכת הקבצים המקומית, לסקריפט שהוא נקודת הכניסה לקוד האימון. זה יכול להיות סקריפט Python (שמסתיים ב-.py) או סקריפט Bash.

    לדוגמה, אם רוצים להריץ את /hello-world/trainer/task.py ו-WORKING_DIRECTORY הוא /hello-world, צריך להשתמש ב-trainer/task.py בשביל הערך הזה.

    שימוש ב-python-module במקום ב-script

    אפשר גם להחליף את script=SCRIPT_PATH ב-python-module=PYTHON_MODULE כדי לציין את השם של מודול Python ב-WORKING_DIRECTORY שירוץ כנקודת הכניסה לאימון. לדוגמה, במקום script=trainer/task.py, אפשר לציין python-module=trainer.task.

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

התקנת יחסי תלות

כשמשתמשים באריזה אוטומטית, אפשר להתקין יחסי תלות של Python בקונטיינר באותן דרכים שזמינות כשמשתמשים בפקודה local-run של ה-CLI של gcloud. כדי ללמוד על הדרכים השונות להתקנת יחסי תלות של Python, קראו את הקטע התקנת יחסי תלות במדריך לפקודה local-run.

התחביר לציון יחסי תלות שונה מעט כשמשתמשים באריזה אוטומטית בהשוואה לשימוש בפקודה local-run. במקום להשתמש בדגלים של שורת הפקודה כדי לציין יחסי תלות, צריך להשתמש באפשרויות בערך של הדגל --worker-pool-spec. בנוסף, הערכים בתוך האפשרויות האלה חייבים להיות מופרדים באמצעות נקודה ופסיק, ולא באמצעות פסיקים. באופן ספציפי, התחביר:

  • במקום הדגל --local-package-path של הפקודה local-run, משתמשים באפשרות local-package-path בערך של הדגל --worker-pool-spec. אם ספריית העבודה שציינתם באפשרות הזו מכילה קובץ requirements.txt או setup.py, האריזה האוטומטית מתקינה יחסי תלות על סמך הקובץ הזה.

    הדוגמה הקודמת ממחישה את התחביר הזה.

  • (אופציונלי) במקום הדגל --requirements, משתמשים באפשרות requirements בערך של הדגל --worker-pool-spec. במקום להפריד בין יחסי התלות של PyPI באמצעות פסיקים, צריך להשתמש בנקודה ופסיק.

  • (אופציונלי) במקום הדגל --extra-packages, משתמשים באפשרות extra-packages בערך של הדגל --worker-pool-spec. במקום להפריד בין יחסי תלות מקומיים באמצעות פסיקים, השתמשו בנקודה ופסיק.

  • (אופציונלי) במקום הדגל --extra-dirs, משתמשים באפשרות extra-dirs בערך של הדגל --worker-pool-spec. במקום להפריד בין נתיבי ספריות באמצעות פסיקים, צריך להשתמש בנקודה-פסיק.

בדוגמה הבאה אפשר לראות איך מתקינים יחסי תלות באמצעות כל השיטות האופציונליות. (אפשר לציין כל קבוצת משנה שלהם). כדי להדגים את התחביר של הנקודה-פסיק, בדוגמה מצוינים שני ערכים לכל אפשרות. כדי לקצר את הדוגמה, אפשרויות אחרות של --worker-pool-spec הוחלפו ב-[...].

gcloud ai custom-jobs create \
  --region=LOCATION \
  --display-name=JOB_NAME \
  --worker-pool-spec=[...],requirements=PYPI_DEP_1;PYPI_DEP_2,extra-packages=LOCAL_DEP_1;LOCAL_DEP_2,extra-dirs=EXTRA_DIR_1;EXTRA_DIR_2

כדי לדעת אילו ערכים מתאימים לפלייסהולדרים האלה, קראו את הקטע "התקנת יחסי תלות" במדריך לפקודה local-run.

בלי אריזה אוטומטית

אם אתם לא משתמשים באריזה אוטומטית, אתם יכולים ליצור CustomJob באמצעות פקודה שדומה לאחת מהפקודות הבאות. בהתאם לאפליקציית האימון ב-Python או לקובץ האימג' של הקונטיינר בהתאמה אישית שיצרתם, בוחרים באחת מהכרטיסיות הבאות:

אפליקציית אימון ב-Python

gcloud ai custom-jobs create \
  --region=LOCATION \
  --display-name=JOB_NAME \
  --python-package-uris=PYTHON_PACKAGE_URIS \
  --worker-pool-spec=machine-type=MACHINE_TYPE,replica-count=REPLICA_COUNT,executor-image-uri=EXECUTOR_IMAGE_URI,python-module=PYTHON_MODULE

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

  • ‫LOCATION: האזור שבו יופעלו הקונטיינר או חבילת Python.
  • ‫JOB_NAME: שדה חובה. השם המוצג של CustomJob.
  • ‫PYTHON_PACKAGE_URIS: רשימה מופרדת בפסיקים של מזהי URI של Cloud Storage, שמציינים את קובצי חבילת Python שהם תוכנית האימון והחבילות התלויות שלה. המספר המקסימלי של מזהי URI של חבילות הוא 100.
  • ‫MACHINE_TYPE: סוג המכונה. סוגי המכונות שזמינים לאימון
  • ‫REPLICA_COUNT: מספר הרפליקות של ה-worker שבהן רוצים להשתמש. ברוב המקרים, מגדירים את הערך 1 למאגר ה-Workers הראשון.
  • ‫EXECUTOR_IMAGE_URI: ה-URI של קובץ האימג' של הקונטיינר שמריץ את הקוד שסופק. קונטיינרים זמינים מובנים לאימון
  • ‫PYTHON_MODULE: השם של מודול Python שצריך להריץ אחרי התקנת החבילות.

קובץ אימג' של קונטיינר בהתאמה אישית

gcloud ai custom-jobs create \
  --region=LOCATION \
  --display-name=JOB_NAME \
  --worker-pool-spec=machine-type=MACHINE_TYPE,replica-count=REPLICA_COUNT,container-image-uri=CUSTOM_CONTAINER_IMAGE_URI

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

  • ‫LOCATION: האזור שבו יופעלו הקונטיינר או חבילת Python.
  • ‫JOB_NAME: שדה חובה. השם המוצג של CustomJob.
  • ‫MACHINE_TYPE: סוג המכונה. סוגי המכונות שזמינים לאימון
  • ‫REPLICA_COUNT: מספר הרפליקות של ה-worker שבהן רוצים להשתמש. ברוב המקרים, מגדירים את הערך 1 למאגר ה-Workers הראשון.
  • ‫CUSTOM_CONTAINER_IMAGE_URI: ה-URI של קובץ אימג' של קונטיינר ב-Artifact Registry או ב-Docker Hub, שצריך להריץ בכל רפליקה של Worker.

אימון מבוזר

כדי לבצע אימון מבוזר, מגדירים את המשימה עם כמה רפליקות. לדוגמה, כשמשתמשים ב-Google Cloud CLI, אפשר לציין את הדגל --worker-pool-spec כמה פעמים.

אם אתם משתמשים באריזה אוטומטית, אתם צריכים לציין רק את local-package-path, script ואפשרויות אחרות שקשורות לאריזה אוטומטית במאגר ה-workers הראשון. במאגרי ה-workers הבאים, השמיטו את השדות שקשורים לקוד האימון. כל המאגרים האלה ישתמשו באותו קונטיינר אימון שנוצר על ידי autopackaging.

לדוגמה, הפקודה הבאה מתאימה דוגמה קודמת של אריזה אוטומטית לשימוש במאגר עובדים שני:

gcloud ai custom-jobs create \
  --region=LOCATION \
  --display-name=JOB_NAME \
  --worker-pool-spec=machine-type=MACHINE_TYPE,replica-count=REPLICA_COUNT,executor-image-uri=EXECUTOR_IMAGE_URI,local-package-path=WORKING_DIRECTORY,script=SCRIPT_PATH \
  --worker-pool-spec=machine-type=SECOND_POOL_MACHINE_TYPE,replica-count=SECOND_POOL_REPLICA_COUNT

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

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

אפליקציית אימון ב-Python

gcloud ai custom-jobs create \
  --region=LOCATION \
  --display-name=JOB_NAME \
  --python-package-uris=PYTHON_PACKAGE_URIS \
  --worker-pool-spec=machine-type=MACHINE_TYPE,replica-count=REPLICA_COUNT,executor-image-uri=EXECUTOR_IMAGE_URI,python-module=PYTHON_MODULE \
  --worker-pool-spec=machine-type=SECOND_POOL_MACHINE_TYPE,replica-count=SECOND_POOL_REPLICA_COUNT,executor-image-uri=SECOND_POOL_EXECUTOR_IMAGE_URI,python-module=SECOND_POOL_PYTHON_MODULE

קובץ אימג' של קונטיינר בהתאמה אישית

gcloud ai custom-jobs create \
  --region=LOCATION \
  --display-name=JOB_NAME \
  --worker-pool-spec=machine-type=MACHINE_TYPE,replica-count=REPLICA_COUNT,container-image-uri=CUSTOM_CONTAINER_IMAGE_URI \
  --worker-pool-spec=machine-type=SECOND_POOL_MACHINE_TYPE,replica-count=SECOND_POOL_REPLICA_COUNT,container-image-uri=SECOND_POOL_CUSTOM_CONTAINER_IMAGE_URI

הגדרה מתקדמת

אם אתם רוצים לציין אפשרויות הגדרה שלא זמינות בדוגמאות הקודמות, אתם יכולים להשתמש בדגל --config כדי לציין את הנתיב לקובץ config.yaml בסביבה המקומית שלכם, שמכיל את השדות של CustomJobSpec. לדוגמה:

gcloud ai custom-jobs create \
  --region=LOCATION \
  --display-name=JOB_NAME \
  --config=config.yaml

דוגמה לקובץ config.yaml

המסוף

במסוף Google Cloud אי אפשר ליצור משאב CustomJob ישירות. עם זאת, אפשר ליצור משאב TrainingPipeline שיוצר CustomJob.

בהוראות הבאות מוסבר איך ליצור TrainingPipeline שיוצר CustomJob ולא עושה שום דבר אחר. אם אתם רוצים להשתמש בתכונות נוספות של TrainingPipeline, כמו אימון באמצעות מערך נתונים מנוהל או יצירת משאב Model בסוף האימון, קראו את המאמר יצירת צינורות עיבוד נתונים לאימון.

  1. בקטע Agent Platform במסוף Google Cloud , נכנסים לדף Training pipelines.

    מעבר ל-Training pipelines

  2. לוחצים על Create כדי לפתוח את החלונית Train new model.

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

    1. ברשימה הנפתחת Dataset, בוחרים באפשרות No managed dataset.

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

    לוחצים על Continue.

  4. בשלב Model details, בוחרים באפשרות Train new model או Train new version. אם בוחרים לאמן מודל חדש, נותנים למודל שם לבחירתכם, MODEL_NAME. לוחצים על המשך.

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

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

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

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

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

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

    לוחצים על Continue.

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

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

    1. ברשימה הנפתחת Region, בוחרים אזור שתומך באימון בהתאמה אישית.

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

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

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

    לוחצים על Continue.

  8. בשלב Prediction container, בוחרים באפשרות No prediction container.

  9. לוחצים על Start training כדי להפעיל את צינור עיבוד הנתונים לאימון ללא שרת.

REST

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

  • ‫LOCATION: האזור שבו יופעלו הקונטיינר או חבילת Python.
  • ‫PROJECT_ID: מזהה הפרויקט. .
  • ‫JOB_NAME: שדה חובה. השם המוצג של CustomJob.
  • מגדירים את משימת האימון בהתאמה אישית:
    • ‫MACHINE_TYPE: סוג המכונה. סוגי המכונות שזמינים לאימון
    • ‫ACCELERATOR_TYPE: (אופציונלי) סוג המאיץ שרוצים לצרף למשימה.
    • ‫ACCELERATOR_COUNT: (אופציונלי) מספר מאיצי החומרה שצריך לצרף למשימה.
    • ‫DISK_TYPE: (אופציונלי) סוג דיסק האתחול שבו משתמשים במשימה, pd-standard (ברירת המחדל) או pd-ssd. מידע נוסף על סוגי דיסקים
    • ‫DISK_SIZE: (אופציונלי) גודל דיסק האתחול ב-GB שמשמש למשימה. ערך ברירת המחדל הוא 100.
    • ‫REPLICA_COUNT: מספר הרפליקות של ה-worker שבהן רוצים להשתמש. ברוב המקרים, מגדירים את הערך 1 למאגר ה-Workers הראשון.
    • אם אפליקציית האימון פועלת בקונטיינר בהתאמה אישית, צריך לציין את הפרטים הבאים:
      • ‫CUSTOM_CONTAINER_IMAGE_URI: ה-URI של קובץ אימג' של קונטיינר ב-Artifact Registry או ב-Docker Hub, שצריך להריץ בכל רפליקה של Worker. /li>
      • ‫CUSTOM_CONTAINER_COMMAND: (אופציונלי) הפקודה שמופעלת כשהקונטיינר מופעל. הפקודה הזו מבטלת את נקודת הכניסה שמוגדרת כברירת מחדל בקונטיינר.
      • ‫CUSTOM_CONTAINER_ARGS: (אופציונלי) הארגומנטים שיועברו כשמפעילים את הקונטיינר.
    • אם אפליקציית האימון היא חבילת Python שפועלת בקונטיינר מוגדר מראש, צריך לציין את הפרטים הבאים:
      • ‫EXECUTOR_IMAGE_URI: ה-URI של קובץ האימג' של הקונטיינר שמריץ את הקוד שסופק. קונטיינרים זמינים מובנים לאימון
      • ‫PYTHON_PACKAGE_URIS: רשימה מופרדת בפסיקים של מזהי URI של Cloud Storage, שמציינים את קובצי חבילת Python שהם תוכנית האימון והחבילות התלויות שלה. המספר המקסימלי של מזהי URI של חבילות הוא 100.
      • ‫PYTHON_MODULE: השם של מודול Python שצריך להריץ אחרי התקנת החבילות.
      • ‫PYTHON_PACKAGE_ARGS: (אופציונלי) ארגומנטים של שורת הפקודה שיועברו למודול Python.
    • מידע נוסף על אפשרויות לתזמון משימות
    • ‫TIMEOUT: (אופציונלי) זמן הריצה המקסימלי של המשימה.
  • מציינים את LABEL_NAME ו-LABEL_VALUE לכל התוויות שרוצים להחיל על המשימה הייעודית הזו.

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

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

גוף בקשת JSON:

{
  "displayName": "JOB_NAME",
  "jobSpec": {
    "workerPoolSpecs": [
      {
        "machineSpec": {
          "machineType": MACHINE_TYPE,
          "acceleratorType": ACCELERATOR_TYPE,
          "acceleratorCount": ACCELERATOR_COUNT
        },
        "replicaCount": REPLICA_COUNT,
        "diskSpec": {
          "bootDiskType": DISK_TYPE,
          "bootDiskSizeGb": DISK_SIZE
        },

        // 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": EXECUTOR_IMAGE_URI,
          "packageUris": [
            PYTHON_PACKAGE_URIS
          ],
          "pythonModule": PYTHON_MODULE,
          "args": [
            PYTHON_PACKAGE_ARGS
          ]
        }
        // End of list of possible types for union field task.
      }
      // Specify one workerPoolSpec for single replica training, or multiple workerPoolSpecs
      // for distributed training.
    ],
    "scheduling": {
      "timeout": TIMEOUT
    }
  },
  "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-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/customJobs"

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-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/customJobs" | Select-Object -Expand Content

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

Java

לפני שמנסים את הדוגמה הזו, צריך לפעול לפי הוראות ההגדרה של Java שמפורטות במאמר התחלה מהירה של Agent Platform באמצעות ספריות לקוח. מידע נוסף מופיע במאמרי העזרה של Agent Platform Java API.

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


import com.google.cloud.aiplatform.v1.AcceleratorType;
import com.google.cloud.aiplatform.v1.ContainerSpec;
import com.google.cloud.aiplatform.v1.CustomJob;
import com.google.cloud.aiplatform.v1.CustomJobSpec;
import com.google.cloud.aiplatform.v1.JobServiceClient;
import com.google.cloud.aiplatform.v1.JobServiceSettings;
import com.google.cloud.aiplatform.v1.LocationName;
import com.google.cloud.aiplatform.v1.MachineSpec;
import com.google.cloud.aiplatform.v1.WorkerPoolSpec;
import java.io.IOException;

// Create a custom job to run machine learning training code in Vertex AI
public class CreateCustomJobSample {

  public static void main(String[] args) throws IOException {
    // TODO(developer): Replace these variables before running the sample.
    String project = "PROJECT";
    String displayName = "DISPLAY_NAME";

    // Vertex AI runs your training application in a Docker container image. A Docker container
    // image is a self-contained software package that includes code and all dependencies. Learn
    // more about preparing your training application at
    // https://cloud.google.com/vertex-ai/docs/training/overview#prepare_your_training_application
    String containerImageUri = "CONTAINER_IMAGE_URI";
    createCustomJobSample(project, displayName, containerImageUri);
  }

  static void createCustomJobSample(String project, String displayName, String containerImageUri)
      throws IOException {
    JobServiceSettings settings =
        JobServiceSettings.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.
    try (JobServiceClient client = JobServiceClient.create(settings)) {
      MachineSpec machineSpec =
          MachineSpec.newBuilder()
              .setMachineType("n1-standard-4")
              .setAcceleratorType(AcceleratorType.NVIDIA_TESLA_T4)
              .setAcceleratorCount(1)
              .build();

      ContainerSpec containerSpec =
          ContainerSpec.newBuilder().setImageUri(containerImageUri).build();

      WorkerPoolSpec workerPoolSpec =
          WorkerPoolSpec.newBuilder()
              .setMachineSpec(machineSpec)
              .setReplicaCount(1)
              .setContainerSpec(containerSpec)
              .build();

      CustomJobSpec customJobSpecJobSpec =
          CustomJobSpec.newBuilder().addWorkerPoolSpecs(workerPoolSpec).build();

      CustomJob customJob =
          CustomJob.newBuilder()
              .setDisplayName(displayName)
              .setJobSpec(customJobSpecJobSpec)
              .build();
      LocationName parent = LocationName.of(project, location);
      CustomJob response = client.createCustomJob(parent, customJob);
      System.out.format("response: %s\n", response);
      System.out.format("Name: %s\n", response.getName());
    }
  }
}

Node.js

לפני שמנסים את הדוגמה הזו, צריך לפעול לפי הוראות ההגדרה של Node.js שמפורטות במאמר התחלה מהירה של Agent Platform באמצעות ספריות לקוח. מידע נוסף מופיע במאמרי העזרה של Agent Platform Node.js API.

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

/**
 * TODO(developer): Uncomment these variables before running the sample.\
 * (Not necessary if passing values as arguments)
 */

// const customJobDisplayName = 'YOUR_CUSTOM_JOB_DISPLAY_NAME';
// const containerImageUri = 'YOUR_CONTAINER_IMAGE_URI';
// const project = 'YOUR_PROJECT_ID';
// const location = 'YOUR_PROJECT_LOCATION';

// Imports the Google Cloud Job Service Client library
const {JobServiceClient} = require('@google-cloud/aiplatform');

// Specifies the location of the api endpoint
const clientOptions = {
  apiEndpoint: 'us-central1-aiplatform.googleapis.com',
};

// Instantiates a client
const jobServiceClient = new JobServiceClient(clientOptions);

async function createCustomJob() {
  // Configure the parent resource
  const parent = `projects/${project}/locations/${location}`;
  const customJob = {
    displayName: customJobDisplayName,
    jobSpec: {
      workerPoolSpecs: [
        {
          machineSpec: {
            machineType: 'n1-standard-4',
            acceleratorType: 'NVIDIA_TESLA_T4',
            acceleratorCount: 1,
          },
          replicaCount: 1,
          containerSpec: {
            imageUri: containerImageUri,
            command: [],
            args: [],
          },
        },
      ],
    },
  };
  const request = {parent, customJob};

  // Create custom job request
  const [response] = await jobServiceClient.createCustomJob(request);

  console.log('Create custom job response:\n', JSON.stringify(response));
}
createCustomJob();

Python

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

def create_custom_job_with_experiment_autologging_sample(
    project: str,
    location: str,
    staging_bucket: str,
    display_name: str,
    script_path: str,
    container_uri: str,
    service_account: str,
    experiment: str,
    experiment_run: Optional[str] = None,
) -> None:
    aiplatform.init(project=project, location=location, staging_bucket=staging_bucket, experiment=experiment)

    job = aiplatform.CustomJob.from_local_script(
        display_name=display_name,
        script_path=script_path,
        container_uri=container_uri,
        enable_autolog=True,
    )

    job.run(
        service_account=service_account,
        experiment=experiment,
        experiment_run=experiment_run,
    )

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