הפעלת NCCL באשכולות Slurm

בדף הזה מוסבר איך להריץ בדיקות של 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.

  1. מריצים את הפקודה הבאה מצומת הכניסה בספרייה ${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 צמתים.

  2. מעיינים בתוצאות. השדה 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

  1. מהספרייה המשותפת של צומת הכניסה (הצומת הזה נמצא בדרך כלל במיקום ${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
  2. אחרי שהסקריפט יורד, מייבאים תמונת Pytorch מ-NVIDIA container registry ויוצרים את בדיקות ה-NCCL. כדי לעשות זאת, מריצים את הפקודה הבאה:

    sbatch build-nccl-tests.sh

    הסקריפט הקודם מופעל באחד מהצמתים שלכם. הוא משתמש במתג --container-mounts כדי לטעון את הספרייה הנוכחית, $PWD, אל הספרייה /nccl בתוך הקונטיינר.

  3. מוודאים שבניית הבדיקה של 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.

  4. מוודאים שהתיקייה nccl-tests/build מכילה כמה קבצים בינאריים, כולל all_gather_perf,‏ all_reduce_perf,‏ reduce_scatter_perf ו-alltoall_perf.

  5. מורידים את סקריפט הבדיקה של 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 שהורדתם.

  6. מריצים את סקריפט הבדיקה של NCCL. הבדיקה יכולה להימשך כ-15 דקות או יותר.

    sbatch run-nccl-tests.sh
  7. מעיינים בתוצאות. הסקריפט יוצר קובץ slurm-XX.out שמכיל את התוצאה של מדד הביצועים nccl all_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

  1. מהספרייה המשותפת של צומת הכניסה (הצומת הזה נמצא בדרך כלל בכתובת ${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
  2. אחרי שהסקריפט יורד, מייבאים תמונת Pytorch מ-NVIDIA container registry ויוצרים את בדיקות ה-NCCL.

    sbatch build-nccl-tests.sh

    הסקריפט הקודם מופעל באחד מהצמתים שלכם. הוא משתמש במתג --container-mounts כדי לטעון את הספרייה הנוכחית, $PWD, אל הספרייה /nccl בתוך הקונטיינר.

  3. מוודאים שהבדיקה של 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.

  4. מוודאים שהתיקייה nccl-tests/build מכילה כמה קבצים בינאריים, כולל all_gather_perf,‏ all_reduce_perf,‏ reduce_scatter_perf ו-alltoall_perf.

  5. מורידים את סקריפט הבדיקה של 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 שהורדתם בשלב הקודם.

  6. מריצים את סקריפט הבדיקה של NCCL. הבדיקה יכולה להימשך כ-15 דקות או יותר.

    sbatch run-nccl-tests.sh
  7. מעיינים בתוצאות. הסקריפט יוצר קובץ slurm-XX.out שמכיל את התוצאה של מדד הביצועים של nccl all_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

  1. מהספרייה המשותפת של צומת הכניסה (הצומת הזה נמצא בדרך כלל בכתובת ${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
  2. אחרי שהסקריפט יורד, מייבאים תמונת Pytorch מ-NVIDIA container registry ויוצרים את בדיקות ה-NCCL. כדי לעשות זאת, מריצים את הפקודה הבאה:

    sbatch build-nccl-tests.sh

    הסקריפט הקודם מופעל באחד מהצמתים שלכם. הוא משתמש במתג --container-mounts כדי לטעון את הספרייה הנוכחית, $PWD, אל הספרייה /nccl בתוך הקונטיינר.

  3. מוודאים שהבדיקה של 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.

  4. מוודאים שהתיקייה nccl-tests/build מכילה כמה קבצים בינאריים, כולל all_gather_perf,‏ all_reduce_perf,‏ reduce_scatter_perf ו-alltoall_perf.

  5. מורידים את סקריפט הבדיקה של 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 שהורדתם.

  6. מריצים את סקריפט הבדיקה של NCCL. הבדיקה יכולה להימשך כ-15 דקות או יותר.

    sbatch run-nccl-tests.sh
  7. מעיינים בתוצאות. הסקריפט יוצר קובץ slurm-XX.out שמכיל את התוצאה של מדד הביצועים nccl all_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    : ###.##
    #
    

המאמרים הבאים