יצירת אשכול 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. כדי להשלים את השלבים במדריך הזה, צריך לבצע את התהליך הבא:
- מגדירים את הפרויקט ב- Google Cloud עם ההרשאות הנדרשות למדריך הזה ואת משתני הסביבה לשמירת המכונה.
- יצירת קטגוריה של Cloud Storage.
- מגדירים את משתני הסביבה של האחסון.
- מגדירים את Cluster Toolkit.
- עוברים לספרייה של Cluster Toolkit.
- יוצרים קובץ YAML לפריסת Slurm.
- הקצאת אשכול Slurm באמצעות תוכנית.
- מתחברים לאשכול Slurm.
לפני שמתחילים
- משריינים גוש קיבולת או יוצרים הזמנה במצב תזמון למכונה אחת מסוג
a4-highgpu-8g. מוודאים שיש לכם מספיק מכסה ב-Managed Lustre (מכסה של לפחות 36,000GiB של נפח אחסון ומכסה של 18GBps של קצב העברת נתונים) כדי להקצות את המשאבים של התוכנית.
מפעילים את ממשקי ה-API של Compute Engine, Managed Lustre, Service Networking, Cloud Storage, Service Usage ו-Resource Manager:
התפקידים הנדרשים
כדי לקבל את ההרשאות שדרושות לפריסת אשכול Slurm, צריך לבקש מהאדמין להקצות לכם את התפקידים הבאים ב-IAM:
- אדמין באחסון (
roles/storage.admin) בפרויקט - Compute Instance Admin (v1) (
roles/compute.instanceAdmin.v1) בפרויקט - משתמש בחשבון שירות (
roles/iam.serviceAccountUser) בחשבון השירות עצמו -
כדי להשתמש במקום שמור לפרויקט יחיד:
Compute Instance Admin (v1) (
roles/compute.instanceAdmin.v1) בפרויקט -
כדי לצרוך מקום שמור משותף: Compute Instance Admin (v1) (
roles/compute.instanceAdmin.v1) בפרויקט הבעלים ובכל פרויקט צרכן שבו רוצים לצרוך את המקום השמור
להסבר על מתן תפקידים, ראו איך מנהלים את הגישה ברמת הפרויקט, התיקייה והארגון.
יכול להיות שאפשר לקבל את ההרשאות הנדרשות גם באמצעות תפקידים בהתאמה אישית או תפקידים מוגדרים מראש.
עלויות
עלות ההפעלה של המדריך משתנה בהתאם לכל קטע שמשלימים, כמו הגדרת המדריך או הפעלת משימות. אפשר לחשב את העלות באמצעות מחשבון עלויות.
כדי להעריך את עלות ההגדרה של המדריך הזה, השתמשו במפרטים הבאים:
- 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:
נכנסים למסוף Google Cloud .
לוחצים על Activate 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).
- נכנסים לדף הגרסאות של Cluster Toolkit ב-GitHub.
- מורידים את החבילה שמתאימה לפלטפורמה ולארכיטקטורה שלכם. אלה האפשרויות הזמינות:
gcluster_bundle_linux_amd64.zipאוgcluster_bundle_linux_amd64.tgzgcluster_bundle_linux_arm64.zipאוgcluster_bundle_linux_arm64.tgzgcluster_bundle_mac_amd64.zipאוgcluster_bundle_mac_amd64.tgzgcluster_bundle_mac_arm64.zipאוgcluster_bundle_mac_arm64.tgz
- במסוף, מחלצים את קובצי החבילה לספרייה חדשה:
-
אם הורדתם חבילת ZIP, מחלצים את הקבצים באמצעות הפקודה
unzip:unzip BUNDLE_FILENAME -d cluster-toolkit
-
אם הורדתם חבילת tar, מחלצים את הקבצים באמצעות הפקודה
tar:mkdir -p cluster-toolkit tar -xzf BUNDLE_FILENAME -C cluster-toolkit
מחליפים את
BUNDLE_FILENAMEבשם החבילה שהורדתם. -
- עוברים לספרייה החדשה:
cd cluster-toolkit
- מאמתים את ההתקנה:
./gcluster --version
בפלט מוצגת הגרסה הנוכחית של Cluster Toolkit שבה אתם משתמשים.
אחרי שמתקינים את הקובץ הבינארי, אפשר לפרוס אשכולות כדי להריץ את המשימות או עומסי העבודה.
יצירת קובץ פריסה
בספרייה של Cluster Toolkit, יוצרים את קובץ ה-YAML של פריסת Slurm.
nano ${A4_DEPLOYMENT_FILE_NAME}.yamlמדביקים את התוכן הבא בקובץ ה-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כדי לשמור את הקובץ ולצאת ממנו, לוחצים על 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 כדי לראות את האשכול.
נכנסים לדף Compute Engine > VM instances במסוףGoogle Cloud .
מאתרים את צומת ההתחברות (
a4high-login-001או דומה).לוחצים על SSH כדי להתחבר.
הסרת המשאבים
כדי לא לצבור חיובים בחשבון Google Cloud על המשאבים שבהם השתמשתם בדף הזה, מבצעים את הפעולות הבאות.
השמדת אשכול Slurm
מומלץ לנקות את המשאבים כשכבר לא צריך אותם. כשמשמידים את אשכול Slurm, כל המשאבים שהוקצו נמחקים, כולל המכונה של Managed Lustre וכל הנתונים שמאוחסנים בה.
לפני שמריצים את פקודת ההשמדה, עוברים לספריית הבסיס של Cluster Toolkit. כברירת מחדל,
DEPLOYMENT_FOLDERנמצא בתיקיית הבסיס של Cluster Toolkit.משתמשים בפקודה
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 עם קובץ הפריסה החדש.
המאמרים הבאים
- משימות מתקדמות ב-Slurm:
- כך מנהלים אירועים של מארחים:
- הצגת הטופולוגיה של מכונה
- מעקב אחרי מכונות של Compute Engine ואשכולות של Slurm
- דיווח על מארח לא תקין