מגדירים את הסביבה

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

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

  1. נכנסים לחשבון Google Cloud . אנחנו ממליצים למשתמשים חדשים ב- Google Cloud ליצור חשבון כדי שיוכלו להעריך את הביצועים של המוצרים שלנו בתרחישים מהעולם האמיתי. לקוחות חדשים מקבלים בחינם גם קרדיט בשווי 300$ להרצה, לבדיקה ולפריסה של עומסי העבודה.
  2. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Roles required to select or create a project

    • Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
    • Create a project: To create a project, you need the Project Creator role (roles/resourcemanager.projectCreator), which contains the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  3. Verify that billing is enabled for your Google Cloud project.

  4. Enable the Agent Platform API, if it is not already enabled.

    Roles required to enable APIs

    To enable APIs, you need the serviceusage.services.enable permission. If you created the project, then you likely already have this permission through the Owner role (roles/owner). Otherwise, you can get this permission through the Service Usage Admin role (roles/serviceusage.serviceUsageAdmin). Learn how to grant roles.

    Enable the API

  5. Install the Google Cloud CLI.

  6. If you're using an external identity provider (IdP), you must first sign in to the gcloud CLI with your federated identity.

  7. To initialize the gcloud CLI, run the following command:

    gcloud init
  8. אחרי שתאתחלו את ה-CLI של gcloud, עדכנו אותו והתקינו את הרכיבים הנדרשים:

    gcloud components update
    gcloud components install beta
  9. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Roles required to select or create a project

    • Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
    • Create a project: To create a project, you need the Project Creator role (roles/resourcemanager.projectCreator), which contains the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  10. Verify that billing is enabled for your Google Cloud project.

  11. Enable the Agent Platform API, if it is not already enabled.

    Roles required to enable APIs

    To enable APIs, you need the serviceusage.services.enable permission. If you created the project, then you likely already have this permission through the Owner role (roles/owner). Otherwise, you can get this permission through the Service Usage Admin role (roles/serviceusage.serviceUsageAdmin). Learn how to grant roles.

    Enable the API

  12. Install the Google Cloud CLI.

  13. If you're using an external identity provider (IdP), you must first sign in to the gcloud CLI with your federated identity.

  14. To initialize the gcloud CLI, run the following command:

    gcloud init
  15. אחרי שתאתחלו את ה-CLI של gcloud, עדכנו אותו והתקינו את הרכיבים הנדרשים:

    gcloud components update
    gcloud components install beta
  16. כדי להקצות לכל המשתמשים ב-Agent Platform Neural Architecture Search את התפקיד משתמש ב-Agent Platform (roles/aiplatform.user), פנו לאדמין של הפרויקט.
  17. מתקינים את Docker.

    אם אתם משתמשים במערכת הפעלה שמבוססת על Linux, כמו Ubuntu או Debian, הוסיפו את שם המשתמש שלכם לקבוצה docker כדי שתוכלו להריץ את Docker בלי להשתמש ב-sudo:

    sudo usermod -a -G docker ${USER}
    

    יכול להיות שתצטרכו להפעיל מחדש את המערכת אחרי שתוסיפו את עצמכם לקבוצה docker.

  18. פותחים את Docker. כדי לוודא ש-Docker פועל, מריצים את הפקודה הבאה של Docker, שמחזירה את השעה והתאריך הנוכחיים:
    docker run busybox date
  19. משתמשים ב-gcloud ככלי עזר של מסמך אימות ל-Docker:
    gcloud auth configure-docker
  20. (אופציונלי) אם רוצים להריץ את הקונטיינר באמצעות GPU באופן מקומי, מתקינים את nvidia-docker.

הגדרת קטגוריה של Cloud Storage

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

  1. נותנים שם לקטגוריה החדשה. השם חייב להיות ייחודי בכל הקטגוריות ב-Cloud Storage.

    BUCKET_NAME="YOUR_BUCKET_NAME"

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

    PROJECT_ID="YOUR_PROJECT_ID"
    BUCKET_NAME="${PROJECT_ID}-vertexai-nas-$(uuidgen)"
  2. בודקים את שם הקטגוריה שיצרתם.

    echo $BUCKET_NAME
  3. בוחרים אזור לקטגוריה ומגדירים משתנה סביבה של REGION.

    השתמשו באותו אזור שבו אתם מתכננים להריץ משימות של Agent Platform Neural Architecture Search.

    לדוגמה, הקוד הבא יוצר את REGION ומגדיר אותו ל-us-central1:

    REGION=us-central1
  4. יוצרים את הקטגוריה החדשה:

    gcloud storage buckets create gs://$BUCKET_NAME --location=$REGION

שליחת בקשה להגדלת מכסת המכשירים בפרויקט

