יצירת אשכול Slurm בניהול עצמי עם מכונת A4 VM

בדף הזה מוסבר איך ליצור ולפרוס במהירות אשכול Slurm שעבר אופטימיזציה ל-AI, באמצעות סוגי מכונות A4 שעברו אופטימיזציה למאיצים, עם ה-CLI של gcloud ו-Cluster Toolkit.

סוגי מכונות עם אופטימיזציה למאיצים מסוג A4 כוללים מעבדי NVIDIA B200 GPU, והם תוכננו במיוחד לחישובי AI אינטנסיביים כדי לעזור לאשכול Slurm לטפל ביעילות באימון מודלים ובהסקת מסקנות בקנה מידה גדול. למידע נוסף על סוגי מכונות עם אופטימיזציה למאיצים מסוג A4 ב- Google Cloud, קראו את המאמר סוגי מכונות עם GPU.

.

אפשר גם להשתמש ב-Cluster Director כדי ליצור אשכול Slurm שמבוסס על A4. ‫Cluster Director הוא שירות מנוהל שמפשט את פריסת האשכולות ומבצע אותה באופן אוטומטי, וכך מפחית את התקורה התפעולית. מידע נוסף זמין במאמר יצירת אשכול Slurm בניהול מלא עם שתי מכונות וירטואליות מסוג A4.

סקירה כללית של המדריך

במדריך הזה מוסבר איך להגדיר אשכול Slurm שמותאם ל-AI באמצעות סוגי מכונות A4 שמותאמים למאיצים. באופן ספציפי, מגדירים אשכול עם מכונות וירטואליות של Compute Engine, יוצרים קטגוריה של Cloud Storage לאחסון המודולים הנדרשים של Terraform, ומגדירים מכונה של Filestore כדי להקצות את אשכול Slurm. כדי להשלים את השלבים במדריך הזה, צריך לבצע את התהליך הבא:

  1. מגדירים את הפרויקט ב- Google Cloud עם ההרשאות הנדרשות למדריך הזה ואת משתני הסביבה לשמירת המכונה.
  2. יצירת קטגוריה של Cloud Storage.
  3. מגדירים את משתני הסביבה של האחסון.
  4. מגדירים את Cluster Toolkit.
  5. עוברים לספרייה של Cluster Toolkit.
  6. יוצרים קובץ YAML לפריסת Slurm.
  7. הקצאת אשכול Slurm באמצעות תוכנית.
  8. מתחברים לאשכול Slurm.

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

  1. משריינים גוש קיבולת או יוצרים הזמנה במצב תזמון למכונה אחת מסוג a4-highgpu-8g.
  2. מוודאים שיש לכם מספיק מכסה ב-Managed Lustre (מכסה של לפחות 36,000GiB של נפח אחסון ומכסה של 18GBps של קצב העברת נתונים) כדי להקצות את המשאבים של התוכנית.

  3. מוודאים שהחיוב מופעל בפרויקט ב- Google Cloud .

  4. מפעילים את ממשקי ה-API של Compute Engine,‏ Managed Lustre,‏ Service Networking,‏ Cloud Storage,‏ Service Usage ו-Resource Manager:

    הפעלת ממשקי ה-API

התפקידים הנדרשים

כדי לקבל את ההרשאות שדרושות לפריסת אשכול Slurm, צריך לבקש מהאדמין להקצות לכם את התפקידים הבאים ב-IAM:

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

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

עלויות

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

  • כדי להעריך את עלות ההגדרה של המדריך הזה, השתמשו במפרטים הבאים:

    • ‫Managed Lustre capacity: ‏36,000GiB ברמת הביצועים של 500MBps ל-TiB. התמחור של Managed Lustre תלוי בנפח האחסון וברמת הביצועים שהוגדרה.
    • ‫דיסק מתמיד סטנדרטי: 50GB pd-standard לצומת ההתחברות של Slurm.
    • דיסקים מתמידים שמבוססים על ביצועים (SSD): ‏50GB‏ pd-ssd לבקר של Slurm.
    • מכונה של Compute Engine: ‏a4-highgpu-8g אחד.

הפעלת Cloud Shell

במדריך הזה משתמשים ב-Cloud Shell, שהיא סביבת מעטפת לניהול משאבים שמתארחים ב- Google Cloud.

ב-Cloud Shell מותקן מראש Google Cloud CLI. ה-CLI של gcloud מספק את ממשק שורת הפקודה הראשי ל- Google Cloud. מפעילים את Cloud Shell:

  1. נכנסים למסוף Google Cloud .

    Google Cloud console

  2. לוחצים על Activate Cloud Shell הסמל של Cloud Shell בפינה הימנית העליונה של המסוף.

סשן של Cloud Shell מתחיל ומופיעה הנחיה של שורת הפקודה. אתם משתמשים במעטפת הזו כדי להריץ פקודות של gcloud ושל Cluster Toolkit.

הגדרת משתנים של קיבולת הזמנת מכונות

ב-Cloud Shell, מגדירים את משתני הסביבה הבאים של קיבולת ההזמנה. משתני הסביבה האלה מגדירים ערכים זמניים לשמירת מקום (פלייסהולדרים) כדי להגדיר את הפרויקט כך שתהיה לו גישה למכונת a4-highgpu-8g השמורה.

