בדף הזה מוסבר לאדמינים של פלטפורמות ולמהנדסי למידת מכונה (ML) איך ליצור אשכול Cluster Director שמנוהל על ידי Slurm, ולהגדיר אותו לעומסי עבודה של Pathways. בשלבים האלה מקצים אשכול עם פרוסות TPU v6e, צומת בקר של מעבד (CPU), מערכת קבצים משותפת של Google Cloud Managed Lustre וסביבת זמן הריצה של /home/pathways. Pathways לא מותקן מראש באשכול של Cluster Director: אחרי שיוצרים את האשכול, מורידים את הסקריפטים של Pathways לצומת ההתחברות ומריצים סקריפט הגדרות פעם אחת.
לפני שמתחילים
-
צריך לבחור את הכרטיסייה הרלוונטית לאופן שבו תכננתם להשתמש בדוגמאות בדף הזה:
gcloud
מפעילים את Cloud Shell במסוף Google Cloud .
בחלק התחתון של מסוף Google Cloud יתחיל סשן של Cloud Shell ותופיע הודעה של שורת הפקודה. Cloud Shell היא סביבת מעטפת שבה ה-CLI של Google Cloud מותקן ומוגדרים ערכים לפרויקט הקיים. הסשן יופעל תוך כמה שניות.
REST
כדי להשתמש בסביבת פיתוח מקומית בדוגמאות של API בארכיטקטורת REST שבדף הזה, צריך להשתמש בפרטי הכניסה שאתם נותנים ל-CLI של gcloud.
התקינו את ה-CLI של Google Cloud.
אם אתם משתמשים בספק זהויות חיצוני (IdP), קודם אתם צריכים להיכנס ל-CLI של gcloud באמצעות המאגר המאוחד לניהול זהויות.
מידע נוסף מופיע במאמר אימות לשימוש ב-REST במסמכי האימות של Google Cloud .
לפני שמתחילים
לפני שמתחילים, צריך לבצע את הפעולות הבאות:
- מתקינים את Google Cloud CLI.
- מפעילים את Hypercompute Cluster API.
- מוודאים שלחשבון המשתמש ולחשבון השירות שמוגדר כברירת מחדל ב-Compute Engine יש את התפקידים של ניהול הזהויות והרשאות הגישה (IAM) שנדרשים כדי ליצור אשכול ב-Cluster Director ולהתחבר אליו. רשימת התפקידים מופיעה בקטע לפני שמתחילים במדריך למתחילים של Cluster Director.
- יוצרים הזמנה של TPU v6e באזור שבו מתכננים ליצור את האשכול (לדוגמה, לפחות ארבע מכונות וירטואליות של
ct6e-standard-4tלשני פרוסות של2x4). - מגדירים
sudoללא סיסמה בצומתי האשכול לשחזור פרוסות אוטומטי. מבקשים מהאדמין להקצות לכם את התפקיד "התחברות אדמין למערכת ההפעלה של Compute" (roles/compute.osAdminLogin) בפרויקט. - יוצרים קטגוריה של Cloud Storage לנתונים זמניים ולפלט של עומסי העבודה של Pathways, ונותנים את התפקיד Storage Object User (
roles/storage.objectUser) בפרויקט לחשבון המשתמש ולחשבון השירות שמוגדר כברירת מחדל ב-Compute Engine.
הגדרת הסביבה המקומית
נכנסים באמצעות פרטי הכניסה של Google Cloud :
gcloud auth login
מגדירים את משתני הסביבה הבאים עם ערכים שמתאימים לעומס העבודה:
export PROJECT=PROJECT_ID export REGION=REGION export ZONE=ZONE export CLUSTER_ID=CLUSTER_ID export RESERVATION_NAME=RESERVATION_NAME
מחליפים את מה שכתוב בשדות הבאים:
-
PROJECT_ID: מזהה הפרויקט ב-Google Cloud . -
REGION: האזור שבו יוצרים את המשאבים. -
ZONE: האזור שבו יוצרים את המשאבים. -
CLUSTER_ID: שם האשכול. השם יכול להכיל עד 10 תווים, ורק מספרים ואותיות קטנות. -
RESERVATION_NAME: השם של ההזמנה של TPU v6e ב-ZONE.
יצירת אשכול ב-Cluster Director
בדוגמה הבאה, יוצרים אשכול עם שתי פרוסות TPU v6e 2x4 (ארבע מכונות וירטואליות ct6e-standard-4t) מההזמנה, וצומת מעבד אחד לבקר Pathways. כל הצמתים טוענים מערכת קבצים משותפת של Managed Lustre ב-/home. מידע נוסף על השדות בהגדרת האשכול זמין במאמר יצירת אשכול בהתאמה אישית.
יוצרים את האשכול באמצעות ה-API בארכיטקטורת REST:
יוצרים את גוף הבקשה:
cat <<EOF > "${CLUSTER_ID}_create.json" { "networkResources": { "net": { "config": { "newNetwork": { "network": "projects/${PROJECT}/global/networks/${CLUSTER_ID}-net" } } } }, "storageResources": { "home": { "config": { "newLustre": { "lustre": "projects/${PROJECT}/locations/${ZONE}/instances/${CLUSTER_ID}-lustre", "filesystem": "lustre", "capacityGb": "18000", "perUnitStorageThroughput": "500" } } } }, "computeResources": { "crtpu": { "config": { "newReservedInstances": { "reservation": "projects/${PROJECT}/zones/${ZONE}/reservations/${RESERVATION_NAME}" } } }, "crcpu": { "config": { "newOnDemandInstances": { "zone": "${ZONE}", "machineType": "n2-highmem-32" } } } }, "orchestrator": { "slurm": { "loginNodes": { "count": "1", "zone": "${ZONE}", "machineType": "n2-standard-16", "enableOsLogin": true, "enablePublicIps": true, "bootDisk": { "type": "pd-balanced", "sizeGb": "100" }, "storageConfigs": [ { "id": "home", "localMount": "/home" } ] }, "nodeSets": [ { "id": "nstpu", "computeId": "crtpu", "staticNodeCount": "4", "maxDynamicNodeCount": "0", "enablePublicIps": true, "resourcePolicyConfig": { "acceleratorTopology": "2x4" }, "computeInstance": { "bootDisk": { "type": "hyperdisk-balanced", "sizeGb": "100" } }, "storageConfigs": [ { "id": "home", "localMount": "/home" } ] }, { "id": "nscpu", "computeId": "crcpu", "staticNodeCount": "1", "maxDynamicNodeCount": "0", "enablePublicIps": true, "computeInstance": { "bootDisk": { "type": "pd-balanced", "sizeGb": "100", "image": "projects/clusterdirector-public-images/global/images/family/tpu-v6e-v5p-ubuntu2204-slurm2605-v20260902" } }, "storageConfigs": [ { "id": "home", "localMount": "/home" } ] } ], "partitions": [ { "id": "tpu", "nodeSetIds": ["nstpu"] }, { "id": "cpu", "nodeSetIds": ["nscpu"] } ], "defaultPartition": "tpu", "config": { "requeueExitCodes": [1, 2, 134, 137, 139, 143] } } } } EOFואז שולחים את הבקשה:
curl -s -X POST \ -H "Content-Type: application/json" \ -H "Authorization: Bearer $(gcloud auth print-access-token)" \ -d @"${CLUSTER_ID}_create.json" \ "https://hypercomputecluster.googleapis.com/v1alpha/projects/${PROJECT}/locations/${REGION}/clusters?clusterId=${CLUSTER_ID}"האשכול כולל את:
- מחיצה
tpu: קבוצת צמתים סטטית של מכונות וירטואליות שמורות של TPU v6e. staticNodeCountהוא מספר המכונות הווירטואליות, ו-acceleratorTopologyהוא הטופולוגיה של כל פרוסה. בכל מכונה וירטואלית מסוגct6e-standard-4tיש ארבעה צ'יפים, כך שבפרוסה מסוג2x4יש שתי מכונות וירטואליות. כדי להכין יותר פרוסות, צריך להכפיל: בשביל שתי פרוסות של2x4צריךstaticNodeCountשל4. - מחיצה
cpu: מכונה וירטואלית אחת על פי דרישה שמריצה את מנהל המשאבים של Pathways, את שרת ה-proxy של IFRT ואת הלקוח של MaxText. הסקריפטים של Pathways שולחים משימות למחיצה בשםcpu. המכונה הווירטואלית משתמשת בסוג המכונהn2-highmem-32כי שירות Pathways ו-MaxText צריכים ביחד עד 240GB של זיכרון בזמן שהם שומרים נקודות ביקורת. הוא גם משתמש בתמונה עם Slurm 26.05, שתומכת בפרוסות TPU, כי שירות Pathways שולח את משימות ה-TPU worker מה-VM הזה. -
requeueExitCodes: Slurm מוסיף מחדש לתור משימה שנסגרה עם אחד מהקודים האלה. ההגדרה הזו מאפשרת ל-Slurm להפעיל מחדש משימה של TPU worker כשמכונה וירטואלית כלשהי בפרוסה נקטעת, ולא רק הראשונה.
- מחיצה
מחכים עד שהאשכול יהיה מוכן. אפשר לעקוב אחרי ההתקדמות בדף Cluster Director במסוף Google Cloud , או לוודא שהערך של
reconcilingהואfalseבפלט של הפקודה הבאה:curl -s \ -H "Authorization: Bearer $(gcloud auth print-access-token)" \ "https://hypercomputecluster.googleapis.com/v1alpha/projects/${PROJECT}/locations/${REGION}/clusters/${CLUSTER_ID}"
הגדרת סביבת Pathways
סביבת Pathways נמצאת ב-/home/pathways במערכת הקבצים המשותפת, ולכן צריך להגדיר אותה פעם אחת לכל אשכול. הוא מכיל את קובצי האימג' של קונטיינר Pathways, סביבת Python עם JAX ו-pathwaysutils, ואת הסקריפטים של Pathways.
מתחברים לצומת ההתחברות. לדרכים אחרות להתחברות, ראו התחברות לאשכול.
gcloud compute ssh ${CLUSTER_ID}-login-001 \ --project=${PROJECT} \ --zone=${ZONE} \ --tunnel-through-iapמוודאים שהמחיצות
cpuו-tpuקיימות ונמצאות במצבidle:sinfo -o "%P %a %D %T %N %f"הפלט אמור להיראות כך:
PARTITION AVAIL NODES STATE NODELIST FEATURES tpu* up 4 idle ${CLUSTER_ID}-nstpu-[0-3] cpu up 1 idle ${CLUSTER_ID}-nscpu-0מורידים את הסקריפטים של Pathways לצומת ההתחברות:
mkdir -p ~/pathways-scripts && cd ~/pathways-scripts for f in setup_env.sh start_pathways.sh run_worker_slice.sh run_maxtext.sh; do curl -fsSLO "https://raw.githubusercontent.com/GoogleCloudPlatform/slurm-gcp/tpu-2605/pathways/scripts/${f}" doneהפקודה הזו מורידה את הסקריפטים הבאים:
-
setup_env.sh: הגדרה חד-פעמית של סביבת Pathways. -
start_pathways.sh: הפעלת שירות Pathways. -
run_worker_slice.sh: הפעלת ה-worker של Pathways לפרוסת TPU אחת (נשלח על ידיstart_pathways.sh). -
run_maxtext.sh: מריץ עומס עבודה לדוגמה לאימון MaxText.
-
מריצים את סקריפט ההגדרות. התהליך נמשך כ-5 דקות:
chmod +x *.sh ./setup_env.shהסקריפט שולף את תמונות השרת וה-proxy של Pathways, יוצר סביבת Python עם JAX,
pathwaysutilsו-MaxText, מעתיק את הסקריפטים אל/home/pathwaysומקשר את~/pathwaysאל/home/pathways. הוא מסתיים בפלט שדומה לזה:Environment ready: JAX 0.11.1אופציונלי: כדי לתת למשתמשים אחרים באשכול גישה לסביבת Pathways, צריך לבקש מהם לקשר את
/home/pathwaysלספריית הבית שלהם:ln -sfn /home/pathways ~/pathways
בשלב הזה, האשכול מוכן ל-Pathways. אתם מפעילים את שירות Pathways כחלק מהרצת עומס עבודה, כי עומסי עבודה באצווה ועומסי עבודה אינטראקטיביים מפעילים אותו עם הגדרות שונות. מידע נוסף זמין במאמרים הרצת עומס עבודה באצווה באמצעות Pathways והרצת עומס עבודה אינטראקטיבי באמצעות Pathways.
נתקלתם בבעיות? קראו את המאמר פתרון בעיות ב-Pathways ב-Cloud.
סידור וארגון
כדי להימנע מצבירת חיובים בחשבון Google Cloud על המשאבים שבהם השתמשתם בדף הזה, מחקו את האשכול של Cluster Director בסיום:
curl -s -X DELETE \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
"https://hypercomputecluster.googleapis.com/v1alpha/projects/${PROJECT}/locations/${REGION}/clusters/${CLUSTER_ID}"
המאמרים הבאים
- הרצת עומס עבודה באצווה באמצעות Pathways
- הרצת עומס עבודה אינטראקטיבי באמצעות Pathways
- אימון עמיד באמצעות Pathways
- העברת עומסי עבודה (workloads) של JAX ל-Pathways
- פתרון בעיות ב-Pathways ב-Cloud