Menjalankan NCCL di cluster Slurm

Halaman ini menjelaskan cara menjalankan pengujian NCCL di cluster Slurm. Untuk menggunakan lingkungan Slurm terkelola yang mencakup pengujian NCCL bawaan untuk memverifikasi kesehatan cluster, lihat Cluster Director.

Pilih langkah-langkah untuk jenis mesin Anda:

A4X dan A4

Pengujian berikut menggunakan Ramble, yang merupakan framework eksperimen multiplatform open source yang ditulis dalam Python dan digunakan untuk mengoordinasikan jalannya pengujian NCCL. Ramble dan dependensinya kompatibel dengan arsitektur ARM64 yang digunakan oleh mesin A4X.

Skrip yang digunakan untuk pengujian ini di-stage di /opt/apps/system_benchmarks pada node pengontrol Slurm dan tersedia untuk semua node dalam cluster. Menjalankan pengujian ini akan menginstal Ramble ke direktori /opt/apps/ramble.

  1. Dari node login di direktori ${HOME}, jalankan perintah berikut. Karena pengujian dapat memakan waktu sekitar 10 menit, atau lebih lama jika ada tugas lain dalam antrean, perintah berikut menggunakan nohup dan mengalihkan stdout/err ke file log .

    nohup bash /opt/apps/system_benchmarks/run-nccl-tests-via-ramble.sh >& nccl.log &

    Perintah ini membuat folder bernama nccl-tests_$(date +%s) yang menyimpan semua hasil pengujian. Tag tanggal memastikan bahwa folder unik dibuat berdasarkan setiap stempel waktu saat ini.

    Misalnya, jika cluster Anda memiliki 16 node, pengujian NCCL akan dijalankan untuk all-gather, all-reduce, dan reduce-scatter pada 2, 4, 8, dan 16 node.

  2. Tinjau hasilnya. nccl.log berisi log dari penyiapan dan menjalankan pengujian. Untuk melihat log ini, jalankan perintah berikut:

    tail -f nccl.log

    Anda juga dapat menggunakan Ctrl+C untuk menghentikan pengiriman output kapan saja. Di akhir nccl.log, output Anda akan terlihat seperti berikut:

    ...
    ---- 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 -------
    

    Semua skrip tugas Slurm dan log output nccl-tests disimpan di direktori nccl-tests_$(date +%s)/experiments. Ringkasan performa pengujian NCCL juga disimpan dalam file nccl-tests_${date +%s)/summary.tsv.

    Menghapus direktori nccl-tests_$(date +%s)/ akan menghapus semua file yang dihasilkan selama pengujian ini.