export A4_RESERVATION_PROJECT_ID=A4_RESERVATION_PROJECT_ID
export A4_RESERVATION_NAME=A4_RESERVATION_NAME
export A4_DEPLOYMENT_NAME=A4_DEPLOYMENT_NAME
export A4_REGION=A4_REGION
export A4_ZONE=A4_ZONE
export A4_DEPLOYMENT_FILE_NAME=A4_DEPLOYMENT_FILE_NAME

מחליפים את מה שכתוב בשדות הבאים:

  • ‫A4_RESERVATION_PROJECT_ID: Google Cloudמזהה הפרויקט שקיבל את בלוק ההזמנה של סוג המכונה A4.
  • ‫A4_RESERVATION_NAME: השם של הקצאת ה-GPU שמשמשת בפרויקט. לדוגמה, a4high-exr.
  • ‫A4_DEPLOYMENT_NAME: שם ייחודי לפריסת אשכול Slurm. לדוגמה, my-slurm-cluster-deployment.
  • ‫A4_REGION: האזור שבו פועל בלוק המכונות השמורות מסוג A4. לדוגמה, us-central1.
  • ‫A4_ZONE: האזור שבו נמצאות המכונות השמורות. המחרוזת הזו חייבת להכיל גם את האזור וגם את התחום. לדוגמה, us-central1-a.
  • ‫A4_DEPLOYMENT_FILE_NAME: שם ייחודי לקובץ ה-YAML של תוכנית Slurm. אם אתם מבצעים את המדריך הזה יותר מפעם אחת, בחרו שם פריסה ייחודי בכל פעם.

מעבר לפרויקט שאושר ל-A4

עוברים לפרויקט Google Cloud שבו נמצא בלוק המקום השמור שאושר למכונה מסוג A4:

gcloud config set project ${A4_RESERVATION_PROJECT_ID}

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

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

כדי לאחסן את קובץ תמונת המצב, יוצרים קטגוריה של Cloud Storage עם ניהול גרסאות מופעל מ-Cloud Shell:

gcloud storage buckets create gs://${BUCKET_NAME} \
    --project=${A4_RESERVATION_PROJECT_ID} \
    --default-storage-class=STANDARD \
    --location=${BUCKET_LOCATION} \
    --uniform-bucket-level-access

gcloud storage buckets update gs://${BUCKET_NAME} --versioning

מחליפים את מה שכתוב בשדות הבאים:

  • ‫BUCKET_NAME: השם של הקטגוריה החדשה ב-Cloud Storage, שצריך לעמוד בדרישות למתן שמות לקטגוריות.
  • ‫A4_RESERVATION_PROJECT_ID: Google Cloudמזהה הפרויקט שקיבל את בלוק ההזמנה של סוג המכונה A4.
  • ‫BUCKET_LOCATION: האזור ב- Google Cloudשבו רוצים ליצור את הקטגוריה של Cloud Storage, למשל us-central1. ‫Terraform שומר את קובץ תמונת המצב במיקום הזה.

הגדרת משתנים של נפח אחסון

ב-Cloud Shell, יוצרים את משתני הסביבה של הקטגוריה שיצרתם בשלב הקודם.

export BUCKET_NAME=BUCKET_NAME
export BUCKET_LOCATION=BUCKET_LOCATION

מחליפים את מה שכתוב בשדות הבאים:

  • ‫BUCKET_NAME: שם הקטגוריה.
  • ‫BUCKET_LOCATION: האזור שבו נמצאת הקטגוריה.

הגדרת Cluster Toolkit

כדי ליצור אשכול Slurm בפרויקט ב- Google Cloud , אתם יכולים להשתמש ב-Cluster Toolkit כדי לטפל בפריסה ובהקצאה של האשכול. ‫Cluster Toolkit היא תוכנת קוד פתוח של Google Cloudשנועדה לפשט את תהליך הפריסה של עומסי עבודה ב- Google Cloud.

כך מגדירים את Cluster Toolkit:

התקנת Cluster Toolkit

כדי להתקין את Cluster Toolkit, מורידים ומחלצים את חבילת הקבצים הבינאריים שנוצרה מראש לפלטפורמה שלכם. אפשר להשתמש גם בארכיוני ZIP וגם בארכיוני tar‏ (.tgz).

  1. נכנסים לדף הגרסאות של Cluster Toolkit ב-GitHub.
  2. מורידים את החבילה שמתאימה לפלטפורמה ולארכיטקטורה שלכם. אלה האפשרויות הזמינות:
    • gcluster_bundle_linux_amd64.zip או gcluster_bundle_linux_amd64.tgz
    • gcluster_bundle_linux_arm64.zip או gcluster_bundle_linux_arm64.tgz
    • gcluster_bundle_mac_amd64.zip או gcluster_bundle_mac_amd64.tgz
    • gcluster_bundle_mac_arm64.zip או gcluster_bundle_mac_arm64.tgz
  3. במסוף, מחלצים את קובצי החבילה לספרייה חדשה:
    • אם הורדתם חבילת ZIP, מחלצים את הקבצים באמצעות הפקודה unzip:

      unzip BUNDLE_FILENAME -d cluster-toolkit
    • אם הורדתם חבילת tar, מחלצים את הקבצים באמצעות הפקודה tar:

      mkdir -p cluster-toolkit
      tar -xzf BUNDLE_FILENAME -C cluster-toolkit

    מחליפים את BUNDLE_FILENAME בשם החבילה שהורדתם.

  4. עוברים לספרייה החדשה:
    cd cluster-toolkit
  5. מאמתים את ההתקנה:
    ./gcluster --version

    בפלט מוצגת הגרסה הנוכחית של Cluster Toolkit שבה אתם משתמשים.

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

