メインコンテンツまでスキップ

InfiniBand 설정 및 벤치마크

목표

이 튜토리얼을 완료하면:

  • InfiniBand가 포함된 가상 클러스터 구성
  • IB 연결 상태 확인 및 대역폭 측정
  • NCCL 기반 멀티노드 통신 테스트

1단계: 가상 클러스터 구성

  1. 컴퓨트 > 가상 클러스터 목록에서 가상 클러스터 생성으로 클러스터를 만듭니다. 패브릭 타입은 InfiniBand를 선택합니다.
  2. 컴퓨트 > 가상머신 에서 가상 머신 생성으로 멤버 가상머신을 만듭니다. 이미지는 OFED(InfiniBand 드라이버) 포함 이미지, 인스턴스 타입은 클러스터와 동일한 GPU 타입을 선택합니다. 클러스터 시작에는 최소 2개 가상머신이 필요합니다.
  3. 만든 가상머신을 클러스터에 추가합니다. 가상머신은 중지됨 상태일 때만 클러스터에 연결할 수 있으므로 생성 후 한 번도 시작하지 않거나, 시작했다면 먼저 중지하세요.
  4. 가상 클러스터 상세 페이지에서 클러스터 시작을 클릭합니다.
  5. 각 가상머신을 개별 시작합니다.

2단계: InfiniBand 상태 확인

가상머신에 SSH 접속 후:

# HCA 확인
ibstat
ibv_devinfo

# IB 포트 상태 확인 (Active여야 정상)
ibstat | grep -A5 "Port 1"

# 연결된 노드 확인
ibhosts

3단계: 대역폭 벤치마크

노드 A(서버)와 노드 B(클라이언트)에서 각각 실행합니다.

# 노드 A (서버)
ib_write_bw -d mlx5_0

# 노드 B (클라이언트): 노드 A의 IB IP 사용
ib_write_bw -d mlx5_0 <NODE_A_IB_IP>

정상 동작 시 클러스터의 IB 패브릭 사양에 가까운 대역폭이 측정되어야 합니다. 측정값이 사양 대비 현저히 낮으면 케이블·드라이버·클러스터 설정을 점검하세요.


4단계: NCCL All-Reduce 테스트

# nccl-tests 설치
git clone https://github.com/NVIDIA/nccl-tests.git
cd nccl-tests && make MPI=1 MPI_HOME=/usr/lib/x86_64-linux-gnu/openmpi

# 2노드 All-Reduce 테스트
mpirun -np 2 \
-H <NODE_A_IP>:1,<NODE_B_IP>:1 \
-x NCCL_IB_DISABLE=0 \
-x NCCL_DEBUG=INFO \
./build/all_reduce_perf -b 512M -e 4G -f 2 -g 1

5단계: torchrun 분산 학습 테스트

# 노드 A (마스터)
torchrun \
--nproc_per_node=8 \
--nnodes=2 \
--node_rank=0 \
--master_addr=<NODE_A_IP> \
--master_port=29500 \
train_distributed.py

# 노드 B (워커)
torchrun \
--nproc_per_node=8 \
--nnodes=2 \
--node_rank=1 \
--master_addr=<NODE_A_IP> \
--master_port=29500 \
train_distributed.py

트러블슈팅

증상원인해결
ibstat 명령 없음OFED 미설치 이미지OFED 포함 이미지로 가상머신 재생성
IB Port State가 Down클러스터 미시작가상 클러스터 시작 후 가상머신 재시작
NCCL 타임아웃방화벽 차단클러스터 내부 트래픽 전체 허용

다음 단계