במדריכים נעשה שימוש בכחמש מכונות CPU, והם לא דורשים מכסה נוספת. אחרי שתסיימו את המדריכים, תוכלו להריץ את המשימה של Agent Platform Neural Architecture Search.

במשימה "חיפוש ארכיטקטורה נוירונית" ב-Agent Platform, קבוצה של מודלים מאומנת במקביל. כל מודל מאומן תואם לניסוי. כדי להעריך את כמות המעבדים (CPU) והמעבדים הגרפיים (GPU) שנדרשים למשימת חיפוש, קראו את הקטע בנושא הגדרת number-of-parallel-trials. לדוגמה, אם בכל ניסוי משתמשים ב-2 מעבדי GPU מסוג T4 ומגדירים את number-of-parallel-trials ל-20, צריך מכסה כוללת של 40 מעבדי GPU מסוג T4 למשימת החיפוש. בנוסף, אם כל ניסוי משתמש במעבד (CPU) של highmem-16, צריך 16 יחידות מעבד לכל ניסוי, כלומר 320 יחידות מעבד ל-20 ניסויים מקבילים. עם זאת, אנחנו מבקשים מכסה מינימלית של 10 ניסויים מקבילים (או מכסה של 20 יחידות GPU). מכסת ברירת המחדל הראשונית של יחידות GPU משתנה בהתאם לאזור ולסוג ה-GPU, ובדרך כלל היא 0, 6 או 12 ל-Tesla_T4 ו-0 או 6 ל-Tesla_V100. מכסת ברירת המחדל הראשונית למעבדי CPU משתנה בהתאם לאזור, ובדרך כלל היא 20, 450 או 2,200.

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

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

Exception: Starting job failed: {'code': 429, 'message': 'The following quota metrics exceed quota limits: aiplatform.googleapis.com/custom_model_training_cpus,aiplatform.googleapis.com/custom_model_training_nvidia_v100_gpus,aiplatform.googleapis.com/custom_model_training_pd_ssd', 'status': 'RESOURCE_EXHAUSTED', 'details': [{'@type': 'type.googleapis.com/google.rpc.DebugInfo', 'detail': '[ORIGINAL ERROR] generic::resource_exhausted: com.google.cloud.ai.platform.common.errors.AiPlatformException: code=RESOURCE_EXHAUSTED, message=The following quota metrics exceed quota limits: aiplatform.googleapis.com/custom_model_training_cpus,aiplatform.googleapis.com/custom_model_training_nvidia_v100_gpus,aiplatform.googleapis.com/custom_model_training_pd_ssd, cause=null [google.rpc.error_details_ext] { code: 8 message: "The following quota metrics exceed quota limits: aiplatform.googleapis.com/custom_model_training_cpus,aiplatform.googleapis.com/custom_model_training_nvidia_v100_gpus,aiplatform.googleapis.com/custom_model_training_pd_ssd" }'}]}

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

אפשר לבקש מכסה נוספת של מכשירים בדף Quotas. אפשר להפעיל מסננים כדי למצוא את המכסה שרוצים לערוך: סינון המכסות

  1. בשדה Service, בוחרים באפשרות Agent Platform API.
  2. בשדה region, בוחרים את האזור שלפיו רוצים לסנן.
  3. ב-Quota, בוחרים שם של מאיץ עם הקידומת Custom model training.
    • ל-GPU מסוג V100, הערך הוא Custom model training Nvidia V100 GPUs per region.
    • למעבדים, הערך יכול להיות Custom model training CPUs for N1/E2 machine types per region. המספר של המעבד מייצג את יחידת המעבדים. אם רוצים 8 מעבדי highmem-16, צריך לבקש מכסה של 8 * 16 = 128 יחידות מעבד. מזינים גם את הערך הרצוי של region.

אחרי שיוצרים בקשה להגדלת המכסה, מקבלים Case number ואימיילים עם עדכונים לגבי סטטוס הבקשה. אישור של בקשה להגדלת מכסת ה-GPU עשוי להימשך בין שניים לחמישה ימי עסקים. באופן כללי, בקשה למכסה של כ-20 עד 30 יחידות GPU אמורה לקבל אישור מהר יותר, תוך יומיים או שלושה, ואישור של כ-100 יחידות GPU עשוי להימשך חמישה ימי עסקים. אישור של מכסת מעבד (CPU) יכול להימשך עד שני ימי עסקים. עם זאת, אם יש באזור מסוים מחסור גדול בסוג מסוים של GPU, אין ערובה לכך שהבקשה תאושר, גם אם היא קטנה. במקרה כזה, יכול להיות שתתבקשו לבחור אזור אחר או סוג אחר של GPU. באופן כללי, קל יותר להשיג מעבדי GPU מסוג T4 מאשר מעבדי GPU מסוג V100. מעבדי GPU מסוג T4 דורשים יותר זמן שעון, אבל הם חסכוניים יותר.