יצירת קובץ פריסה

  1. בספרייה של Cluster Toolkit, יוצרים את קובץ ה-YAML של פריסת Slurm.

    nano ${A4_DEPLOYMENT_FILE_NAME}.yaml
    
  2. מדביקים את התוכן הבא בקובץ ה-YAML.

    ---
    terraform_backend_defaults:
      type: gcs
      configuration:
        bucket: BUCKET_NAME
    
    vars:
      deployment_name: A4_DEPLOYMENT_FILE_NAME
      project_id: A4_RESERVATION_PROJECT_ID
      region: A4_REGION
      zone: A4_ZONE
      a4h_reservation_name: A4_RESERVATION_NAME
      a4h_cluster_size: 1
    
  3. כדי לשמור את הקובץ ולצאת ממנו, לוחצים על Ctrl+O > Enter > Ctrl+X.

הקצאת אשכול Slurm

כדי להקצות את אשכול Slurm, מריצים את פקודת הפריסה הבאה. הפקודה הזו מקצה את אשכול Slurm באמצעות קובץ ה-blueprint‏ examples/machine-learning/a4-highgpu-8g/a4high-slurm-blueprint.yaml. כברירת מחדל, התוכנית הזו פורסת מכונות (Compute Engine instances) שמשתמשות ב-Advanced Compute Images מובנים מראש. מידע נוסף על מנהלי ההתקנים וכלי ההגדרות האישיות שמותקנים מראש ושאותם אתם פורסים זמין במאמר סקירה כללית של Advanced Compute Images.

ב-Cloud Shell, משתמשים בפקודה gcluster deploy כדי להתחיל ליצור את האשכול.

./gcluster deploy -d ${A4_DEPLOYMENT_FILE_NAME}.yaml examples/machine-learning/a4-highgpu-8g/a4high-slurm-blueprint.yaml --auto-approve

התחברות לאשכול

אחרי הפריסה, מתחברים למסוף Google Cloud כדי לראות את האשכול.

  1. נכנסים לדף Compute Engine > VM instances במסוףGoogle Cloud .

    כניסה לדף VM instances

  2. מאתרים את צומת ההתחברות (a4high-login-001 או דומה).

  3. לוחצים על SSH כדי להתחבר.

הסרת המשאבים

כדי לא לצבור חיובים בחשבון Google Cloud על המשאבים שבהם השתמשתם בדף הזה, מבצעים את הפעולות הבאות.

השמדת אשכול Slurm

מומלץ לנקות את המשאבים כשכבר לא צריך אותם. כשמשמידים את אשכול Slurm, כל המשאבים שהוקצו נמחקים, כולל המכונה של Managed Lustre וכל הנתונים שמאוחסנים בה.

  1. לפני שמריצים את פקודת ההשמדה, עוברים לספריית הבסיס של Cluster Toolkit. כברירת מחדל, DEPLOYMENT_FOLDER נמצא בתיקיית הבסיס של Cluster Toolkit.

  2. משתמשים בפקודה gcluster destroy כדי להשמיד את האשכול:

    ./gcluster destroy DEPLOYMENT_FOLDER --auto-approve

    מחליפים את DEPLOYMENT_FOLDER בשם של תיקיית הפריסה. בדרך כלל הוא זהה ל-DEPLOYMENT_NAME.

בסיום ההשמדה, תופיע הודעה דומה לזו:

Destroy complete! Resources: xx destroyed.

מחיקת קטגוריית האחסון

מוחקים את הקטגוריה של Cloud Storage אחרי שמוודאים שהפקודה הקודמת הסתיימה בלי שגיאות:

gcloud storage buckets delete gs://${BUCKET_NAME}

פתרון בעיות

  • שגיאה: Cloud Shell לא יכול להקצות את האשכול כי לא נשאר נפח אחסון.

    השגיאה הזו יכולה להופיע אם אתם משתמשים הרבה ב-Cloud Shell ונגמר לכם נפח האחסון.

    כדי לפתור את הבעיה, קראו את המאמר השבתה או איפוס של Cloud Shell.

  • שגיאה: שם האשכול או ה-blueprint כבר קיים.

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

    כדי לפתור את הבעיה, צריך להריץ שוב את המדריך ולבחור שם ייחודי לקובץ הפריסה, ואז להריץ מחדש את הפקודה הקצאת אשכול Slurm עם קובץ הפריסה החדש.

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