במדריך הזה מוסבר איך לאמן מודל שפה גדול (LLM) באשכול Slurm עם כמה צמתים וכמה יחידות GPU ב- Google Cloud. המודל שבו משתמשים במדריך הזה מבוסס על מודל Qwen2 עם 1.5 מיליארד פרמטרים. האשכול Slurm משתמש בשתי מכונות וירטואליות (VM) מסוג a4-highgpu-8g, שלכל אחת מהן יש 8 יחידות GPU מסוג NVIDIA B200.
שני התהליכים העיקריים שמתוארים במדריך הזה הם:
- פריסת אשכול Slurm ברמת ייצור עם ביצועים גבוהים באמצעותGoogle Cloud Cluster Toolkit. כחלק מהפריסה הזו, יוצרים קובץ אימג' של מכונה וירטואלית בהתאמה אישית עם התוכנה הנדרשת שכבר מותקנת. בנוסף, מגדירים מכונת Filestore משותפת ומגדירים רשת RDMA מהירה.
- אחרי פריסת האשכול, מריצים משימת אימון מראש מבוזרת באמצעות קבוצת הסקריפטים שמצורפת למדריך הזה. העבודה מתבססת על ספריית Hugging Face Accelerate.
המדריך הזה מיועד למהנדסי למידת מכונה (ML), לחוקרים, לאדמינים ולאופרטורים של פלטפורמות ולמומחים בתחום הנתונים וה-AI שמעוניינים לפרוס אשכולות Slurm עם ביצועים גבוהים ב- Google Cloud כדי לאמן מודלים גדולים של שפה (LLM).
מטרות
- אפשר לגשת למודל Qwen2 באמצעות Hugging Face.
- מכינים את הסביבה.
- ליצור ולפרוס אשכול Slurm ברמת ייצור A4.
- מאמנים את מודל Qwen2 באמצעות הספרייה Accelerate .
- עוקבים אחרי העבודה.
- לפנות.
עלויות
במסמך הזה משתמשים ברכיבים הבאים של 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
-
התקינו את ה-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
-
מעניקים תפקידים לחשבון המשתמש. מריצים את הפקודה הבאה לכל אחד מהתפקידים הבאים ב-IAM:
roles/compute.admin, roles/iam.serviceAccountUser, roles/file.editor, roles/storage.admin, roles/serviceusage.serviceUsageAdmin, roles/compute.osAdminLogin, roles/iap.tunnelResourceAccessorgcloud 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 או יוצרים חשבון.
גישה ל-Qwen2 באמצעות Hugging Face
כדי להשתמש ב-Hugging Face כדי לגשת ל-Qwen2:
התקנת Cluster Toolkit
Cluster Toolkit הוא כלי בקוד פתוח שמפשט את הפריסה של עומסי עבודה של מחשוב עתיר ביצועים (HPC), בינה מלאכותית (AI) ולמידת מכונה (ML) ב- Google Cloud. למידע נוסף על השימוש ב-gcluster ועל ניהול אשכולות, אפשר לעיין במאמר סקירה כללית של Cluster Toolkit.
מכינים את הגרסה של Cluster Toolkit:
הורדת הגרסה:
מגדירים את הנתיב
gcluster:
הכנת הסביבה
כדי להכין את הסביבה, פועלים לפי השלבים הבאים:
מגדירים את משתני הסביבה שמוגדרים כברירת מחדל:
מחליפים את מה שכתוב בשדות הבאים:
-
YOUR_PROJECT_ID: השם של Google Cloud הפרויקט שבו רוצים ליצור את אשכול GKE. -
YOUR_CLUSTER_NAME: השם של אשכול Slurm שרוצים ליצור. -
YOUR_ZONE: האזור שבו קיימת ההזמנה. -
YOUR_REGION,: האזור שבו קיימת ההזמנה. -
RESERVATION_NAME: כתובת ה-URL או השם של ההזמנה שרוצים להשתמש בה כדי ליצור את אשכול Slurm. -
YOUR_GCS_BUCKET: השם של הקטגוריה שבה מאחסנים את התוצאות מנקודת הבדיקה של האימון. לפני שיוצרים קטגוריה, חשוב לקרוא את הדרישות לבחירת שמות לקטגוריות. -
YOUR_HF_TOKEN: האסימון של Hugging Face שיצרתם בשלב קודם.
-
יוצרים קטגוריה של Cloud Storage:
יצירת אשכול Slurm בגודל A4
כדי ליצור אשכול Slurm בגודל A4:
יוצרים את הקובץ
a4high-slurm-deployment.yaml:יוצרים את קובצי המניפסט של Terraform:
תיקון המניפסטים:
פורסים את האשכול:
הפקודה
gcluster deployהיא תהליך דו-שלבי, שכולל את השלבים הבאים:בשלב הראשון נוצרת תמונה מותאמת אישית עם כל התוכנות שמותקנות מראש, והתהליך הזה יכול להימשך עד 50 דקות.
בשלב השני, המערכת פורסת את האשכול באמצעות התמונה המותאמת אישית הזו. התהליך הזה בדרך כלל נמשך פחות זמן מהשלב הראשון.
אם השלב הראשון מצליח אבל השלב השני נכשל, אפשר לנסות לפרוס מחדש את אשכול Slurm על ידי דילוג על השלב הראשון:
הכנת עומס העבודה
כדי להכין את עומס העבודה:
יצירת סקריפטים של עומסי עבודה
כדי ליצור את הסקריפטים שבהם ישתמש עומס העבודה של האימון, פועלים לפי השלבים הבאים:
כדי להגדיר את הסביבה הווירטואלית של Python, יוצרים את הקובץ
install_environment.shעם התוכן הבא:כדי לציין את ההגדרות של משימת הכוונון העדין, יוצרים את קובץ
accelerate_config.yamlעם התוכן הבא:כדי לציין את המשימות שהעבודות יפעילו באשכול Slurm, יוצרים את הקובץ
submit.slurmעם התוכן הבא:כדי לציין את יחסי התלות של משימת הכוונון העדין, יוצרים קובץ
requirements.txtעם התוכן הבא:
הערה: במדריך הזה לא נעשה שימוש בגרסאות העדכניות ביותר של NVIDIA ותלות ב-Pytorch. אם אתם צריכים תלויות חדשות יותר, כדאי לעיין במסמכי התיעוד של NVIDIA ובמסמכי התיעוד של Pytorch.כדי להוריד, לבצע טוקניזציה ולעבד מראש את מערך הנתונים לפורמט שמוכן לאימון, יוצרים קובץ
preprocess_data.pyעם התוכן הבא:כדי לציין את ההוראות למשימה, יוצרים קובץ
train.pyעם התוכן הבא:
העלאת סקריפטים לאשכול Slurm
כדי להעלות את הסקריפטים שיצרתם בקטע הקודם לאשכול Slurm, פועלים לפי השלבים הבאים:
מגדירים את המשתנה
LOGIN_NODEעל ידי אחזור השם של צומת הכניסה לאשכול:המשתנה
LOGIN_NODEמאחסן ערך דומה ל-${CLUSTER_NAME}-login-001.יוצרים כלל לחומת האש:
מעלים את הסקריפטים לספריית הבית של צומת הכניסה:
התחברות לאשכול Slurm
מתחברים לאשכול Slurm על ידי התחברות לצומת הכניסה באמצעות SSH:
התקנת frameworks וכלים
אחרי שמתחברים לצומת הכניסה, מתקינים את המסגרות והכלים באופן הבא:
מגדירים סביבה וירטואלית של Python עם כל הרכיבים התלויים הנדרשים:
מתחילים את האימון המקדים של עומס העבודה
כדי להתחיל לאמן את עומס העבודה, מבצעים את הפעולות הבאות:
שולחים את העבודה למתזמן של Slurm:
בצומת הכניסה באשכול Slurm, אפשר לעקוב אחרי התקדמות העבודה על ידי בדיקת קובצי הפלט שנוצרו בספרייה
home:אם העבודה מתחילה בהצלחה, בקובץ
.errמוצג סרגל התקדמות שמתעדכן ככל שהעבודה מתקדמת.
מעקב אחרי עומס העבודה
אתם יכולים לעקוב אחרי השימוש במעבדי ה-GPU באשכול Slurm כדי לוודא שעבודת הכוונון העדין פועלת ביעילות. כדי לעשות זאת, פותחים את הקישור הבא בדפדפן:
https://console.cloud.google.com/monitoring/metrics-explorer?project=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: כדי שמשימת הכוונון העדין תפעל בצורה תקינה, השימוש בכל 16 יחידות ה-GPU (שמונה יחידות GPU לכל מכונה וירטואלית באשכול) יעלה ויתייצב ברמה מסוימת לאורך האימון. בדיקה
משך העבודה: העבודה צפויה להימשך כשעה.
הורדת המודל
אחרי שהרצתם את העבודה בהצלחה, המודל שאומן נשמר בספרייה ~/qwen2-from-scratch-on-smollm-fineweb/ בצומת הכניסה. מכיוון שהספרייה המשותפת הקבועה הזו מותקנת בכל הצמתים באשכול, נקודות הבדיקה של המודל נשארות זמינות גם אחרי שהעבודה מסתיימת או אחרי שהצמתים של המחשוב מבוטלים.
אפשר להוריד את המודל השמור מצומת הכניסה למחשב המקומי באמצעות הפקודה gcloud compute scp, כמו בדוגמה הבאה:
אחרי שמורידים את המודל, אפשר:
- טוענים את המודל להסקת מסקנות: משתמשים במסגרת Hugging Face Transformers כדי לטעון את ספריית
qwen2-trained-model/ולבצע הסקת מסקנות באמצעות מודל Qwen2 שאומן לאחרונה. - התאמה עדינה נוספת: אפשר להשתמש בנקודת הבדיקה השמורה כנקודת התחלה להתאמה עדינה נוספת על מערך נתונים ספציפי יותר.
- דחיפת המודל אל Hugging Face Hub: כדי לשתף את המודל שאומן, צריך לדחוף אותו אל Hugging Face Hub.
הסרת המשאבים
כדי להימנע מחיובים בחשבון Google Cloud בגלל השימוש במשאבים שנעשה במסגרת המדריך הזה, אפשר למחוק את הפרויקט שמכיל את המשאבים, או להשאיר את הפרויקט ולמחוק את המשאבים בנפרד.
מחיקת המשאבים
כדי למחוק את אשכול Slurm:
כדי למחוק את הקטגוריה של Cloud Storage:
כדי למחוק תמונה של Packer, פותחים את דפדפן האינטרנט, עוברים לדף הבא, מחפשים את התמונה הספציפית ולוחצים על 'מחיקה'.
כדי למחוק את כל רשתות ה-VPC, כללי חומת האש, הנתבים, כתובות ה-IP ורשתות המשנה שמשויכים לפרויקט, מבצעים את הפעולות הבאות:
מחיקת פרויקט
כדי למחוק פרויקט Google Cloud :
gcloud projects delete PROJECT_ID