חלופות ליצירת הפצה של מקור
במדריך הזה מוסבר איך ליצור ידנית הפצה של מקור ולהעלות אותה ל-Cloud Storage. לפני שממשיכים לפי ההנחיות, כדאי לבדוק את תהליכי העבודה החלופיים הבאים, שיכולים להיות נוחים יותר במקרים מסוימים:
אם אתם רוצים לאמן את המודל באמצעות קוד במחשב המקומי שלכם ולצמצם ככל האפשר את כמות העבודה הידנית באריזה, מומלץ להשתמש בתכונת האריזה האוטומטית של Google Cloud CLI. התכונה הזו מאפשרת ליצור קובץ אימג' של קונטיינר Docker, להעביר אותו בדחיפה ל-Artifact Registry וליצור
CustomJobמשאב על סמך קובץ האימג' של הקונטיינר, והכול באמצעות פקודה אחת. מידע נוסף זמין במדריך ליצירתCustomJob.כדי להשתמש באריזה אוטומטית, צריך להתקין את Docker במחשב המקומי. האפשרות הזו מאפשרת ליצור רק
CustomJob, ולאTrainingPipelineאוHyperparameterTuningJob. מידע על ההבדלים בין משאבי אימון בלי שרת (serverless)כדי להתאים אישית עוד יותר את קובץ האימג' של הקונטיינר ולהריץ את הקוד בקונטיינר באופן מקומי לפני שמריצים אותו ב-Vertex AI, אפשר להשתמש בפקודה
local-runשל gcloud CLI כדי להריץ את הקוד בקונטיינר באופן מקומי. אחר כך אפשר להעביר את קובץ האימג' ל-Artifact Registry באופן ידני.כדי להשתמש בפקודה
local-run, צריך להתקין את Docker במחשב המקומי.אם אתם יכולים לכתוב את קוד האימון בסקריפט Python יחיד, אתם יכולים להשתמש בVertex AI SDK ל-Python, במחלקה
CustomJobכדי ליצור משימה בהתאמה אישית או במחלקהCustomTrainingJobכדי ליצורTrainingPipelineבהתאמה אישית. קוד האימון שלכם נארז אוטומטית כהפצת מקור ומועלה ל-Cloud Storage.כדי לקבל את הגמישות המקסימלית, אתם יכולים ליצור ידנית תמונה מותאמת אישית של מאגר תגים ולהעלות אותה ל-Artifact Registry.
אם אף אחת מהאפשרויות הקודמות לא מתאימה לתרחיש לדוגמה שלכם, או אם אתם מעדיפים לארוז ידנית את אפליקציית האימון שלכם כהפצה של קוד המקור, אתם יכולים להמשיך לקרוא את שאר המדריך הזה.
לפני שמתחילים
לפני שמכינים את אפליקציית האימון להרצה בענן, צריך לבצע את השלבים הבאים:
מפתחים את אפליקציית האימון באמצעות מסגרת למידת מכונה (ML) שזמינה באחד מהקונטיינרים המוכנים מראש לאימון של Vertex AI. מוודאים שאפליקציית האימון עומדת בדרישות של קוד האימון.
אם אתם כותבים את אפליקציית האימון מאפס, מומלץ לארגן את הקוד לפי מבנה האפליקציה שמתואר בקטע הבא של המסמך הזה.
יוצרים קטגוריה של Cloud Storage באותו Google Cloud פרויקט שבו מתכננים להשתמש ב-Vertex AI. תאחסנו את אפליקציית האימון בדלי הזה. (אפשר להשתמש בקטגוריה בGoogle Cloud קטגוריה אחרת, אבל זה דורש הגדרה נוספת שלא נכללת במדריך הזה).
כדי להשיג את הביצועים הטובים ביותר, צריך לוודא שקטגוריית Cloud Storage נמצאת במיקום שבו אתם מתכננים להשתמש ב-Vertex AI.
צריך לדעת את כל ספריות Python שהאפליקציה להדרכה תלויה בהן, בין אם מדובר בתלויות מותאמות אישית או בתלויות שזמינות בחינם דרך PyPI.
מבנה האפליקציה
כשמבצעים אימון בלי שרת (serverless) באמצעות קונטיינר מוכן מראש, צריך לציין את קוד האימון בהתאם לדרישות הבאות:
צריך לספק את הקוד כהפצות של מקורות Python.
אם משתמשים ב-Vertex AI API כדי להתחיל אימון בלי שרתים, צריך לציין את הפרטים האלה בשדה
packageUris.יוצרים מודול באחת מההפצות האלה של קוד המקור שמשמש כנקודת הכניסה לאימון.
אם משתמשים ב-Vertex AI API כדי להתחיל אימון מותאם אישית, צריך לציין זאת בשדה
pythonModule.
כל עוד אתם עומדים בדרישות האלה, אתם יכולים לבנות את בקשת ההדרכה בכל דרך שתרצו. עם זאת, מומלץ ליצור הפצה יחידה של קוד מקור ב-Python על ידי ארגון הקוד במבנה הבא (שנמצא בשימוש לעיתים קרובות בדוגמאות של Vertex AI):
משתמשים בספריית פרויקט ראשית שמכילה את הקובץ
setup.py. בקטע הבא מוסבר מה צריך להיות בקובץ הזה.בספריית הפרויקט הראשית, יוצרים ספריית משנה בשם
trainer/שמשמשת כחבילה הראשית של קוד האימון.ב-
trainer/, יוצרים מודול בשםtask.pyשמשמש כנקודת הכניסה לקוד האימון.כדי לתמוך ב-
trainer/task.py, יוצרים מודולים נוספים של Python שרוצים בחבילהtrainer/, ויוצרים ספריות משנה נוספות עם הקוד הנוסף שרוצים בספריית הפרויקט הראשית.יוצרים קובץ
__init__.pyבכל תיקיית משנה כדי להפוך אותה לחבילה.
בהמשך המדריך הזה אנחנו יוצאים מנקודת הנחה שהקוד שלכם מאורגן לפי המבנה הזה.
יצירת הפצה של מקור
יצירת הפצות מקור של Python היא נושא רחב שחורג ברובו מהיקף התיעוד הזה. כדי להקל עליכם, בחלק הזה מוסבר איך משתמשים ב-Setuptools כדי ליצור הפצה של קוד מקור לשימוש עם Vertex AI. יש ספריות אחרות שאפשר להשתמש בהן כדי לבצע את אותה פעולה.
יוצרים קובץ
setup.pyשמסביר ל-Setuptools איך ליצור את הפצת המקור. מינוי בסיסי ל-setup.pyכולל את התכונות הבאות:ייבוא דפי חשבון של
setuptools.find_packagesו-setuptools.setup.שיחה אל
setuptools.setupעם הפרמטרים הבאים (לפחות):
nameמוגדר לשם הפצת המקור.
versionset to the version number of this build of your source distribution.
install_requiresמוגדר לרשימה של רכיבים תלויים שנדרשים לאפליקציה, עם דרישות גרסה, כמו'docutils>=0.3'.packagesהוגדר לערךfind_packages(). ההגדרה הזו אומרת ל-Setuptools לכלול את כל תיקיות המשנה של התיקייה הראשית שמכילות קובץ__init__.pyכחבילות.include_package_dataהוגדר לערךTrue.
בדוגמה הבאה מוצג קובץ
setup.pyבסיסי לאפליקציית אימון:from setuptools import find_packages from setuptools import setup setup( name='trainer', version='0.1', packages=find_packages(), include_package_data=True, description='My training application.' )מריצים את הפקודה הבאה כדי ליצור הפצה של מקור,
dist/trainer-0.1.tar.gz:python setup.py sdist --formats=gztar
יחסי תלות באפליקציית Python
תלויות הן חבילות שimport בקוד. יכול להיות שהאפליקציה שלך תלויה בהרבה רכיבים שנדרשים כדי שהיא תפעל.
לכל רפליקה במשימת האימון ללא שרת, הקוד שלכם מורץ בקונטיינר עם הרבה יחסי תלות נפוצים של Python שכבר מותקנים. בודקים את יחסי התלות שכלולים בקונטיינר מוכן מראש שמתכננים להשתמש בו לאימון, ורושמים את יחסי התלות שלא מותקנים כבר. צריך לבצע את השלבים הבאים רק לגבי תלויות שלא מותקנות כבר במאגר המובנה מראש.
יש 2 סוגים של תלויות שאולי תצטרכו להוסיף:
- תלויות רגילות, שהן חבילות הפצה נפוצות שזמינות ב-PyPI
- תלויות בהתאמה אישית, כמו חבילות שפיתחתם בעצמכם או חבילות פנימיות לארגון.
בקטעים הבאים מתואר התהליך לכל סוג.
יחסי תלות רגילים (PyPI)
אפשר לציין את יחסי התלות הרגילים של האפליקציה כחלק מהסקריפט setup.py שלה. Vertex AI משתמש ב-pip כדי להתקין את אפליקציית האימון על העותקים שהוא מקצה למשימה. הפקודה
pip install
מחפשת יחסי תלות שהוגדרו ומתקינה אותם.
בדוגמה הבאה מוצג setup.py דומה לזה שמופיע בקטע הקודם. עם זאת, התג setup.py אומר ל-Vertex AI להתקין את some_PyPI_package כשהוא מתקין את אפליקציית האימון:
from setuptools import find_packages
from setuptools import setup
REQUIRED_PACKAGES = ['some_PyPI_package>=1.0']
setup(
name='trainer',
version='0.1',
install_requires=REQUIRED_PACKAGES,
packages=find_packages(),
include_package_data=True,
description='My training application.'
)
יחסי תלות מותאמים אישית
אתם יכולים לציין את התלות המותאמת אישית של האפליקציה על ידי העברת הנתיבים שלה כחלק מהגדרת העבודה. צריך את ה-URI של הפצת המקור של כל תלות. התלות המותאמת אישית צריכה להיות במיקום ב-Cloud Storage. Vertex AI משתמש ב-pip install כדי להתקין תלות מותאמת אישית, כך שסקריפטים של setup.py יכולים לכלול תלות סטנדרטית משלהם.
כל URI שאתם כוללים הוא הנתיב להפצת מקור, בפורמט של קובץ tar (.tar.gz) או של wheel (.whl). מערכת Vertex AI מתקינה כל תלות באמצעות pip install בכל רפליקה שהיא מקצה למשימת האימון.
אם משתמשים ב-Vertex AI API כדי להתחיל אימון בלי שרת (serverless), צריך לציין את כתובות ה-URI של Cloud Storage לתלויות האלה יחד עם אפליקציית האימון בשדה packageUris.
מודולים של Python
האפליקציה יכולה להכיל כמה מודולים (קבצי Python). צריך לזהות את המודול שמכיל את נקודת הכניסה לאפליקציה. שירות האימון מפעיל את המודול הזה על ידי הפעלת Python, בדיוק כמו שהייתם מפעילים אותו באופן מקומי.
לדוגמה, אם פועלים לפי המבנה המומלץ מהקטע הקודם, המודול הראשי הוא task.py. מכיוון שהיא נמצאת בחבילת ייבוא (ספרייה עם קובץ __init__.py) בשם trainer, השם המוגדר במלואו של המודול הזה הוא trainer.task. לכן, אם משתמשים ב-Vertex AI API כדי להתחיל אימון מותאם אישית, צריך להגדיר את השדה moduleName לערך trainer.task.
מידע נוסף על מודולים זמין במדריך Python בנושא חבילות.
העלאת הפצת המקור ל-Cloud Storage
אפשר להשתמש ב-CLI של gcloud כדי להעלות את חבילת ההפצה של המקור ואת כל התלות המותאמת אישית לקטגוריה של Cloud Storage. לדוגמה:
gcloud storage cp dist/trainer-0.1.tar.gz CLOUD_STORAGE_DIRECTORY
מחליפים את CLOUD_STORAGE_DIRECTORY ב-URI (מתחיל ב-gs:// ומסתיים ב-/) של ספרייה ב-Cloud Storage בקטגוריה שלפרויקטGoogle Cloud יש גישה אליה.
מידע על דרכים נוספות להעלאת הפצת המקור אל Cloud Storage מופיע במאמרי עזרה של Cloud Storage, במאמר העלאת אובייקטים.
המאמרים הבאים
- מידע נוסף על דרישות נוספות של קוד אימון לאימון ללא שרת.
- איך יוצרים משימת אימון בלי שרת (serverless) או צינור אימון בלי שרת (serverless) שמשתמש באפליקציית האימון שלכם.