בדף הזה מוסבר איך להריץ בדיקות של NCCL באשכול Slurm. כדי להשתמש בסביבת Slurm מנוהלת שכוללת בדיקות NCCL מובנות לאימות תקינות האשכול, אפשר לעיין במאמר בנושא Cluster Director.
בוחרים את השלבים שמתאימים לסוג המכונה:
A4X Max, A4X ו-A4
בבדיקה הבאה נעשה שימוש ב-Ramble, שהוא framework ניסויי רב-פלטפורמות בקוד פתוח שנכתב ב-Python ומשמש לתיאום ההפעלה של בדיקות NCCL. Ramble והתלויות שלו תואמים לארכיטקטורת ARM64 שמשמשת במכשירי A4X Max ובמכשירי A4X.
סקריפטים להרצה שמשמשים לבדיקה הזו מועלים ל-staging ב-/opt/apps/system_benchmarks בצומת של בקר Slurm, והם זמינים לכל הצמתים באשכול. הפעלת הבדיקה הזו מתקינה את Ramble בספרייה /opt/apps/ramble.
מריצים את הפקודה הבאה מצומת הכניסה בספרייה ${HOME}. הבדיקה יכולה להימשך כ-10 דקות, או יותר אם יש משימות אחרות בתור. לכן, הפקודה הבאה משתמשת ב-
nohupומפנה אתstdout/errלקובץ יומן.nohup bash /opt/apps/system_benchmarks/run-nccl-tests-via-ramble.sh >& nccl.log &
הפקודה הזו יוצרת תיקייה בשם
nccl-tests_$(date +%s)שבה מאוחסנות כל תוצאות הבדיקה. תג התאריך מבטיח שתיקייה ייחודית תיווצר על סמך כל חותמת זמן נוכחית.לדוגמה, אם באשכול יש 16 צמתים, בדיקות NCCL מופעלות עבור
all-gather,all-reduceו-reduce-scatterב-2, 4, 8 ו-16 צמתים.מעיינים בתוצאות. השדה
nccl.logמכיל את היומנים מההגדרה ומההפעלה של הבדיקה. כדי לראות את היומנים האלה, מריצים את הפקודה הבאה:tail -f nccl.log
אפשר גם להשתמש ב-
Ctrl+Cכדי להפסיק את המעקב אחרי הפלט בכל שלב. בסוףnccl.log, הפלט אמור להיראות כך:... ---- SUMMARY for >1GB Message Sizes ---- workload n_nodes msg_size busbw all-gather 2 1073741824 ###.## all-gather 2 2147483648 ###.## all-gather 2 4294967296 ###.## all-gather 2 8589934592 ###.## ... all-reduce 2 1073741824 ###.## ... reduce-scatter 2 1073741824 ###.## ... -------- Benchmarking Complete -------
כל סקריפטים של משימות Slurm ויומני הפלט של nccl-tests מאוחסנים בספרייה
nccl-tests_$(date +%s)/experiments. סיכום של ביצועי הבדיקה של NCCL נשמר גם בקובץnccl-tests_${date +%s)/summary.tsv.הסרת הספרייה
nccl-tests_$(date +%s)/תגרום להסרה של כל הקבצים שנוצרו במהלך הבדיקות האלה.
A3 Ultra
מהספרייה המשותפת של צומת הכניסה (הצומת הזה נמצא בדרך כלל במיקום
${HOME}), מורידים את הסקריפט שנדרש לבניית בדיקת NCCL על ידי הרצת הפקודה הבאה:wget -np -nd https://raw.githubusercontent.com/GoogleCloudPlatform/cluster-toolkit/refs/heads/main/examples/machine-learning/a3-ultragpu-8g/nccl-tests/build-nccl-tests.sh
אחרי שהסקריפט יורד, מייבאים תמונת Pytorch מ-NVIDIA container registry ויוצרים את בדיקות ה-NCCL. כדי לעשות זאת, מריצים את הפקודה הבאה:
sbatch build-nccl-tests.sh
הסקריפט הקודם מופעל באחד מהצמתים שלכם. הוא משתמש במתג
--container-mountsכדי לטעון את הספרייה הנוכחית,$PWD, אל הספרייה/ncclבתוך הקונטיינר.מוודאים שבניית הבדיקה של NCCL הושלמה. כדי לבדוק זאת, מריצים את הפקודה הבאה:
sacct -a
אם הפעולה מסתיימת בהצלחה, הפלט דומה לזה:
JobID JobName Partition Account AllocCPUS State ExitCode ------------ ---------- ---------- ---------- ---------- ---------- -------- 1 build-ncc+ a3ultra 112 COMPLETED 0:0
אם הבנייה הצליחה, אמור להיות גם קובץ בשם
nvidia+pytorch+24.09-py3.sqshבספרייה שבה הפעלתם את הפקודה, וגם ספרייה בשםnccl-tests.מוודאים שהתיקייה
nccl-tests/buildמכילה כמה קבצים בינאריים, כוללall_gather_perf,all_reduce_perf,reduce_scatter_perfו-alltoall_perf.מורידים את סקריפט הבדיקה של NCCL.
wget -np -nd https://raw.githubusercontent.com/GoogleCloudPlatform/cluster-toolkit/refs/heads/main/examples/machine-learning/a3-ultragpu-8g/nccl-tests/run-nccl-tests.sh
כדי להריץ עבודה כלשהי באשכול A3 Ultra, צריך להגדיר כמה משתני סביבה כדי להפעיל רשתות בעלות ביצועים גבוהים עם RDMA. בגלל שמשתמשים במיכלים של enroot בתהליך הזה כדי להפעיל עומסי עבודה, צריך להגדיר את המשתנים האלה בסביבת המיכל ולא בסביבת המארח. אפשר לבדוק את המשתנים האלה בסקריפט
run-nccl-tests.shשהורדתם.מריצים את סקריפט הבדיקה של NCCL. הבדיקה יכולה להימשך כ-15 דקות או יותר.
sbatch run-nccl-tests.sh
מעיינים בתוצאות. הסקריפט יוצר קובץ
slurm-XX.outשמכיל את התוצאה של מדד הביצועים ncclall_gather_perf.הפלט אמור להיראות כך:
# # out-of-place in-place # size count type redop root time algbw busbw #wrong time algbw busbw #wrong # (B) (elements) (us) (GB/s) (GB/s) (us) (GB/s) (GB/s) 268435456 4194304 float none -1 ##### ###.## ###.## N/A ###### ###.## ###.## 0 536870912 8388608 float none -1 ##### ###.## ###.## N/A ###### ###.## ###.## 0 1073741824 16777216 float none -1 ##### ###.## ###.## N/A ###### ###.## ###.## 0 2147483648 33554432 float none -1 ##### ###.## ###.## N/A ###### ###.## ###.## 0 4294967296 67108864 float none -1 ##### ###.## ###.## N/A ###### ###.## ###.## 0 8589934592 134217728 float none -1 ##### ###.## ###.## N/A ###### ###.## ###.## 0 # Out of bounds values : 0 OK # Avg bus bandwidth : ###.## #
A3 Mega
מהספרייה המשותפת של צומת הכניסה (הצומת הזה נמצא בדרך כלל בכתובת
${HOME}), מורידים את הסקריפט שנדרש כדי ליצור את בדיקת NCCL על ידי הרצת הפקודה הבאה:wget -np -nd https://raw.githubusercontent.com/GoogleCloudPlatform/cluster-toolkit/refs/heads/main/examples/machine-learning/a3-megagpu-8g/nccl-tests/build-nccl-tests.sh
אחרי שהסקריפט יורד, מייבאים תמונת Pytorch מ-NVIDIA container registry ויוצרים את בדיקות ה-NCCL.
sbatch build-nccl-tests.sh
הסקריפט הקודם מופעל באחד מהצמתים שלכם. הוא משתמש במתג
--container-mountsכדי לטעון את הספרייה הנוכחית,$PWD, אל הספרייה/ncclבתוך הקונטיינר.מוודאים שהבדיקה של NCCL נוצרה:
sacct -a
הפלט אמור להיראות כך:
JobID JobName Partition Account AllocCPUS State ExitCode ------------ ---------- ---------- ---------- ---------- ---------- -------- 1 build-ncc+ a3mega 112 COMPLETED 0:0
אחרי שה-build מסתיים, נוצרת הספרייה
nccl-tests. בספרייה הזו יש את הקובץnvidia+pytorch+24.09-py3.sqsh. קובץ.sqshהוא תמונה דחוסה של מערכת קבצים לקריאה בלבד, שמשמשת כפורמט הקונטיינר הסטנדרטי לעומסי עבודה של AI.מוודאים שהתיקייה
nccl-tests/buildמכילה כמה קבצים בינאריים, כוללall_gather_perf,all_reduce_perf,reduce_scatter_perfו-alltoall_perf.מורידים את סקריפט הבדיקה של NCCL:
wget -np -nd https://raw.githubusercontent.com/GoogleCloudPlatform/cluster-toolkit/refs/heads/main/examples/machine-learning/a3-megagpu-8g/nccl-tests/run-nccl-tests.sh
כדי להריץ משימה באשכול A3 Mega, צריך להגדיר כמה משתני סביבה כדי להפעיל רשת עם ביצועים גבוהים באמצעות פרוטוקול GPUDirect-TCPXO. בפרוצדורה הזו משתמשים במאגרי enroot כדי להפעיל עומסי עבודה, ולכן צריך להגדיר את המשתנים האלה בסביבת המאגר ולא בסביבת המארח. אפשר לבדוק את המשתנים האלה בסקריפט
run-nccl-tests.shשהורדתם בשלב הקודם.מריצים את סקריפט הבדיקה של NCCL. הבדיקה יכולה להימשך כ-15 דקות או יותר.
sbatch run-nccl-tests.sh
מעיינים בתוצאות. הסקריפט יוצר קובץ
slurm-XX.outשמכיל את התוצאה של מדד הביצועים של ncclall_gather_perf.הפלט אמור להיראות כך:
# # out-of-place in-place # size count type redop root time algbw busbw #wrong time algbw busbw #wrong # (B) (elements) (us) (GB/s) (GB/s) (us) (GB/s) (GB/s) 268435456 4194304 float none -1 ##### ###.## ###.## N/A ###### ###.## ###.## 0 536870912 8388608 float none -1 ##### ###.## ###.## N/A ###### ###.## ###.## 0 1073741824 16777216 float none -1 ##### ###.## ###.## N/A ###### ###.## ###.## 0 2147483648 33554432 float none -1 ##### ###.## ###.## N/A ###### ###.## ###.## 0 4294967296 67108864 float none -1 ##### ###.## ###.## N/A ###### ###.## ###.## 0 8589934592 134217728 float none -1 ##### ###.## ###.## N/A ###### ###.## ###.## 0 # Out of bounds values : 0 OK # Avg bus bandwidth : ###.## #
A3 High
מהספרייה המשותפת של צומת הכניסה (הצומת הזה נמצא בדרך כלל בכתובת
${HOME}), מורידים את הסקריפט שנדרש כדי ליצור את בדיקת NCCL באמצעות הפעלת הפקודה הבאה:wget -np -nd https://raw.githubusercontent.com/GoogleCloudPlatform/cluster-toolkit/refs/heads/main/examples/machine-learning/a3-highgpu-8g/nccl-tests/build-nccl-tests.sh
אחרי שהסקריפט יורד, מייבאים תמונת Pytorch מ-NVIDIA container registry ויוצרים את בדיקות ה-NCCL. כדי לעשות זאת, מריצים את הפקודה הבאה:
sbatch build-nccl-tests.sh
הסקריפט הקודם מופעל באחד מהצמתים שלכם. הוא משתמש במתג
--container-mountsכדי לטעון את הספרייה הנוכחית,$PWD, אל הספרייה/ncclבתוך הקונטיינר.מוודאים שהבדיקה של NCCL נוצרה:
sacct -a
הפלט אמור להיראות כך:
JobID JobName Partition Account AllocCPUS State ExitCode ------------ ---------- ---------- ---------- ---------- ---------- -------- 1 build-ncc+ a3high 112 COMPLETED 0:0
אם הבנייה תצליח, תיצור הספרייה
nccl-tests. בספרייה הזו יש את הקובץnvidia+pytorch+24.09-py3.sqsh. קובץ.sqshהוא תמונה דחוסה של מערכת קבצים לקריאה בלבד, שמשמשת כפורמט הקונטיינר הסטנדרטי לעומסי עבודה של AI.מוודאים שהתיקייה
nccl-tests/buildמכילה כמה קבצים בינאריים, כוללall_gather_perf,all_reduce_perf,reduce_scatter_perfו-alltoall_perf.מורידים את סקריפט הבדיקה של NCCL:
wget -np -nd https://raw.githubusercontent.com/GoogleCloudPlatform/cluster-toolkit/refs/heads/main/examples/machine-learning/a3-highgpu-8g/nccl-tests/run-nccl-tests.sh
כדי להריץ עבודה כלשהי באשכול A3 High, צריך להגדיר כמה משתני סביבה כדי להפעיל רשתות עם ביצועים גבוהים באמצעות GPUDirect-TCPX. בגלל שמשתמשים במיכלים של enroot בתהליך הזה כדי להפעיל עומסי עבודה, צריך להגדיר את המשתנים האלה בסביבת המיכל ולא בסביבת המארח. אפשר לבדוק את המשתנים האלה בסקריפט
run-nccl-tests.shשהורדתם.מריצים את סקריפט הבדיקה של NCCL. הבדיקה יכולה להימשך כ-15 דקות או יותר.
sbatch run-nccl-tests.sh
מעיינים בתוצאות. הסקריפט יוצר קובץ
slurm-XX.outשמכיל את התוצאה של מדד הביצועים ncclall_gather_perf.הפלט אמור להיראות כך:
# # out-of-place in-place # size count type redop root time algbw busbw #wrong time algbw busbw #wrong # (B) (elements) (us) (GB/s) (GB/s) (us) (GB/s) (GB/s) 268435456 4194304 float none -1 ##### ###.## ###.## N/A ###### ###.## ###.## 0 536870912 8388608 float none -1 ##### ###.## ###.## N/A ###### ###.## ###.## 0 1073741824 16777216 float none -1 ##### ###.## ###.## N/A ###### ###.## ###.## 0 2147483648 33554432 float none -1 ##### ###.## ###.## N/A ###### ###.## ###.## 0 4294967296 67108864 float none -1 ##### ###.## ###.## N/A ###### ###.## ###.## 0 8589934592 134217728 float none -1 ##### ###.## ###.## N/A ###### ###.## ###.## 0 # Out of bounds values : 0 OK # Avg bus bandwidth : ###.## #
המאמרים הבאים
- כדי להבין את תוצאות הבדיקה ולפתור בעיות, אפשר לעיין במאמר בנושא איסוף והבנה של יומני NCCL לצורך פתרון בעיות.
- מעקב אחרי מכונות ב-Compute Engine ואשכולות Slurm.
- מידע נוסף על פתרון בעיות שקשורות לביצועים איטיים