A3 Ultra

  1. Dari direktori bersama node login (node ini biasanya berada di ${HOME}), download skrip yang diperlukan untuk membuat pengujian NCCL dengan menjalankan perintah berikut:

    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. Setelah skrip didownload, impor image Pytorch dari NVIDIA container registry dan buat pengujian NCCL. Untuk melakukannya, jalankan perintah berikut:

    sbatch build-nccl-tests.sh

    Skrip sebelumnya berjalan di salah satu node Anda. Menggunakan switch --container-mounts untuk memasang direktori saat ini, $PWD, ke dalam direktori /nccl di dalam container.

  3. Pastikan pengujian NCCL dibuat. Untuk memverifikasi hal ini, jalankan perintah berikut:

    sacct -a

    Jika berhasil diselesaikan, output-nya akan mirip dengan berikut ini:

    JobID           JobName  Partition    Account  AllocCPUS      State ExitCode
    ------------ ---------- ---------- ---------- ---------- ---------- --------
    1            build-ncc+    a3ultra                   112  COMPLETED      0:0
    

    Jika build berhasil, Anda juga akan memiliki file bernama nvidia+pytorch+24.09-py3.sqsh di direktori tempat Anda menjalankan perintah bersama dengan direktori bernama nccl-tests.

  4. Pastikan folder nccl-tests/build berisi beberapa biner, termasuk all_gather_perf, all_reduce_perf, reduce_scatter_perf, dan alltoall_perf.

  5. Download skrip pengujian 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

    Untuk menjalankan tugas apa pun di cluster A3 Ultra, beberapa variabel lingkungan harus disetel agar dapat mengaktifkan jaringan berperforma tinggi dengan RDMA. Karena Anda menggunakan container enroot dalam prosedur ini untuk meluncurkan beban kerja, variabel ini harus ditetapkan di lingkungan container, bukan di lingkungan host. Variabel ini dapat diperiksa dalam skrip run-nccl-tests.sh yang baru saja Anda download.

  6. Jalankan skrip pengujian NCCL. Pengujian ini dapat memerlukan waktu sekitar 15 menit, atau lebih.

    sbatch run-nccl-tests.sh
  7. Tinjau hasilnya. Skrip menghasilkan file slurm-XX.out yang berisi hasil benchmark nccl all_gather_perf.

    Outputnya mirip dengan hal berikut ini:

    #
    #                                                              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. Dari direktori bersama node login (node ini biasanya berada di ${HOME}), download skrip yang diperlukan untuk membuat pengujian NCCL dengan menjalankan perintah berikut:

    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. Setelah skrip didownload, impor image Pytorch dari NVIDIA container registry dan buat pengujian NCCL.

    sbatch build-nccl-tests.sh

    Skrip sebelumnya berjalan di salah satu node Anda. Menggunakan switch --container-mounts untuk memasang direktori saat ini, $PWD, ke dalam direktori /nccl di dalam container.

  3. Pastikan pengujian NCCL dibuat:

    sacct -a

    Outputnya mirip dengan hal berikut ini:

    JobID           JobName  Partition    Account  AllocCPUS      State ExitCode
    ------------ ---------- ---------- ---------- ---------- ---------- --------
    1            build-ncc+    a3mega                   112  COMPLETED      0:0
    

    Setelah build selesai, nccl-tests directory akan dibuat. Direktori ini berisi file nvidia+pytorch+24.09-py3.sqsh. File .sqsh adalah image sistem file hanya baca yang dikompresi dan berfungsi sebagai format container standar untuk workload AI.

  4. Pastikan folder nccl-tests/build berisi beberapa biner, termasuk all_gather_perf, all_reduce_perf, reduce_scatter_perf, dan alltoall_perf.

  5. Download skrip pengujian 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

    Untuk menjalankan eksekusi tugas apa pun di cluster A3 Mega, Anda harus menetapkan sejumlah variabel lingkungan. Setelan ini memungkinkan jaringan berperforma tinggi dengan protokol GPUDirect-TCPXO. Karena Anda menggunakan container enroot dalam prosedur ini untuk meluncurkan beban kerja, variabel ini harus ditetapkan di lingkungan container, bukan di lingkungan host. Anda dapat memeriksa variabel ini dalam skrip run-nccl-tests.sh yang Anda download pada langkah sebelumnya.

  6. Jalankan skrip pengujian NCCL. Pengujian ini dapat memerlukan waktu sekitar 15 menit, atau lebih lama.

    sbatch run-nccl-tests.sh
  7. Tinjau hasilnya. Skrip menghasilkan file slurm-XX.out yang berisi hasil benchmark nccl all_gather_perf.

    Outputnya mirip dengan hal berikut ini:

    #
    #                                                              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 Tinggi

  1. Dari direktori bersama node login (node ini biasanya berada di ${HOME}), download skrip yang diperlukan untuk membuat pengujian NCCL dengan menjalankan perintah berikut:

    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. Setelah skrip didownload, impor image Pytorch dari NVIDIA container registry dan buat pengujian NCCL. Untuk melakukannya, jalankan perintah berikut:

    sbatch build-nccl-tests.sh

    Skrip sebelumnya berjalan di salah satu node Anda. Menggunakan switch --container-mounts untuk memasang direktori saat ini, $PWD, ke dalam direktori /nccl di dalam container.

  3. Pastikan pengujian NCCL dibuat:

    sacct -a

    Outputnya mirip dengan hal berikut ini:

    JobID           JobName  Partition    Account  AllocCPUS      State ExitCode
    ------------ ---------- ---------- ---------- ---------- ---------- --------
    1            build-ncc+    a3high                   112  COMPLETED      0:0
    

    Jika build berhasil, nccl-tests directory akan dibuat. Direktori ini berisi file nvidia+pytorch+24.09-py3.sqsh. File .sqsh adalah image sistem file hanya baca yang dikompresi dan berfungsi sebagai format container standar untuk workload AI.

  4. Pastikan folder nccl-tests/build berisi beberapa biner, termasuk all_gather_perf, all_reduce_perf, reduce_scatter_perf, dan alltoall_perf.

  5. Download skrip pengujian 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

    Untuk menjalankan eksekusi tugas apa pun di cluster A3 Tinggi, beberapa variabel lingkungan harus ditetapkan untuk mengaktifkan jaringan berperforma tinggi dengan GPUDirect-TCPX. Karena Anda menggunakan container enroot dalam prosedur ini untuk meluncurkan beban kerja, variabel ini harus ditetapkan di lingkungan container, bukan di lingkungan host. Anda dapat memeriksa variabel ini dalam skrip run-nccl-tests.sh yang baru saja Anda download.

  6. Jalankan skrip pengujian NCCL. Pengujian ini dapat memerlukan waktu sekitar 15 menit, atau lebih.

    sbatch run-nccl-tests.sh
  7. Tinjau hasilnya. Skrip menghasilkan file slurm-XX.out yang berisi hasil benchmark nccl all_gather_perf.

    Outputnya mirip dengan hal berikut ini:

    #
    #                                                              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    : ###.##
    #
    

Langkah berikutnya