יצירת אפליקציית אימון ב-Python לקונטיינר מוכן מראש

כדי לבצע אימון ללא שרתים של פלטפורמת הנציגים של Gemini Enterprise באמצעות קונטיינר מוכן מראש, צריך ליצור הפצה של מקור Python שמכילה את אפליקציית האימון ולהעלות אותה לדלי ב-Cloud Storage שהפרויקט שלכם ב- Google Cloud יכול לגשת אליו.

חלופות ליצירת הפצה של קוד מקור

במדריך הזה נסביר איך ליצור ידנית הפצה של מקור ולהעלות אותה ל-Cloud Storage. לפני שממשיכים לפי המדריך, כדאי לבדוק את תהליכי העבודה החלופיים הבאים, שיכולים להיות נוחים יותר במקרים מסוימים:

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

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

לפני שמכינים את אפליקציית האימון להרצה בענן, צריך לבצע את השלבים הבאים:

  1. מפתחים את אפליקציית האימון באמצעות מסגרת של למידת מכונה (ML) שזמינה באחד מהקונטיינרים המוכנים מראש לאימון של Agent Platform. מוודאים שאפליקציית האימון עומדת בדרישות של קוד האימון.

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

  2. יוצרים קטגוריה של Cloud Storage באותו פרויקט Google Cloud שבו מתכננים להשתמש ב-Agent Platform. תאחסנו את אפליקציית האימון בדלי הזה. (אפשר להשתמש בקטגוריה בGoogle Cloud קטגוריה אחרת, אבל זה דורש הגדרה נוספת שלא נכללת בהיקף המדריך הזה).

    כדי להשיג את הביצועים הטובים ביותר, צריך לוודא שקטגוריה של Cloud Storage נמצאת במיקום שבו אתם מתכננים להשתמש ב-Agent Platform.

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

מבנה האפליקציה

כשמבצעים אימון ללא שרת באמצעות קונטיינר מוכן מראש, צריך לציין את קוד האימון לפי הדרישות הבאות:

  • צריך לספק את הקוד כהפצות מקוריות של Python.

    אם משתמשים ב-Agent Platform API כדי להתחיל אימון בלי שרת (serverless), צריך לציין את הפרטים האלה בשדה packageUris.

  • יוצרים מודול באחת מההפצות של המקור שמשמש כנקודת הכניסה לאימון.

    אם משתמשים ב-Agent Platform API כדי להתחיל אימון בהתאמה אישית, צריך לציין זאת בשדה pythonModule.

אם אתם עומדים בדרישות האלה, אתם יכולים לבנות את בקשת ההדרכה בכל דרך שתרצו. עם זאת, מומלץ ליצור הפצה של קוד מקור יחיד ב-Python על ידי ארגון הקוד במבנה הבא (שנמצא בשימוש לעיתים קרובות בדוגמאות של Agent Platform):

  • משתמשים בספריית פרויקט ראשית שמכילה את הקובץ setup.py. הנחיות לגבי התוכן של הקובץ הזה מופיעות בקטע הבא.

  • בספריית הפרויקט הראשית, יוצרים ספריית משנה בשם trainer/ שמשמשת כחבילה הראשית של קוד האימון.

  • בתוך trainer/, יוצרים מודול בשם task.py שמשמש כנקודת הכניסה לקוד האימון.

  • כדי לתמוך ב-trainer/task.py, יוצרים מודולים נוספים של Python שרוצים בחבילה trainer/, ויוצרים ספריות משנה נוספות עם הקוד הנוסף שרוצים בספריית הפרויקט הראשית.

  • יוצרים __init__.py קובץ בכל תיקיית משנה כדי להפוך אותה לחבילה.

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

יצירת הפצה של מקור

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

  1. יוצרים קובץ setup.py שמסביר ל-Setuptools איך ליצור את הפצת המקור. מינוי בסיסי ל-setup.py כולל את התכונות הבאות:

    • ייבוא דפי חשבון של setuptools.find_packages ו-setuptools.setup.

    • שיחה אל setuptools.setup עם הפרמטרים הבאים (לפחות):

      • name מוגדר לשם של הפצת המקור.

      • version set 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.'
    )
    
  2. מריצים את הפקודה הבאה כדי ליצור הפצה של קוד המקור, dist/trainer-0.1.tar.gz:

    python setup.py sdist --formats=gztar
    

יחסי תלות באפליקציית Python

תלויות הן חבילות שimport בקוד. יכול להיות שהאפליקציה שלכם תלויה בהרבה רכיבים שנדרשים כדי שהיא תפעל.

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

יש 2 סוגים של תלויות שאולי תצטרכו להוסיף:

  • תלויות Standard, שהן חבילות הפצה נפוצות שזמינות ב-PyPI
  • תלויות בהתאמה אישית, כמו חבילות שפיתחתם בעצמכם או חבילות פנימיות לארגון.

בקטעים הבאים מוסבר איך עושים זאת לכל סוג.

יחסי תלות רגילים (PyPI)

אפשר לציין את יחסי התלות הרגילים של האפליקציה כחלק מהסקריפט setup.py שלה. Agent Platform משתמשת ב-pip כדי להתקין את אפליקציית האימון על הרפליקות שהיא מקצה לעבודה שלכם. הפקודה pip install מחפשת יחסי תלות שהוגדרו ומתקינה אותם.

בדוגמה הבאה מוצג setup.py דומה לזה שמופיע בקטע הקודם. עם זאת, setup.py הזה אומר ל-Agent Platform להתקין את 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. Agent Platform משתמשת ב-pip install כדי להתקין יחסי תלות מותאמים אישית, ולכן יכולים להיות להם יחסי תלות סטנדרטיים משלהם בסקריפטים של setup.py.

כל URI שאתם כוללים הוא הנתיב להפצת מקור, בפורמט של קובץ tar ‏ (.tar.gz) או wheel ‏ (.whl). Agent Platform מתקינה כל תלות באמצעות pip install בכל רפליקה שהיא מקצה למשימת האימון.

אם אתם משתמשים ב-Agent Platform API כדי להתחיל אימון בלי שרת (serverless), צריך לציין את כתובות ה-URI של Cloud Storage לתלויות האלה יחד עם אפליקציית האימון בשדה packageUris.

מודולים של Python

האפליקציה יכולה להכיל כמה מודולים (קבצי Python). צריך לזהות את המודול שמכיל את נקודת הכניסה לאפליקציה. שירות האימון מפעיל את המודול הזה על ידי הפעלת Python, בדיוק כמו שהייתם מפעילים אותו באופן מקומי.

לדוגמה, אם פועלים לפי המבנה המומלץ מהקטע הקודם, המודול הראשי הוא task.py. מכיוון שהיא נמצאת בחבילת ייבוא (ספרייה עם קובץ __init__.py) בשם trainer, השם מוגדר במלואו של המודול הזה הוא trainer.task. לכן, אם משתמשים ב-Agent Platform 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.

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