Data Center / Cloud

NCCL Inspector로 AI 워크로드의 통신 성능 가시성 향상하기

Reading Time: 4 minutes

딥러닝 훈련이나 추론 워크로드에서 AllReduce, AllGather, ReduceScatter 같은 집합 연산(collective operation)을 사용할 때 NVIDIA Collective Communication Library(NCCL)을 많이 사용합니다. 하지만 실제 워크로드가 실행되는 동안 NCCL이 어떤 성능을 내고 있는지를 파악하기는 어렵습니다.

이번 글에서는 이 문제를 해결하기 위해 개발된 NCCL Inspector Profiler Plugin을 소개합니다. 이 도구는 분산 딥러닝 훈련 및 추론 워크로드에서 항상 활성화된 상태로 작동하면서도, 낮은 오버헤드로 성능을 종합적으로 관찰할 수 있는 방법을 제공합니다.

NCCL Inspector란?

NCCL Inspector는 통신자(communicator)와 집합 연산별로 상세한 성능 데이터와 메타데이터를 기록해 분석할 수 있게 해주는 프로파일링 및 분석 도구입니다. 이 도구는 크게 두 단계, 데이터 수집과 데이터 분석로 구성됩니다.

NCCL Inspector는 아래와 같은 질문에 대한 답을 찾는 데 도움을 줍니다:

  • 작업 내 성능 비교: Data Parallel과 Tensor Parallel 도메인에서 AllReduce, AllGather, ReduceScatter 같은 연산들은 각각 얼마나 잘 수행되고 있을까?
  • 작업 간 성능 비교: 어제 발생한 네트워크 혼잡이 집합 연산 성능 저하의 원인이었을까? 계산 성능이 떨어진 것도 그 때문일까?
  • 계산-통신 상관관계: 전체 연산 성능(TFLOPs)이 떨어졌다면, 네트워크 성능 저하가 원인이었을까?

NCCL Inspector는 통신자에 포함된 각 랭크의 집합 통신 대역폭과 실행 시간을 일정 간격으로 디스크에 기록합니다. 작업이 완료된 후에는 이 성능 데이터를 전체 실행 시간 동안 분석하고 상호 연관시켜, 다중 GPU 작업이 수행되는 동안 NCCL 집합 연산의 성능 특성을 파악합니다.

다중 GPU 및 다중 노드 환경에서의 통신에 핵심적인 역할을 하는 NCCL은, 이를 사용하는 모든 프레임워크에서 NCCL Inspector가 제공하는 상세한 가시성을 통해 성능 최적화에 도움을 받을 수 있습니다.

NCCL Inspector는 NCCL 2.23에서 도입된 플러그인 인터페이스를 활용하여, 상시 실행 가능한 형태의 가시성 확보를 가능하게 하면서도 성능에 미치는 영향을 최소화합니다.

데이터 수집 단계에서는 NCCL Inspector 라이브러리는 NCCL에 어떤 집합 이벤트를 기록해야 하는지를 지시합니다. 예를 들어, 딥러닝 프레임워크와 같은 사용자 애플리케이션은 NCCL_PROFILER_PLUGIN 환경 변수를 통해 해당 라이브러리를 로드할 수 있습니다. 이후 NCCL Inspector는 NCCL이 발행하는 이벤트를 수신해, 각 이벤트에 대한 구조화된 JSON 출력을 생성합니다. 이를 통해 NCCL 집합 연산의 성능 특성을 깊이 있게 분석할 수 있습니다.

작업 완료 후에는, NCCL 저장소에서 제공하는 예제 Python 스크립트를 통해 이 JSON 데이터를 분석하고 시각화할 수 있습니다. 해당 JSON 출력은 후속 분석 스크립트나 다양한 모니터링 플랫폼에 입력되어, 프로덕션 환경에서 실행된 NCCL의 성능에 대한 인사이트를 제공합니다.

NCCL Inspector의 주요 기능

