במדריך הזה נסביר איך לכוונן מודל mistralai/Mixtral-8x7B-v0.1 באשכול Slurm עם כמה צמתים וכמה יחידות GPU ב- Google Cloud. האשכול משתמש בשתי מכונות וירטואליות (VM) של a4-highgpu-8g, שלכל אחת מהן יש 8 יחידות GPU מסוג NVIDIA B200.
שני התהליכים העיקריים שמתוארים במדריך הזה הם:
- פורסים אשכול Slurm ברמת ייצור עם ביצועים גבוהים באמצעותGoogle Cloud Cluster Toolkit. כחלק מהפריסה הזו, יוצרים קובץ אימג' של מכונה וירטואלית בהתאמה אישית עם התוכנה הנדרשת שכבר מותקנת. בנוסף, מגדירים מערכת קבצים משותפת של Lustre ומגדירים רשת מהירה.
- אחרי פריסת האשכול, מריצים עבודת כוונון עדין מבוזרת באמצעות קבוצת הסקריפטים שמצורפת למדריך הזה. העבודה מתבססת על PyTorch Fully Sharded Data Parallel (FSDP), שאפשר לגשת אליו דרך ספריית Transformer Reinforcement Learning (TRL) של Hugging Face.
המדריך הזה מיועד למהנדסי למידת מכונה (ML), לחוקרים, לאדמינים ולאופרטורים של פלטפורמות ולמומחים בתחום הנתונים וה-AI שרוצים לפרוס עומס עבודה של AI בכמה צמתים ומעבדי GPU.
מטרות
- גישה ל-Mixtral באמצעות Hugging Face
- התקנת Cluster Toolkit
- הכנת הסביבה
- ליצור ולפרוס אשכול Slurm ברמה של סביבת ייצור עם יחידות GPU מסוג A4.
- הגדרת סביבה מרובת צמתים לאימון מבוזר באמצעות FSDP.
- מבצעים כוונון עדין של מודל Mixtral באמצעות המחלקה
trl.SFTTrainerשל Hugging Face. - העברת נתונים ל-SSD מקומיים.
- עוקבים אחרי העבודה.
- לפנות.
עלויות
במסמך הזה משתמשים ברכיבים הבאים של Google Cloud, והשימוש בהם כרוך בתשלום:
כדי ליצור הערכת עלויות בהתאם לשימוש החזוי, אתם יכולים להשתמש במחשבון התמחור.
לפני שמתחילים
- נכנסים לחשבון Google Cloud . אנחנו ממליצים למשתמשים חדשים ב- Google Cloud ליצור חשבון כדי שיוכלו להעריך את הביצועים של המוצרים שלנו בתרחישים מהעולם האמיתי. לקוחות חדשים מקבלים בחינם גם קרדיט בשווי 300$ להרצה, לבדיקה ולפריסה של עומסי העבודה.
-
התקינו את ה-CLI של Google Cloud.
-
אם אתם משתמשים בספק זהויות חיצוני (IdP), קודם אתם צריכים להיכנס ל-CLI של gcloud באמצעות המאגר המאוחד לניהול זהויות.
-
כדי לאתחל את ה-CLI של gcloud, הריצו את הפקודה הבאה:
gcloud init -
יוצרים או בוחרים Google Cloud פרויקט.
תפקידים שנדרשים כדי לבחור או ליצור פרויקט
- Select a project: כדי לבחור פרויקט לא צריך תפקיד IAM ספציפי – אפשר לבחור כל פרויקט שקיבלתם בו תפקיד.
-
יצירת פרויקט: כדי ליצור פרויקט, צריך את התפקיד Project Creator (
roles/resourcemanager.projectCreator), שכולל את ההרשאהresourcemanager.projects.create. איך מקצים תפקידים
-
יוצרים Google Cloud פרויקט:
gcloud projects create PROJECT_ID
מחליפים את
PROJECT_IDבשם של פרויקט Google Cloud שיוצרים. -
בוחרים את הפרויקט שיצרתם: Google Cloud
gcloud config set project PROJECT_ID
מחליפים את
PROJECT_IDבשם הפרויקט ב- Google Cloud .
מפעילים את ממשק ה-API הנדרש, אם הוא עדיין לא מופעל:
תפקידים שנדרשים להפעלת ממשקי API
כדי להפעיל ממשקי API, צריך את ההרשאה
serviceusage.services.enable. אם יצרתם את הפרויקט, סביר להניח שכבר יש לכם את ההרשאה הזו דרך התפקיד 'בעלים' (roles/owner). אחרת, תוכלו לקבל את ההרשאה הזו דרך התפקיד 'אדמין בממשק Service Usage' (roles/serviceusage.serviceUsageAdmin). איך מקצים תפקידיםgcloud services enable compute.googleapis.com file.googleapis.com logging.googleapis.com cloudresourcemanager.googleapis.com servicenetworking.googleapis.com lustre.googleapis.com
-
התקינו את ה-CLI של Google Cloud.
-
אם אתם משתמשים בספק זהויות חיצוני (IdP), קודם אתם צריכים להיכנס ל-CLI של gcloud באמצעות המאגר המאוחד לניהול זהויות.
-
כדי לאתחל את ה-CLI של gcloud, הריצו את הפקודה הבאה:
gcloud init -
יוצרים או בוחרים Google Cloud פרויקט.
תפקידים שנדרשים כדי לבחור או ליצור פרויקט
- Select a project: כדי לבחור פרויקט לא צריך תפקיד IAM ספציפי – אפשר לבחור כל פרויקט שקיבלתם בו תפקיד.
-
יצירת פרויקט: כדי ליצור פרויקט, צריך את התפקיד Project Creator (
roles/resourcemanager.projectCreator), שכולל את ההרשאהresourcemanager.projects.create. איך מקצים תפקידים
-
יוצרים Google Cloud פרויקט:
gcloud projects create PROJECT_ID
מחליפים את
PROJECT_IDבשם של פרויקט Google Cloud שיוצרים. -
בוחרים את הפרויקט שיצרתם: Google Cloud
gcloud config set project PROJECT_ID
מחליפים את
PROJECT_IDבשם הפרויקט ב- Google Cloud .
מפעילים את ממשק ה-API הנדרש, אם הוא עדיין לא מופעל:
תפקידים שנדרשים להפעלת ממשקי API
כדי להפעיל ממשקי API, צריך את ההרשאה
serviceusage.services.enable. אם יצרתם את הפרויקט, סביר להניח שכבר יש לכם את ההרשאה הזו דרך התפקיד 'בעלים' (roles/owner). אחרת, תוכלו לקבל את ההרשאה הזו דרך התפקיד 'אדמין בממשק Service Usage' (roles/serviceusage.serviceUsageAdmin). איך מקצים תפקידיםgcloud services enable compute.googleapis.com file.googleapis.com logging.googleapis.com cloudresourcemanager.googleapis.com servicenetworking.googleapis.com lustre.googleapis.com
-
מעניקים תפקידים לחשבון המשתמש. מריצים את הפקודה הבאה לכל אחד מהתפקידים הבאים ב-IAM:
roles/compute.admin, roles/iam.serviceAccountUser, roles/file.editor, roles/storage.admin, roles/serviceusage.serviceUsageAdmingcloud projects add-iam-policy-binding PROJECT_ID --member="user:USER_IDENTIFIER" --role=ROLE
מחליפים את מה שכתוב בשדות הבאים:
-
PROJECT_ID: מזהה הפרויקט. -
USER_IDENTIFIER: המזהה של חשבון המשתמש . לדוגמה,myemail@example.com. -
ROLE: תפקיד ה-IAM שאתם מקצים לחשבון המשתמש.
-
- מפעילים את חשבון השירות שמוגדר כברירת מחדל עבור Google Cloud הפרויקט:
gcloud iam service-accounts enable PROJECT_NUMBER-compute@developer.gserviceaccount.com \ --project=PROJECT_ID
מחליפים את PROJECT_NUMBER במספר הפרויקט. כדי לבדוק את מספר הפרויקט, אפשר לעיין במאמר קבלת פרויקט קיים.
- מקצים את התפקיד 'עריכה' (
roles/editor) לחשבון השירות שמוגדר כברירת מחדל:gcloud projects add-iam-policy-binding PROJECT_ID \ --member="serviceAccount:PROJECT_NUMBER-compute@developer.gserviceaccount.com" \ --role=roles/editor
- יצירת פרטי כניסה לאימות מקומי בחשבון המשתמש:
gcloud auth application-default login
- מפעילים את OS Login בפרויקט:
gcloud compute project-info add-metadata --metadata=enable-oslogin=TRUE
- נכנסים לחשבון Hugging Face או יוצרים חשבון.
- התקנת יחסי התלות שנדרשים לשימוש ב-Cluster Toolkit
גישה ל-Mixtral באמצעות Hugging Face
כדי להשתמש ב-Hugging Face כדי לגשת ל-Mixtral:
- נכנסים לחשבון ב-Hugging Face ומתנסים במודל Mixtral.
- יוצרים טוקן גישה ל-Hugging Face
read. - מעתיקים את ערך הטוקן ושומרים אותו. תשתמשו בו בהמשך המדריך הזה.
התקנת Cluster Toolkit
Cluster Toolkit הוא כלי בקוד פתוח שמפשט את הפריסה של עומסי עבודה של מחשוב עתיר ביצועים (HPC), בינה מלאכותית (AI) ולמידת מכונה (ML) ב- Google Cloud. מידע נוסף על השימוש ב-gcluster CLI ועל ניהול אשכולות זמין במאמר סקירה כללית של Cluster Toolkit.
הכנת הגרסה של Cluster Toolkit:
מורידים את הגרסה:
מגדירים את הנתיב
gcluster:
הכנת הסביבה
כדי להכין את הסביבה:
מגדירים את משתני הסביבה שמוגדרים כברירת מחדל:
מחליפים את מה שכתוב בשדות הבאים:
-
YOUR_PROJECT_ID: השם של Google Cloud הפרויקט שבו רוצים ליצור את אשכול Slurm. -
YOUR_ZONE: האזור שבו קיימת ההזמנה. -
YOUR_REGION: האזור שבו קיימת ההזמנה. -
YOUR_RESERVATION_NAME: כתובת ה-URL או השם של ההזמנה שבה רוצים להשתמש כדי ליצור את אשכול Slurm. -
YOUR_CLUSTER_NAME: השם של הפריסה. משתמשים בשם קצר שמכיל רק אותיות ומספרים (לדוגמה,a4high). השם הזה מוקצה גם לאשכול Slurm שנוצר על ידי הפריסה. -
YOUR_GCS_BUCKET: השם של הקטגוריה שבה מאחסנים את התוצאות מנקודת הבדיקה של האימון. מציינים באקט קיים או יוצרים באקט חדש. לפני שיוצרים את הקטגוריה, חשוב לקרוא את הדרישות לבחירת שמות לקטגוריות. -
YOUR_HF_TOKEN: האסימון של Hugging Face שיצרתם בשלב קודם.
-
יוצרים קטגוריה של Cloud Storage:
יצירת אשכול Slurm בגודל A4
כדי ליצור אשכול Slurm מסוג A4:
כדי להחליף את הקובץ
a4high-slurm-deployment.yamlבספרייהexamples/machine-learning/a4-highgpu-8gבמשתני הסביבה שלכם, מריצים את הפקודה הבאה:פותחים את הקובץ
a4high-slurm-blueprint.yamlבספרייהexamples/machine-learning/a4-highgpu-8gועורכים אותו כדי להשתמש ב-Managed Lustre בספרייה המשותפת/homeבאופן הבא:- מסירים את בלוק המודול
homefsשמוגדר כברירת מחדל באמצעותsource: modules/file-system/filestore. - מפעילים את המודולים
lustrefs(homefsחסימה באמצעותremote_mount: lustrefs) ו-private-service-access. - בבלוק
vars, מגדירים את ההגדרות הבאות:- משנים את הערך של
install_managed_lustreב-/var/tmp/slurm_vars.jsonל-true. - מגדירים את הפרמטר
per_unit_storage_throughputלערך500. - מגדירים את הפרמטר
lustre_size_gibלערך36000. - ביטול ההערה של
lustre_instance_id: lustre-instance. - מוסיפים הערה או מסירים את
filestore_ip_rangeשלא בשימוש.
- משנים את הערך של
- מסירים את בלוק המודול
פורסים את האשכול:
הפקודה
./gcluster deployמפעילה תהליך דו-שלבי, שכולל את השלבים הבאים:- בשלב הראשון נוצרת תמונה מותאמת אישית עם כל התוכנות שמותקנות מראש, והתהליך הזה יכול להימשך עד 35 דקות.
- בשלב השני, המערכת פורסת את האשכול באמצעות התמונה המותאמת אישית. התהליך הזה אמור להסתיים מהר יותר מהשלב הראשון.
הכנת עומס העבודה
כדי להכין את עומס העבודה, פועלים לפי השלבים הבאים:
יצירת סקריפטים של עומסי עבודה
כדי ליצור את הסקריפטים שבהם ישתמש עומס העבודה של הכוונון העדין, פועלים לפי השלבים הבאים:
כדי להגדיר את הסביבה הווירטואלית של Python, יוצרים את הקובץ
install_environment.shעם התוכן הבא:כדי לציין את יחסי התלות של Python בסקריפט ההדרכה, יוצרים קובץ
requirements-fsdp.txtעם התוכן הבא:מציינים את
train-mixtral.pyכסקריפט הראשי לאימון:כדי לציין את המשימות שהעבודות יפעילו באשכול Slurm, יוצרים את הקובץ
train-mixtral.shעם התוכן הבא:
העלאת הסקריפטים לאשכול Slurm
כדי להעלות את הסקריפטים שיצרתם בקטע הקודם לאשכול Slurm, פועלים לפי השלבים הבאים:
מגדירים את המשתנה
LOGIN_NODEעל ידי אחזור השם של צומת הכניסה לאשכול:המשתנה
LOGIN_NODEמאחסן ערך דומה ל-${DEPLOYMENT_NAME}-login-001.יוצרים כלל לחומת האש:
מעלים את הסקריפטים לספריית הבית של צומת הכניסה:
חיבור לאשכול Slurm
מתחברים לאשכול Slurm על ידי התחברות לצומת הכניסה באמצעות SSH:
התקנת frameworks וכלים
אחרי שמתחברים לצומת ההתחברות, מריצים את סקריפט ההתקנה בצומת חישוב כדי להתקין את המסגרות והכלים הנדרשים:
הפקודה הזו מגדירה את הסביבה הווירטואלית, מתקינה את כל הרכיבים התלויים ומורידה את משקלי המודל של Mixtral אל ~/Mixtral-8x7B-v0.1. התהליך הזה יכול להימשך יותר מ-30 דקות.
הפעלת השלב הזה באמצעות srun מעבירה את סקריפט ההתקנה מצומת הכניסה לצומת מחשוב שהוקצה, וכך מאפשרת לסקריפט לגשת לדרייברים של GPU במהלך הקומפילציה.
התחלת עומס העבודה של הכוונון העדין
כדי להתחיל את עומס העבודה של האימון, מבצעים את הפעולות הבאות:
שולחים את העבודה למתזמן של Slurm:
מעקב אחר עומס העבודה
כדי לעקוב אחרי ההתקדמות של משימת הכוונון העדין, אפשר להשתמש בשיטות הבאות:
בצומת הכניסה באשכול Slurm, אפשר לעקוב אחרי ההתקדמות של העבודה על ידי בדיקת קובצי הפלט שנוצרו בספרייה
home:אם העבודה מתחילה בהצלחה, בקובץ
.errמוצג סרגל התקדמות שמתעדכן ככל שהעבודה מתקדמת.העבודה מתבצעת בשני שלבים עיקריים:
- העתקה של מודל הבסיס הגדול ל-SSD המקומי של כל צומת חישוב.
- פעולת האימון, שמתחילה אחרי שהעתקת המודל מסתיימת.
ההרצה של כל העבודה נמשכת כ-60 דקות.
אתם יכולים גם לעקוב אחרי השימוש במעבדי ה-GPU באשכול Slurm כדי לוודא שעבודת הכוונון העדין פועלת ביעילות. כדי לעשות זאת, פותחים את הקישור הבא בדפדפן:
https://console.cloud.google.com/monitoring/metrics-explorer?project=YOUR_PROJECT_ID&pageState=%7B%22xyChart%22%3A%7B%22dataSets%22%3A%5B%7B%22timeSeriesFilter%22%3A%7B%22filter%22%3A%22metric.type%3D%5C%22agent.googleapis.com%2Fgpu%2Futilization%5C%22%20resource.type%3D%5C%22gce_instance%5C%22%22%2C%22perSeriesAligner%22%3A%22ALIGN_MEAN%22%7D%2C%22plotType%22%3A%22LINE%22%7D%5D%7D%7Dאפשר גם להזין את הפקודה ישירות בטרמינל:
כשעוקבים אחרי עומס העבודה, אפשר לראות את הנתונים הבאים:
שימוש ב-GPU: כדי שמשימת ה-Fine-tuning תפעל בצורה תקינה, אתם אמורים לראות את השימוש בכל 16 יחידות ה-GPU (שמונה יחידות GPU לכל מכונה וירטואלית באשכול) עולה ומתייצב ברמה מסוימת לאורך האימון.
משך העבודה: העבודה צפויה להימשך כשעה.
הסרת המשאבים
כדי להימנע מחיובים בחשבון Google Cloud בגלל השימוש במשאבים שנעשה במסגרת המדריך הזה, אפשר למחוק את הפרויקט שמכיל את המשאבים או להשאיר את הפרויקט ולמחוק את המשאבים בנפרד.
מחיקת המשאבים
מריצים את הפקודות הבאות כדי למחוק את המשאבים שיצרתם במדריך הזה:
כדי למחוק את אשכול Slurm, עוברים אל ספריית
cluster-toolkitומריצים את הפקודהgcluster destroy:מוחקים את הקטגוריה:
כדי למחוק תמונה של Packer, פותחים את דפדפן האינטרנט, עוברים לדף הבא, מחפשים את התמונה הספציפית ולוחצים על Delete (מחיקה).
מחיקת הפרויקט
כדי למחוק Google Cloud פרויקט:
gcloud projects delete PROJECT_ID
המאמרים הבאים
- פריסה מחדש של אשכול Slurm
- בדיקת ביצועי הרשת באשכול Slurm
- מעקב אחרי מכונות וירטואליות באשכול Slurm
- יצירת נקודת קצה למילוי בקשות: אחרי שיש לכם מודל שעבר כוונון עדין, אתם יכולים לפרוס אותו בנקודת קצה למילוי בקשות באמצעות Google Kubernetes Engine (GKE) או Vertex AI, כדי שיהיה נגיש להסקת מסקנות.
- מידע על שירותי אחסון מומלצים לעומסי עבודה של AI ו-ML