באמצעות צינורות עיבוד נתונים לאימון, אתם יכולים לבצע אימון בהתאמה אישית של למידת מכונה (ML) וליצור באופן אוטומטי משאב Model על סמך פלט האימון.
אם המשימה שלכם כוללת רק הפעלה של משימת אימון ויצירה אוטומטית של משאב מודל בלי לתזמר תהליך עבודה מלא, יכול להיות שיספיק לכם להשתמש בצינור עיבוד נתונים עצמאי לאימון, כמו שמתואר במסמך הזה. עם זאת, אם המטרה שלכם היא ליצור מחזור חיים של ML מקצה לקצה, שהוא חזק, אוטומטי וניתן לחזרה, וכולל כמה שלבים (כמו עיבוד נתונים, אימון, הערכה, פריסה או מעקב), הגישה המומלצת היא Gemini Enterprise Agent Platform Pipelines, כי היא מיועדת לתזמור של תהליכי עבודה.
לפני שיוצרים צינור עיבוד נתונים
לפני שיוצרים צינור עיבוד נתונים לאימון ב-Agent Platform, צריך ליצור אפליקציית אימון ב-Python או קונטיינר בהתאמה אישית כדי להגדיר את קוד האימון ואת יחסי התלות שרוצים להריץ ב-Agent Platform. אם אתם יוצרים אפליקציית אימון ב-Python באמצעות PyTorch, TensorFlow, scikit-learn או XGBoost, אתם יכולים להשתמש בקונטיינרים המוגדרים מראש שלנו כדי להריץ את הקוד. אם אתם לא בטוחים באיזו אפשרות לבחור, קראו את הדרישות לגבי קוד האימון.
אפשרויות לפייפליין לאימון
צינור עיבוד נתונים לאימון כולל משימות אימון עם שלבים נוספים. במדריך הזה נסביר על שני צינורות עיבוד נתונים שונים לאימון:
- מפעילים
CustomJobומעלים את המודל שנוצר ל-Agent Platform. - מפעילים משימה של כוונון היפר-פרמטרים ומעלים את המודל שנוצר ל-Agent Platform.
בנוסף, אתם יכולים להשתמש במערכי נתונים מנוהלים בצינור עיבוד הנתונים לאימון. מידע נוסף על הגדרת צינור עיבוד נתונים לאימון באמצעות מערך נתונים מנוהל
מה CustomJob כולל
כשיוצרים משימה ייעודית, מציינים את ההגדרות שנדרשות ל-Agent Platform כדי להריץ את קוד האימון, כולל:
- מאגר עובדים אחד לאימון בצומת יחיד (
WorkerPoolSpec), או כמה מאגרי עובדים לאימון מבוזר. - הגדרות אופציונליות לתזמון משימות (
Scheduling), הגדרת משתני סביבה מסוימים לקוד האימון, שימוש בחשבון שירות בהתאמה אישית ושימוש בקישור בין רשתות VPC שכנות (peering)
במאגרי ה-Workers, אתם יכולים לציין את ההגדרות הבאות:
- סוגי מכונות ומאיצים
- הגדרת סוג קוד האימון שמאגר ה-workers מריץ: אפליקציית אימון ב-Python (
PythonPackageSpec) או קונטיינר בהתאמה אישית (ContainerSpec)
אם אתם רוצים ליצור משימה ייעודית עצמאית מחוץ ל-pipeline של Vertex AI Training, עיינו במדריך למשימות ייעודיות.
הגדרת צינור עיבוד הנתונים לשימוש במערך נתונים מנוהל
בצינור עיבוד הנתונים לאימון, אתם יכולים להגדיר את משימת האימון ללא שרת (serverless) או את משימת כוונון ההיפר-פרמטרים כך שישתמשו במערך נתונים מנוהל. מערכי נתונים מנוהלים מאפשרים לכם לנהל את מערכי הנתונים באמצעות אפליקציות ומודלים לאימון.
כדי להשתמש במערך נתונים מנוהל בצינור עיבוד הנתונים לאימון:
- יוצרים את מערך הנתונים.
- מעדכנים את אפליקציית האימון כך שתשתמש במערך נתונים מנוהל. איך פלטפורמת הסוכנים מעבירה את מערך הנתונים לאפליקציית האימון
כשיוצרים פייפליין אימון, מציינים קבוצת נתונים מנוהלת. לדוגמה, אם אתם יוצרים את צינור עיבוד הנתונים לאימון באמצעות ה-API בארכיטקטורת REST, ציינו את הגדרות מערך הנתונים בקטע
inputDataConfig.צריך ליצור את צינור עיבוד הנתונים לאימון באותו אזור שבו יצרתם את מערך הנתונים.
מידע נוסף זמין במאמרי העזרה של ה-API ב-TrainingPipeline.
הגדרת אימון מבוזר
בצינור עיבוד הנתונים לאימון, אפשר להגדיר את משימת האימון ללא שרת או את משימת כוונון ההיפר-פרמטרים לאימון מבוזר, על ידי ציון כמה מאגרי Worker.
כל הדוגמאות בדף הזה מציגות משימות אימון עם רפליקה אחת ומאגר אחד של מכונות worker. כדי לשנות אותם לאימון מבוזר:
- משתמשים במאגר העובדים הראשון כדי להגדיר את הרפליקה הראשית, ומגדירים את מספר הרפליקות ל-1.
- אם מסגרת למידת המכונה שלכם תומכת במשימות האשכול הנוספות האלה לאימון מבוזר, אתם יכולים להוסיף עוד מאגרי Worker כדי להגדיר רפליקות של Worker, רפליקות של שרת פרמטרים או רפליקות של מעריך.
מידע נוסף על שימוש באימון מבוזר
CustomJob והעלאת מודל
פייפליין האימון כולל משימה ייעודית עם שלב נוח נוסף, שמאפשר לפרוס את המודל ב-Agent Platform בקלות רבה יותר אחרי האימון. צינור עיבוד הנתונים לאימון מבצע שתי פעולות עיקריות:
צינור עיבוד הנתונים לאימון יוצר משאב
CustomJob. המשימה הייעודית מריצה את אפליקציית האימון באמצעות משאבי המחשוב שציינתם.אחרי שהמשימה הייעודית מסתיימת, צינור עיבוד הנתונים לאימון מאתר את פריטי המידע שנוצרו על ידי אפליקציית האימון בספריית הפלט שציינתם בקטגוריה של Cloud Storage. הוא משתמש בארטיפקטים האלה כדי ליצור משאב מודל, שמכין אתכם לפריסת המודל.
יש שתי דרכים שונות להגדיר את המיקום של פריטי המידע שנוצרו במודל:
אם הגדרתם
baseOutputDirectoryלמשימת האימון, ודאו שקוד האימון שומר את פריטי המידע שנוצרו מהמודל במיקום הזה, באמצעות משתנה הסביבה$AIP_MODEL_DIRשהוגדר על ידי Agent Platform. אחרי שמשימת האימון מסתיימת, Agent Platform מחפש את פריטי המידע שנוצרו מהמודל ב-gs://BASE_OUTPUT_DIRECTORY/model.אם מגדירים את השדה
modelToUpload.artifactUri, צינור עיבוד הנתונים לאימון מעלה את פריטי המידע שנוצרו בתהליך הפיתוח של המודל מאותו URI. חובה להגדיר את השדה הזה אם לא הגדרתם אתbaseOutputDirectory.
אם מציינים גם את baseOutputDirectory וגם את modelToUpload.artifactUri, פלטפורמת Agent משתמשת ב-modelToUpload.artifactUri.
כדי ליצור צינור עיבוד נתונים לאימון מהסוג הזה:
המסוף
בקטע Agent Platform במסוף Google Cloud , נכנסים לדף Training pipelines.
לוחצים על Create כדי לפתוח את החלונית Train new model.
בשלב Training method, מציינים את ההגדרות הבאות:
אם רוצים להשתמש במערך נתונים מנוהל לאימון, צריך לציין Dataset ו-Annotation set.
אחרת, בתפריט הנפתח Dataset, בוחרים באפשרות No managed dataset.
בוחרים באפשרות אימון בהתאמה אישית (מתקדם).
לוחצים על Continue.
בשלב Model details, בוחרים באפשרות Train new model או Train new version. אם בוחרים לאמן מודל חדש, נותנים למודל שם לבחירתכם, MODEL_NAME. לוחצים על המשך.
בשלב Training container, מציינים את ההגדרות הבאות:
בוחרים אם להשתמש במאגר מובנה מראש או במאגר בהתאמה אישית לאימון.
בהתאם לבחירה שלכם, מבצעים את אחת מהפעולות הבאות:
אם אתם רוצים להשתמש בקונטיינר מובנה לאימון, אתם צריכים לספק ל-Agent Platform את המידע שנדרש כדי להשתמש בחבילת האימון שהעליתם ל-Cloud Storage:
ברשימות הנפתחות Model framework ו-Model framework version, מציינים את הקונטיינר המוגדר מראש שבו רוצים להשתמש.
בשדה Package location, מציינים את ה-URI של Cloud Storage של אפליקציית האימון ב-Python שיצרתם והעליתם. הקובץ הזה בדרך כלל מסתיים ב-
.tar.gz.בשדה Python module, מזינים את שם המודול של נקודת הכניסה של אפליקציית האימון.
אם אתם רוצים להשתמש בקונטיינר בהתאמה אישית לאימון, בשדה Container image ציינו את ה-URI של קובץ האימג' של הקונטיינר ב-Artifact Registry או ב-Docker Hub.
בשדה Model output directory, מציינים את ה-URI של Cloud Storage של ספרייה בקטגוריה שיש לכם גישה אליה. הספרייה לא חייבת להיות קיימת עדיין.
הערך הזה מועבר ל-Agent Platform בשדה
baseOutputDirectoryAPI, שמגדיר כמה משתני סביבה שאפליקציית האימון יכולה לגשת אליהם כשהיא פועלת.בסיום האימון, פלטפורמת Agent מחפשת פריטי מידע שנוצרו בתהליך הפיתוח (Artifact) של המודל בספריית משנה של ה-URI הזה כדי ליצור
Model. (ספריית המשנה הזו זמינה לקוד האימון כמשתנה הסביבהAIP_MODEL_DIR).כשלא משתמשים בכוונון היפר-פרמטרים, פלטפורמת Agent מצפה למצוא פריטי מידע שנוצרו בתהליך הפיתוח של המודל ב-
BASE_OUTPUT_DIRECTORY/model/.אופציונלי: בשדה Arguments, אתם יכולים לציין ארגומנטים שבהם Agent Platform תשתמש כשהיא תתחיל להריץ את קוד האימון. האורך המקסימלי של כל הארגומנטים ביחד הוא 100,000 תווים. ההתנהגות של הארגומנטים האלה משתנה בהתאם לסוג המאגר שבו אתם משתמשים:
אם אתם משתמשים בקונטיינר מוגדר מראש, פלטפורמת הסוכנים מעבירה את הארגומנטים כדגלים של שורת הפקודה למודול Python.
אם אתם משתמשים בקונטיינר בהתאמה אישית, Agent Platform מחליפה את ההוראה
CMDשל הקונטיינר בארגומנטים.
לוחצים על Continue.
בשלב Hyperparameter tuning, מוודאים שהתיבה Enable hyperparameter tuning לא מסומנת. לוחצים על המשך.
בשלב Compute and pricing, מציינים את ההגדרות הבאות:
ברשימה הנפתחת Region, בוחרים אזור שתומך באימון בהתאמה אישית.
בקטע Worker pool 0, מציינים את משאבי המחשוב שבהם רוצים להשתמש לאימון.
אם אתם מציינים מאיצים, ודאו שסוג המאיץ שבחרתם זמין באזור שבחרתם.
אם רוצים לבצע אימון מבוזר, לוחצים על Add more worker pools ומציינים קבוצה נוספת של משאבי מחשוב לכל מאגר נוסף של worker pools.
לוחצים על Continue.
בשלב Prediction container, מציינים את ההגדרות הבאות:
בוחרים אם להשתמש במאגר מובנה או במאגר בהתאמה אישית כדי להציג חיזויים מהמודל המאומן.
בהתאם לבחירה שלכם, מבצעים את אחת מהפעולות הבאות:
אם רוצים להשתמש בקונטיינר מובנה כדי להציג חיזויים, משתמשים בשדות Model framework, Model framework version ו-Accelerator type כדי לבחור באיזה קונטיינר מובנה לחיזוי להשתמש לצורך החיזוי.
מתאימים את Model framework ואת Model framework version למסגרת למידת המכונה שבה השתמשתם לאימון. ציינו סוג מאיץ רק אם אתם רוצים להשתמש במעבדי GPU לחיזוי אונליין או לחיזוי באצווה.
אם אתם רוצים להשתמש בקונטיינר בהתאמה אישית כדי להציג חיזויים, בצעו את הפעולות הבאות:
בשדה Container image, מציינים את מזהה ה-URI של קובץ האימג' של הקונטיינר ב-Artifact Registry.
אפשר גם לציין פקודה כדי לשנות את ההוראה
ENTRYPOINTשל הקונטיינר.
השדה Model directory מכיל את הערך שהגדרתם קודם בשדה Model output directory בשלב Training container. שינוי של אחד מהשדות האלה משפיע באותו אופן. למידע נוסף על השדה הזה, עיינו בהוראה הקודמת.
משאירים את השדות בקטע Predict schemata ריקים.
לוחצים על Start training כדי להפעיל את צינור עיבוד הנתונים לאימון ללא שרת.
REST
כדי ליצור צינור עיבוד נתונים לאימון, משתמשים בדוגמת הקוד הבאה עם השיטה create של המשאב trainingPipeline.
הערה: אם רוצים להגדיר את צינור עיבוד הנתונים הזה כדי ליצור גרסה חדשה של המודל, אפשר להוסיף את PARENT_MODEL בשדה trainingPipeline.
מידע נוסף זמין במאמר ניהול גרסאות של מודלים באמצעות מרשם המודלים ב-Gemini Enterprise Agent Platform.
לפני שמשתמשים בנתוני הבקשה, צריך להחליף את הנתונים הבאים:
- LOCATION_ID: האזור שבו קוד האימון פועל ובו מאוחסן
Model. - PROJECT_ID: מזהה הפרויקט.
- TRAINING_PIPELINE_NAME: שדה חובה. השם המוצג של trainingPipeline.
- אם אפליקציית האימון משתמשת במערך נתונים של Agent Platform, צריך לציין את הפרטים הבאים:
- 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 שאליו Agent Platform מייצאת את מערך נתוני האימון, אחרי שהיא מפצלת אותו לקבוצות אימון, אימות ובדיקה.
- מגדירים את משימת האימון בהתאמה אישית:
- MACHINE_TYPE: סוג המכונה. סוגי המכונות שזמינים לאימון.
- ACCELERATOR_TYPE: (אופציונלי) סוג המאיץ שצריך לצרף לכל ניסיון.
- ACCELERATOR_COUNT: (אופציונלי) מספר המאיצים שצריך לצרף לכל ניסוי.
- REPLICA_COUNT: מספר הרפליקות של ה-worker שבהן צריך להשתמש בכל ניסוי.
- אם אפליקציית האימון פועלת בקונטיינר בהתאמה אישית, צריך לציין את הפרטים הבאים:
- 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 שמפורטות במאמר התחלה מהירה של Agent Platform באמצעות ספריות לקוח. מידע נוסף מופיע במאמרי העזרה של Agent Platform Java API.
כדי לבצע אימות ב-Agent Platform, צריך להגדיר את Application Default Credentials. למידע נוסף, ראו הגדרת אימות לסביבת פיתוח מקומית.
Python
במאמר התקנת Vertex AI SDK ל-Python מוסבר איך להתקין או לעדכן את Vertex AI SDK ל-Python. מידע נוסף מופיע ב מאמרי העזרה של ה-API מבוסס-Python.
בדוגמאות הבאות מוסבר איך משתמשים ב-Agent Platform SDK for Python כדי ליצור צינור עיבוד נתונים לאימון בלי שרת (serverless). בוחרים אם להשתמש במאגר בהתאמה אישית או במאגר מובנה מראש לאימון:
מאגר מוכן מראש
כשמשתמשים ב-Agent Platform SDK ל-Python כדי ליצור צינור עיבוד נתונים לאימון שמריץ את קוד ה-Python בקונטיינר מובנה, אפשר לספק את קוד האימון באחת מהדרכים הבאות:
מציינים את ה-URI של חבילת הפצה של מקור Python ב-Cloud Storage.
(האפשרות הזו זמינה גם כשיוצרים צינור עיבוד נתונים לאימון בלי להשתמש ב-Agent Platform SDK for Python).
מציינים את הנתיב לסקריפט Python במחשב המקומי. לפני שנוצר צינור עיבוד נתונים לאימון, ה-SDK של Agent Platform ל-Python אורז את הסקריפט כהפצת מקור ומעלה אותו לקטגוריה של Cloud Storage שבחרתם.
(האפשרות הזו זמינה רק כשמשתמשים ב-Agent Platform SDK לפייתון).
כדי לראות דוגמת קוד לכל אחת מהאפשרויות האלה, בוחרים בכרטיסייה המתאימה:
חבילה
בדוגמה הבאה נעשה שימוש במחלקה CustomPythonPackageTrainingJob.
Script
בדוגמה הבאה נעשה שימוש במחלקה CustomTrainingJob.
מאגר תגים בהתאמה אישית
בדוגמה הבאה נעשה שימוש במחלקה CustomContainerTrainingJob.
משימת כוונון של היפר-פרמטרים והעלאת מודל
תהליך האימון הזה כולל משימה של כוונון היפר-פרמטרים, עם שלב נוח נוסף שמקל על פריסת המודל ב-Agent Platform אחרי האימון. צינור עיבוד הנתונים לאימון מבצע שתי פעולות עיקריות:
צינור עיבוד הנתונים לאימון יוצר משאב של משימת כוונון של היפר-פרמטרים. משימת כוונון ההיפר-פרמטרים יוצרת כמה ניסויים. בכל ניסיון, משימה ייעודית מריצה את אפליקציית האימון באמצעות משאבי המחשוב וההיפר-פרמטרים שציינתם.
אחרי שמשימת כוונון ההיפר-פרמטרים מסתיימת, צינור עיבוד הנתונים לאימון מוצא את פריטי המידע שנוצרו בתהליך הפיתוח של המודל מהניסיון הטוב ביותר, בתוך ספריית הפלט (
baseOutputDirectory) שציינתם לקטגוריה של Cloud Storage. צינור עיבוד הנתונים לאימון משתמש בארטיפקטים האלה כדי ליצור משאב מודל, שמאפשר פריסת מודל.
בצינור עיבוד הנתונים הזה לאימון, צריך לציין baseOutputDirectory שבו פלטפורמת Agent תחפש את פריטי המידע שנוצרו בתהליך הפיתוח של המודל מהניסיון הכי טוב.
במשימות כוונון של היפר-פרמטר יש הגדרות נוספות. מידע נוסף על ההגדרות של HyperparameterTuningJob
REST
כדי ליצור צינור עיבוד נתונים לאימון, משתמשים בדוגמת הקוד הבאה עם השיטה create של המשאב trainingPipeline.
לפני שמשתמשים בנתוני הבקשה, צריך להחליף את הנתונים הבאים:
- LOCATION_ID: האזור של הפרויקט.
- PROJECT_ID: מזהה הפרויקט.
- TRAINING_PIPELINE_NAME: שדה חובה. השם המוצג של trainingPipeline.
- אם אפליקציית האימון משתמשת במערך נתונים של Agent Platform, צריך לציין את הפרטים הבאים:
- 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 שאליו Agent Platform מייצאת את מערך הנתונים לאימון, אחרי שהיא מפצלת אותו לקבוצות אימון, אימות ובדיקה.
- מציינים את משימת כוונון ההיפר-פרמטרים:
- מציינים את המדדים:
- 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: מספר הרפליקות של ה-worker שבהן צריך להשתמש בכל ניסוי.
- אם אפליקציית האימון פועלת בקונטיינר בהתאמה אישית, צריך לציין את הפרטים הבאים:
- 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: שדה חובה. מציינים אחת משתי האפשרויות הבאות:
- ה-URI של קובץ האימג' של הקונטיינר המוכן מראש שבו משתמשים לחיזוי, למשל "tf2-cpu.2-1:latest".
- ה-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.
מעקב אחרי האימון
כדי לראות את יומני האימון:
בקטע Agent Platform במסוף Google Cloud , נכנסים לדף Training.
לוחצים על שם המשימה כדי לעבור לדף המשימה הייעודית.
לוחצים על הצגת יומנים.
אתם יכולים גם להשתמש במעטפת אינטראקטיבית כדי לבדוק את קונטיינרי האימון בזמן שצינור עיבוד הנתונים לאימון פועל.
איך רואים את המודל שאומן
בסיום תהליך האימון ללא שרת, המודל המאומן יופיע במסוף Google Cloud בקטע Agent Platform, בדף Models.
המאמרים הבאים
- איך לאתר צווארי בקבוק בביצועי האימון כדי לאמן מודלים מהר יותר ובזול יותר באמצעות Cloud Profiler.
- פורסים את המודל בנקודת קצה.
- יוצרים משימת כוונון של היפר-פרמטר.
- איך מתזמנים משימות אימון ללא שרת (serverless) על סמך זמינות המשאבים