Slurm 클러스터에서 NCCL 실행

이 페이지에서는 Slurm 클러스터에서 NCCL 테스트를 실행하는 방법을 설명합니다. 클러스터 상태를 확인하기 위한 기본 제공 NCCL 테스트가 포함된 관리형 Slurm 환경을 사용하려면 클러스터 디렉터를 대신 참고하세요.

머신 유형에 해당하는 단계를 선택합니다.

A4X 및 A4

다음 테스트에서는 NCCL 테스트 실행을 조정하는 데 사용되는 Python으로 작성된 오픈소스 멀티 플랫폼 실험 프레임워크인 Ramble을 사용합니다. Ramble과 종속 항목은 A4X 머신에서 사용하는 ARM64 아키텍처와 호환됩니다.

이 테스트에 사용된 실행 스크립트는 Slurm 컨트롤러 노드의 /opt/apps/system_benchmarks에 스테이징되며 클러스터의 모든 노드에서 사용할 수 있습니다. 이 테스트를 실행하면 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개 있는 경우 2, 4, 8, 16개 노드에서 all-gather, all-reduce, reduce-scatter에 대해 NCCL 테스트가 실행됩니다.

  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. 스크립트가 다운로드되면 NVIDIA 컨테이너 레지스트리에서 Pytorch 이미지를 가져오고 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
    

    빌드에 성공하면 명령어를 실행한 디렉터리에 nccl-tests이라는 디렉터리와 함께 nvidia+pytorch+24.09-py3.sqsh이라는 파일도 있어야 합니다.

  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. 결과를 검토합니다. 스크립트는 nccl all_gather_perf 벤치마크 결과를 포함하는 slurm-XX.out 파일을 출력합니다.

    출력은 다음과 비슷합니다.

    #
    #                                                              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. 스크립트가 다운로드되면 NVIDIA 컨테이너 레지스트리에서 Pytorch 이미지를 가져오고 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
    

    빌드가 완료되면 nccl-tests directory가 생성됩니다. 이 디렉터리에는 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. 결과를 검토합니다. 스크립트는 nccl all_gather_perf 벤치마크 결과를 포함하는 slurm-XX.out 파일을 출력합니다.

    출력은 다음과 비슷합니다.

    #
    #                                                              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. 스크립트가 다운로드되면 NVIDIA 컨테이너 레지스트리에서 Pytorch 이미지를 가져오고 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 directory이 생성됩니다. 이 디렉터리에는 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. 결과를 검토합니다. 스크립트는 nccl all_gather_perf 벤치마크 결과를 포함하는 slurm-XX.out 파일을 출력합니다.

    출력은 다음과 비슷합니다.

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

다음 단계