איך שולחים בקשה לשינוי המכסות

הגדרת Artifact Registry לפרויקט

צריך להגדיר מאגר פריטי מידע שנוצרו בתהליך הפיתוח (Artifact Registry) לפרויקט ולאזור שבהם אתם מעבירים את קובצי האימג' של Docker.

נכנסים לדף Artifact Registry של הפרויקט. אם הוא עדיין לא מופעל, קודם צריך להפעיל את Artifact Registry API בפרויקט:

הפעלת Artifact Registry

אחרי ההפעלה, לוחצים על CREATE REPOSITORY כדי ליצור מאגר חדש:

יצירת מאגר ב-Artifact Registry

בוחרים את nas בשדה Name, את Docker בשדה Format ואת Region בשדה Location type. בשדה Region, בוחרים את המיקום שבו מריצים את המשימות ולוחצים על CREATE.

הגדרת Artifact Registry

הפעולה הזו אמורה ליצור את מאגר Docker הרצוי, כמו שמוצג כאן:

נוצר מאגר Artifact Registry

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

הגדרת הסביבה המקומית

אתם יכולים להריץ את השלבים האלה באמצעות מעטפת Bash בסביבה המקומית שלכם, או להריץ אותם מ-Notebook במכונה של Workbench ב-Gemini Enterprise Agent Platform.

  1. מגדירים משתני סביבה בסיסיים:

    gcloud config set project PROJECT_ID
    gcloud auth login
    gcloud auth application-default login
    
  2. מגדירים אימות של Docker למאגר פריטי המידע שנוצרו:

    # example: REGION=europe-west4
    gcloud auth configure-docker REGION-docker.pkg.dev
    
  3. (אופציונלי) מגדירים סביבה וירטואלית של Python 3. מומלץ להשתמש ב-Python 3, אבל לא חובה:

    sudo apt install python3-pip && \
    pip3 install virtualenv && \
    python3 -m venv --system-site-packages ~/./nas_venv && \
    source ~/./nas_venv/bin/activate
    
  4. מתקינים ספריות נוספות:

    pip install google-cloud-storage==2.6.0
    pip install pyglove==0.1.0
    

הגדרה של חשבון שירות

לפני שמריצים משימות NAS, צריך להגדיר חשבון שירות. אתם יכולים להריץ את השלבים האלה באמצעות מעטפת Bash בסביבה המקומית שלכם, או להריץ אותם מ-Notebook במכונה של Gemini Enterprise Agent Platform Workbench.

  1. יוצרים חשבון שירות:

    gcloud iam service-accounts create NAME \
        --description=DESCRIPTION \
        --display-name=DISPLAY_NAME
    
  2. מקצים לחשבון השירות את התפקידים roles/aiplatform.user ו-roles/storage.objectAdmin:

    gcloud projects add-iam-policy-binding PROJECT_ID \
        --member=serviceAccount:NAME@PROJECT_ID.iam.gserviceaccount.com \
        --role=roles/aiplatform.user
    gcloud projects add-iam-policy-binding PROJECT_ID \
        --member=serviceAccount:NAME@PROJECT_ID.iam.gserviceaccount.com \
        --role=roles/storage.objectAdmin
    

לדוגמה, הפקודות הבאות יוצרות חשבון שירות בשם my-nas-sa בפרויקט my-nas-project עם התפקידים roles/aiplatform.user ו-roles/storage.objectAdmin:

  gcloud iam service-accounts create my-nas-sa \
      --description="Service account for NAS" \
      --display-name="NAS service account"
  gcloud projects add-iam-policy-binding my-nas-project \
      --member=serviceAccount:my-nas-sa@my-nas-project.iam.gserviceaccount.com \
      --role=roles/aiplatform.user
  gcloud projects add-iam-policy-binding my-nas-project \
      --member=serviceAccount:my-nas-sa@my-nas-project.iam.gserviceaccount.com \
      --role=roles/storage.objectAdmin

הורדת הקוד

כדי להתחיל ניסוי של Agent Platform Neural Architecture Search, צריך להוריד את קוד ה-Python לדוגמה, שכולל מאמנים מובְנים מראש, הגדרות של מרחב חיפוש וספריות לקוח משויכות.

כדי להוריד את קוד המקור, מבצעים את השלבים הבאים.

  1. פותחים טרמינל Shell חדש.

  2. מריצים את הפקודה Git clone:

    git clone https://github.com/google/vertex-ai-nas.git