NCCL Inspector는 다음과 같은 특장점 덕분에 AI 워크로드 분석에 유용합니다:

  • 통신 그룹별 추적(Per-communicator tracking): NCCL Inspector는 각 NCCL 통신 그룹(communicator)을 개별적으로 추적합니다. 이는 병렬화 도메인 등 다양한 목적의 통신 그룹이 동시에 사용되는 AI 워크로드와 같은 복잡한 분산 애플리케이션에서 특히 유용합니다.
  • 항상 켜져 있는 저오버헤드 구조(Always-on low overhead): NCCL Inspector는 오버헤드가 매우 낮은 성능 추적 방식을 사용하므로, 프로덕션 환경에서도 활성화된 상태로 실행할 수 있습니다. 이를 통해 성능 저하 없이 NCCL 성능을 지속적으로 관찰할 수 있습니다.
  • 성능 지표 제공(Performance metrics): NCCL Inspector는 다음과 같은 핵심 성능 지표를 계산하고 리포트합니다:
    • 알고리즘 대역폭 (Algorithmic bandwidth)
    • 버스 대역폭 (Bus bandwidth)
    • 마이크로초 단위의 실행 시간
    • 메시지 크기 및 집합 연산 종류
  • 네트워크 기술에 독립적인 설계(Network technology agnostic): NCCL Inspector는 NCCL의 플러그인 인터페이스를 활용해 통합되며, RoCE, InfiniBand(IB), EFA 등 NCCL이 지원하는 다양한 네트워크 기술에 구애받지 않고 동작합니다.

데이터 수집 구성

NCCL Inspector를 활성화하려면 몇 가지 환경 변수를 설정해야 합니다:

필수 변수:

  • NCCL_PROFILER_PLUGIN: 플러그인 라이브러리 바이너리 경로
  • NCCL_INSPECTOR_ENABLE=1
  • NCCL_INSPECTOR_DUMP_THREAD_INTERVAL_MICROSECONDS: 출력 기록 간격 설정

선택 변수:

  • NCCL_INSPECTOR_DUMP_DIR: 로그 출력 디렉토리
  • NCCL_INSPECTOR_DUMP_VERBOSE(Optional): 이벤트 트레이스 정보가 포함된 상세 출력 활성화

SLURM 환경 예시:

NCCL Inspector를 활성화하고 데이터 수집을 시작하려면, 아래 환경 변수 설정을 SLURM의 SBATCH 스크립트에 추가하세요:

export NCCL_PROFILER_PLUGIN=/path/to/nccl/ext-profiler/inspector/libnccl-profiler-inspector.so
export NCCL_INSPECTOR_ENABLE=1
export NCCL_INSPECTOR_DUMP_THREAD_INTERVAL_MICROSECONDS=500
export NCCL_INSPECTOR_DUMP_DIR=/path/to/logs/${SLURM_JOB_ID}/
 
srun your_nccl_application

출력 예시 형식

{
  "header": {
    "id": "0x7f8c496ae9f661",
    "rank": 2,
    "n_ranks": 8,
    "nnodes": 1
  },
  "metadata": {
    "inspector_output_format_version": "v4.0",
    "rec_mechanism": "profiler_plugin",
    "dump_timestamp_us": 1748030377748202,
    "hostname": "hostname",
    "pid": 1639453
  },
  "coll_perf": {
    "coll": "AllReduce",
    "coll_sn": 1407,
    "coll_msg_size_bytes": 17179869184,
    "coll_exec_time_us": 61974,
    "coll_algobw_gbs": 277.210914,
    "coll_busbw_gbs": 485.119099
  }
}

자세한 출력 (Verbose 모드)

NCCL_INSPECTOR_DUMP_VERBOSE=1을 설정하면 커널(SM) 단위의 이벤트 추적까지 포함된 자세한 로그가 출력됩니다:

