צינורות עיבוד נתונים לאימון מאפשרים לכם לבצע אימון מותאם אישית של למידת מכונה (ML) וליצור באופן אוטומטי משאב Model על סמך פלט האימון.
אם המשימה שלכם כוללת רק הפעלה של משימת אימון ויצירה אוטומטית של משאב מודל בלי לתזמן תהליך עבודה מלא, יכול להיות ששימוש בצינור אימון עצמאי כמו שמתואר במסמך הזה יספיק. עם זאת, אם המטרה שלכם היא ליצור מחזור חיים חזק, אוטומטי וניתן לחזרה של למידת מכונה מקצה לקצה, שכולל כמה שלבים (כמו עיבוד נתונים, אימון, הערכה, פריסה או מעקב), מומלץ להשתמש ב-Vertex AI Pipelines, כי הוא מיועד לניהול תהליכי עבודה.
לפני שיוצרים צינור עיבוד נתונים
לפני שיוצרים צינור עיבוד נתונים לאימון ב-Vertex AI, צריך ליצור אפליקציית אימון ב-Python או קונטיינר בהתאמה אישית כדי להגדיר את קוד האימון ואת התלות שרוצים להריץ ב-Vertex AI. אם יוצרים אפליקציית אימון ב-Python באמצעות PyTorch, TensorFlow, scikit-learn או XGBoost, אפשר להשתמש בקונטיינרים המובנים שלנו כדי להריץ את הקוד. אם אתם לא בטוחים איזו מהאפשרויות האלה לבחור, כדאי לעיין בדרישות לגבי קוד האימון כדי לקבל מידע נוסף.
אפשרויות של צינור עיבוד נתונים לאימון
צינור עיבוד נתונים לאימון כולל עבודות אימון עם שלבים נוספים. במדריך הזה מוסברות שתי שיטות שונות לאימון מודלים:
- מפעילים
CustomJobומעלים את המודל שנוצר ל-Vertex AI - להפעיל משימת כוונון היפר-פרמטרים ולהעלות את המודל שנוצר ל-Vertex AI
בנוסף, אתם יכולים להשתמש במערכי נתונים מנוהלים בצינור האימון. מידע נוסף על הגדרת צינור הנתונים לאימון לשימוש במערך נתונים מנוהל
מה נכלל בCustomJob
כשיוצרים משימה בהתאמה אישית, מציינים הגדרות ש-Vertex AI צריך כדי להריץ את קוד האימון, כולל:
- מאגר worker אחד
לאימון של צומת יחיד (
WorkerPoolSpec), או כמה מאגרי worker לאימון מבוזר - הגדרות אופציונליות להגדרת תזמון של עבודות (
Scheduling), הגדרת משתני סביבה מסוימים לקוד האימון, שימוש בחשבון שירות בהתאמה אישית ושימוש ב-VPC Network Peering
במאגרי העובדים אפשר לציין את ההגדרות הבאות:
- סוגי מכונות ומאיצים
- הגדרה של סוג קוד ההדרכה שמופעל במאגר העובדים: אפליקציית הדרכה של Python (
PythonPackageSpec) או קונטיינר בהתאמה אישית (ContainerSpec)
אם רוצים ליצור משימה מותאמת אישית עצמאית מחוץ לצינור אימון של Vertex AI, אפשר לעיין במדריך בנושא משימות בהתאמה אישית.
הגדרת צינור עיבוד הנתונים לשימוש במערך נתונים מנוהל
בצינור עיבוד הנתונים לאימון, אפשר להגדיר את משימת האימון ללא שרת או את משימת האופטימיזציה של היפר-פרמטרים כך שישתמשו במערך נתונים מנוהל. מערכי נתונים מנוהלים מאפשרים לכם לנהל את מערכי הנתונים באמצעות אפליקציות ומודלים לאימון.
כדי להשתמש במערך נתונים מנוהל בצינור ההדרכה:
- יוצרים את מערך הנתונים.
- מעדכנים את אפליקציית האימון כך שתשתמש במערך נתונים מנוהל. מידע נוסף זמין במאמר איך Vertex AI מעביר את מערך הנתונים לאפליקציית האימון.
מציינים מערך נתונים מנוהל כשיוצרים את צינור האימון. לדוגמה, אם יוצרים את צינור האימון באמצעות API בארכיטקטורת REST, צריך לציין את הגדרות מערך הנתונים בקטע
inputDataConfig.צריך ליצור את צינור האימון באותו אזור שבו יצרתם את מערך הנתונים.
מידע נוסף זמין במאמר בנושא הפניית API ב-TrainingPipeline.
הגדרת אימון מבוזר
בצינור ההדרכה, אפשר להגדיר את משימת ההדרכה בלי שרת (serverless) או את משימת ההתאמה של היפר-פרמטרים להדרכה מבוזרת על ידי ציון של כמה מאגרי עובדים.
כל הדוגמאות בדף הזה מציגות משימות אימון עם רפליקה אחת ועם worker pool אחד. כדי לשנות אותן לאימון מבוזר:
- משתמשים במאגר העובדים הראשון כדי להגדיר את הרפליקה הראשית, ומגדירים את מספר הרפליקות ל-1.
- אפשר להוסיף עוד מאגרי עובדים כדי להגדיר רפליקות של עובדים, רפליקות של שרת פרמטרים או רפליקות של מעריך, אם מסגרת למידת המכונה תומכת במשימות נוספות של אשכולות לאימון מבוזר.
מידע נוסף על שימוש באימון מבוזר
העלאה של מודל ו-CustomJob
צינור האימון הזה כולל משימה בהתאמה אישית עם שלב נוסף שנועד להקל על פריסת המודל ב-Vertex AI אחרי האימון. צינור ההכשרה הזה מבצע שני דברים עיקריים:
צינור העיבוד של האימון יוצר משאב
CustomJob. המשימה בהתאמה אישית מפעילה את אפליקציית האימון באמצעות משאבי המחשוב שאתם מציינים.אחרי שהעבודה המותאמת אישית מסתיימת, צינור האימון מוצא את ארטיפקטים של המודל שאפליקציית האימון יוצרת בספריית הפלט שציינתם עבור קטגוריית 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.
כדי ליצור צינור אימונים מהסוג הזה:
המסוף
במסוף Google Cloud , בקטע Vertex AI, עוברים לדף Training pipelines.
לוחצים על יצירה כדי לפתוח את החלונית אימון מודל חדש.
בשלב Training method, מציינים את ההגדרות הבאות:
אם רוצים להשתמש במערך נתונים מנוהל לצורך אימון, צריך לציין Dataset ו-Annotation set.
אחרת, בתפריט הנפתח Dataset (מערך נתונים), בוחרים באפשרות No managed dataset (אין מערך נתונים מנוהל).
בוחרים באפשרות אימון מותאם אישית (מתקדם).
לוחצים על Continue.
בשלב פרטי המודל, בוחרים באפשרות הדרכה על מודל חדש או הדרכה על גרסה חדשה. אם בוחרים באפשרות 'אימון מודל חדש', מזינים שם לבחירה, MODEL_NAME, למודל. לוחצים על המשך.
בשלב Training container (מאגר תגים לאימון), מציינים את ההגדרות הבאות:
בוחרים אם להשתמש במאגר תגים מוכן מראש או במאגר תגים בהתאמה אישית להדרכה.
בהתאם לבחירה, מבצעים אחת מהפעולות הבאות:
אם רוצים להשתמש במאגר מוכן מראש לאימון, צריך לספק ל-Vertex AI את המידע שהוא צריך כדי להשתמש בחבילת האימון שהעליתם ל-Cloud Storage:
משתמשים בתפריטים הנפתחים Model framework (מסגרת מודל) ו-Model framework version (גרסת מסגרת המודל) כדי לציין את מאגר התגים המובנה שבו רוצים להשתמש.
בשדה Package location (מיקום החבילה), מציינים את ה-URI של Cloud Storage של אפליקציית האימון של Python שיצרתם והעליתם. הקובץ הזה בדרך כלל מסתיים ב-
.tar.gz.בשדה Python module [מודול Python], מזינים את שם המודול של נקודת הכניסה של אפליקציית האימון.
אם רוצים להשתמש בקונטיינר בהתאמה אישית לאימון, בשדה Container image (קובץ אימג' של קונטיינר) מציינים את ה-URI של קובץ האימג' של הקונטיינר ב-Artifact Registry או ב-Docker Hub.
בשדה Model output directory (ספריית פלט של המודל), מציינים את ה-URI של Cloud Storage של ספרייה בקטגוריה שיש לכם גישה אליה. הספרייה לא צריכה להתקיים עדיין.
הערך הזה מועבר אל Vertex AI בשדה
baseOutputDirectoryAPI, שקובע כמה משתני סביבה שהאפליקציה לאימון יכולה לגשת אליהם כשהיא פועלת.בסיום האימון, Vertex AI מחפש ארטיפקטים של המודל בספריית משנה של ה-URI הזה כדי ליצור
Model. (ספריית המשנה הזו זמינה לקוד האימון שלכם כמשתנה הסביבהAIP_MODEL_DIR).אם לא משתמשים בכוונון היפר-פרמטרים, מערכת Vertex AI מצפה למצוא ארטיפקטים של מודלים ב-
BASE_OUTPUT_DIRECTORY/model/.אופציונלי: בשדה Arguments (ארגומנטים), אפשר לציין ארגומנטים לשימוש ב-Vertex AI כשהוא מתחיל להריץ את קוד האימון. האורך המקסימלי של כל הארגומנטים יחד הוא 100,000 תווים. ההתנהגות של הארגומנטים האלה שונה בהתאם לסוג מאגר התגים שבו אתם משתמשים:
אם אתם משתמשים בקונטיינר מוכן מראש, Vertex AI מעביר את הארגומנטים כדגלים של שורת פקודה אל מודול Python.
אם אתם משתמשים בקונטיינר בהתאמה אישית, מערכת Vertex AI מחליפה את ההוראה
CMDבקונטיינר שלכם בארגומנטים.
לוחצים על Continue.
בשלב Hyperparameter tuning (התאמת היפרפרמטרים), מוודאים שהתיבה Enable hyperparameter tuning (הפעלת התאמת היפרפרמטרים) לא מסומנת. לוחצים על המשך.
בשלב Compute and pricing (חישוב ותמחור), מציינים את ההגדרות הבאות:
בתפריט הנפתח Region, בוחרים באפשרות region that supports custom training (אזור שתומך באימון בהתאמה אישית).
בקטע Worker pool 0 (מאגר עובדים 0), מציינים את משאבי מחשוב שבהם רוצים להשתמש לאימון.
אם מציינים מאיצים, צריך לוודא שסוג המאיץ שנבחר זמין באזור שנבחר.
אם רוצים לבצע אימון מבוזר, לוחצים על Add more worker pools (הוספת מאגרי עובדים) ומציינים קבוצה נוספת של משאבי מחשוב לכל מאגר עובדים נוסף שרוצים.
לוחצים על Continue.
בשלב Prediction container (מאגר התחזיות), מציינים את ההגדרות הבאות:
בוחרים אם להשתמש במאגר תגים מוכן מראש או במאגר תגים בהתאמה אישית כדי להציג תחזיות מהמודל שאומן.
בהתאם לבחירה, מבצעים אחת מהפעולות הבאות:
אם רוצים להשתמש במאגר תגים מוכן מראש להצגת תחזיות, צריך להשתמש בשדות Model framework (מסגרת מודל), Model framework version (גרסת מסגרת המודל) ו-Accelerator type (סוג המאיץ) כדי לבחור באיזה מאגר תגים מוכן מראש של תחזיות להשתמש.
התאימו את מסגרת המודל ואת גרסת מסגרת המודל למסגרת למידת המכונה שבה השתמשתם לאימון. מציינים סוג של מאיץ רק אם רוצים להשתמש בהמשך במעבדי GPU לחיזויים אונליין או לחיזויים באצווה.
אם רוצים להשתמש במאגר תגים בהתאמה אישית כדי להציג תחזיות, צריך לבצע את הפעולות הבאות:
בשדה Container image (קובץ אימג' של קונטיינר), מציינים את ה-URI של קובץ האימג' של הקונטיינר ב-Artifact Registry.
אפשר גם לציין פקודה כדי לבטל את ההוראה
ENTRYPOINTשל הקונטיינר.
השדה Model directory מכיל את הערך שהגדרתם קודם בשדה Model output directory בשלב Training container. שינוי של אחד מהשדות האלה משפיע באותו אופן. מידע נוסף על השדה הזה זמין בהוראות הקודמות.
משאירים את השדות בקטע Predict schemata (תכנון תחזיות) ריקים.
כדי להפעיל את צינור ההכשרה בלי שרת (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. מידע נוסף זמין במאמר הגדרת אימות לסביבת פיתוח מקומית.
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.
Script
בדוגמה הבאה נעשה שימוש במחלקה CustomTrainingJob.
מאגר תגים בהתאמה אישית
בדוגמה הבאה נעשה שימוש במחלקה CustomContainerTrainingJob.
משימת כוונון של היפר-פרמטר והעלאת מודל
צינור האימון הזה כולל משימת כוונון היפר-פרמטרים עם שלב נוסף שנועד להקל על פריסת המודל ב-Vertex AI אחרי האימון. צינור ההכשרה הזה מבצע שני דברים עיקריים:
צינור האימון יוצר משאב של משימת כוונון של היפר-פרמטרים. משימת כוונון ההיפר-פרמטר יוצרת כמה ניסויים. בכל ניסיון, משימה מותאמת אישית מריצה את אפליקציית האימון באמצעות משאבי המחשוב וההיפרפרמטרים שאתם מציינים.
אחרי שמשימת ההתאמה של ההיפרפרמטרים מסתיימת, צינור ההכשרה מוצא את ארטיפקטי המודל מהניסיון הטוב ביותר, בספריית הפלט (
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: חובה. מציינים אחת משתי האפשרויות הבאות:
- ה-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.
מעקב אחרי אימון
כדי לראות את יומני האימון:
במסוף Google Cloud , בקטע Vertex AI, עוברים לדף Training.
לוחצים על שם המשרה כדי לעבור לדף המשרה המותאמת אישית.
לוחצים על הצגת יומנים.
אפשר גם להשתמש במעטפת אינטראקטיבית כדי לבדוק את קובצי ההכשרה בזמן שצינור ההכשרה פועל.
צפייה במודל שאומן
כשתהליך האימון של צינור הנתונים בלי שרת (serverless) מסתיים, אפשר למצוא את המודל המאומן במסוף Google Cloud , בקטע Vertex AI, בדף Models.
המאמרים הבאים
- Cloud Profiler עוזר לכם לזהות צווארי בקבוק בביצועים של אימון מודלים, כדי לאמן אותם מהר יותר ובעלות נמוכה יותר.
- פריסת המודל בנקודת קצה.
- יוצרים משימת כוונון של היפר-פרמטר.
- איך מתזמנים משימות אימון בלי שרת (serverless) על סמך זמינות המשאבים