יצירת אשכול Slurm בניהול עצמי עם מכונת A4 VM
בדף הזה מוסבר איך ליצור ולפרוס במהירות אשכול Slurm שעבר אופטימיזציה ל-AI, באמצעות סוגי מכונות A4 שעברו אופטימיזציה למאיצים, עם ה-CLI של gcloud ו- Cluster Toolkit.
סוגי המכונות עם אופטימיזציה למאיצים מסוג A4 מגיעים עם מעבדי GPU מסוג NVIDIA B200, והם תוכננו במיוחד לחישובים אינטנסיביים של AI כדי לעזור לאשכול Slurm לטפל ביעילות באימון מודלים ובהסקת מסקנות בקנה מידה גדול. למידע נוסף על סוגי מכונות שעברו אופטימיזציה למאיצי A4 ב- Google Cloud, אפשר לעיין במאמר סוגי מכונות עם GPU.
אפשר גם להשתמש ב-Cluster Director כדי ליצור אשכול Slurm שמבוסס על A4. Cluster Director הוא שירות מנוהל שמפשט ומבצע אוטומטית את פריסת האשכולות, וכך מצמצם את התקורה התפעולית. מידע נוסף זמין במאמר יצירת אשכול Slurm בניהול מלא עם שתי מכונות וירטואליות מסוג A4.
לחצו על תראו לי איך כדי לקרוא הסבר מפורט על המשימה ישירות במסוף Google Cloud :
סקירה כללית של המדריך
במדריך הזה מוסבר איך להגדיר אשכול 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. מוודאים שיש לכם מספיק מכסת Filestore כדי להקצות את אשכול Slurm. אתם צריכים קיבולת אזורית של לפחות 10,240GiB (נקראת גם קיבולת SSD לביצועים גבוהים).
כדי לבדוק את המכסה של Filestore, פותחים את הדף Quotas & System limits במסוף Google Cloud ומסננים את הטבלה כך שיוצגו רק משאבי Filestore.
- הוראות מפורטות לבדיקת מכסות של Filestore זמינות במאמר איך רואים את המכסות ל-API ספציפי.
- אם המכסה לא מספיקה, מבקשים להגדיל אותה.
מפעילים את ממשקי ה-API של Compute Engine, Filestore, Cloud Storage, Service Usage ו-Cloud Resource Manager:
התפקידים הנדרשים
כדי לקבל את ההרשאות שדרושות לפריסת אשכול Slurm, צריך לבקש מהאדמין להקצות את התפקידים הבאים ב-IAM:
- אדמין לניהול נפח האחסון (
roles/storage.admin) בפרויקט - אדמין מכונות של Compute (v1) (
roles/compute.instanceAdmin.v1) בפרויקט - משתמש בחשבון שירות (
roles/iam.serviceAccountUser) בחשבון השירות עצמו -
כדי להשתמש במקום שמור לפרויקט יחיד: Compute Instance Admin (v1) (
roles/compute.instanceAdmin.v1) בפרויקט -
כדי לצרוך מקום שמור משותף: Compute Instance Admin (v1) (
roles/compute.instanceAdmin.v1) בפרויקט הבעלים ובכל פרויקט צרכן שבו רוצים לצרוך את המקום השמור.
להסבר על מתן תפקידים, ראו איך מנהלים את הגישה ברמת הפרויקט, התיקייה והארגון.
יכול להיות שאפשר לקבל את ההרשאות הנדרשות גם באמצעות תפקידים בהתאמה אישית או תפקידים מוגדרים מראש.
עלויות
העלות של הפעלת המדריך הזה משתנה בהתאם לכל קטע שמשלימים, כמו הגדרת המדריך או הפעלת משימות. אפשר לחשב את העלות באמצעות מחשבון עלויות.
כדי להעריך את עלות ההגדרה של המדריך הזה, השתמשו במפרטים הבאים:
- קיבולת Filestore (רגילה) לכל אזור: 10,240GiB.
- דיסק מתמיד סטנדרטי: 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 שמשתמשות ב-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
מומלץ לנקות את המשאבים כשכבר לא צריך אותם.
כברירת מחדל, התוכניות של A4 High מפעילות הגנה מפני מחיקה במכונה של Filestore. כשמשמידים את אשכול Slurm, צריך להשבית את ההגנה מפני מחיקה לפני שמריצים את פקודת ההשמדה.
השבתת ההגנה מפני מחיקה
כדי להשבית את ההגנה מפני מחיקה כשמעדכנים מכונה, משתמשים בפקודה שדומה לפקודה הבאה:
gcloud filestore instances update INSTANCE_NAME \
--no-deletion-protection
מחליפים את INSTANCE_NAME בשם המכונה שרוצים לערוך. לדוגמה, my-genomics-instance.
כדי למצוא את INSTANCE_NAME, אפשר להריץ את gcloud filestore instances
list. הפקודה הזו מציגה רשימה של כל מופעי Filestore ב Google Cloud פרויקט הנוכחי, כולל השמות, המיקומים (אזורים), רמות הביצועים, הקיבולת והסטטוס שלהם.
אחרי הרצת הפקודה, מחפשים את מכונת Filestore שתואמת למכונה a4-highgpu-8g שפועלת במדריך הזה.
השמדת אשכול Slurm
לפני שמריצים את הפקודה destroy, עוברים אל ספריית השורש של 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.
שגיאה: כבר קיים אשכול או תוכנית בסיסית עם השם הזה.
יכול להיות שתראו את השגיאה הזו אם אתם משתמשים בפרויקט שכבר נעשה בו שימוש בשמות הקבצים המדויקים שמופיעים במדריך הזה. לדוגמה, אם מישהו אחר בארגון שלכם עבר על המדריך הזה מההתחלה ועד הסוף.
כדי לפתור את הבעיה, צריך להריץ שוב את המדריך ולבחור שם ייחודי לקובץ הפריסה, ואז להריץ מחדש את הפקודה הקצאת אשכול Slurm עם קובץ הפריסה החדש.
המאמרים הבאים
- משימות מתקדמות ב-Slurm:
- כך מנהלים אירועים של מארחים:
- הצגת הטופולוגיה של מכונה וירטואלית ב-Compute Engine
- מעקב אחרי מכונות של Compute Engine ואחרי אשכולות Slurm
- דיווח על מארח עם תקלות