{
  "header": {
    "id": "0xe62dedaa97644a", //communicator info
    "rank": 4, // communicator id
    "n_ranks": 8,
    "nnodes": 1
  },
  "metadata": {
    "inspector_output_format_version": "v4.0",
    "git_rev": "9019a1912-dirty",
    "rec_mechanism": "nccl_profiler_interface",
    "dump_timestamp_us": 1752867229276385,
    "hostname": "hostname",
    "pid": 438776
  },
  "coll_perf": {
    "coll": "ReduceScatter",
    "coll_sn": 1231,
    "coll_msg_size_bytes": 2147483648,
    "coll_exec_time_us": 41057,
    "coll_timing_source": "kernel_gpu",
    "coll_algobw_gbs": 418.439467,
    "coll_busbw_gbs": 366.134533,
    "event_trace_sn": {
      "coll_start_sn": 1,
      "coll_stop_sn": 2,
      "kernel_events": [
        {
          "channel_id": 0,
          "kernel_start_sn": 3,
          "kernel_stop_sn": 48,
          "kernel_record_sn": 47
        }
      ]
    },
    "event_trace_ts": {
      "coll_start_ts": 1752867229235059,
      "coll_stop_ts": 1752867229235064,
      "kernel_events": [
        {
          "channel_id": 0,
          "kernel_start_ts": 1752867229235181,
          "kernel_stop_ts": 1752867229275811,
          "kernel_record_ts": 1752867229275811
        }
      ]
    }
  }
}

데이터 분석 단계

NCCL Inspector는 포괄적인 성능 분석 및 시각화 도구 예제를 포함하고 있어, 로그 파일을 처리하고 상세한 성능 리포트를 생성할 수 있습니다. 이 중 Performance Summary Exporter 도구는 집합 통신 성능에 대한 다양한 시각화와 통계 분석 결과를 제공합니다.

Performance Summary Exporter

Performance Summary Exporter는 독립 실행형 Python 기반 분석 도구로, 경로: ext-profiler/inspector/exporter/example/ 에 위치합니다. 이 도구는 다음과 같은 작업을 수행합니다:

  • .log, .log.gz, .jsonl, .jsonl.gz 등 다양한 형식의 NCCL Inspector 로그 파일을 처리
  • 데이터를 Parquet 형식으로 변환해 효율적인 분석 지원
  • 집합 연산(collective operations)에 대한 통계 요약 정보 생성
  • 산점도, 히스토그램, 박스 플롯 등 다양한 시각화 결과 생성
  • 통신 패턴을 다음과 같이 분류
    • single-rank
    • nvlink-only
    • hca-only
    • mixed

대시보드 통합

NVIDIA 팀은 NCCL Inspector에서 수집한 데이터를 대시보드에 통합하여, SLURM 작업 단위로 NCCL 성능을 한눈에 확인할 수 있는 개요 정보를 제공합니다.

그림 1. Elastic 대시보드와 통합된 작업별 집합 통신 성능 정보
그림 2. 집합 연산 유형별 성능, 예: 텐서 병렬화를 위해 사용된 NVLink 전용 집합 연산의 성능

활용 사례 및 적용 분야

NCCL Inspector는 성능 분석, 연구 및 개발, 프로덕션 모니터링 등 다양한 분야에서 활용할 수 있습니다.

성능 분석

NCCL Inspector는 집합 통신 성능을 정밀하게 분석할 수 있도록 지원하여, 분산 학습 워크로드에서 병목 현상을 식별하고 최적화 기회를 발견하는 데 도움을 줍니다.

연구 및 개발

연구자들은 Inspector가 제공하는 상세한 이벤트 트레이스와 성능 지표를 활용해 새로운 통신 패턴이나 알고리즘을 개발할 수 있습니다.

프로덕션 모니터링

Inspector는 상시 활성화 가능한 구조이기 때문에, 프로덕션 워크로드를 지속적으로 모니터링하며 시간에 따른 통신 성능 변화를 분석하는 데 적합합니다.

NCCL Inspector 시작하기

NCCL Inspector는 분산 학습 워크로드에서 집합 통신 성능을 이해하고 최적화하는 데 유용한 강력한 도구입니다. 오버헤드가 낮아 프로덕션 환경에서도 안정적으로 사용할 수 있으며, 상세한 이벤트 트레이스와 성능 지표를 통해 통신 패턴에 대한 심층 분석이 가능합니다.

NCCL Inspector를 시작하고 더 자세한 정보를 확인하려면, NVIDIA/nccl NCCL GitHub 리포지토리와 NVIDIA Magnum IO 문서를 참고하세요.

Discuss (0)

Tags