InfiniBand 설정 및 벤치마크
목표
이 튜토리얼을 완료하면:
- InfiniBand가 포함된 가상 클러스터 구성
- IB 연결 상태 확인 및 대역폭 측정
- NCCL 기반 멀티노드 통신 테스트
1단계: 가상 클러스터 구성
- 컴퓨트 > 가상 클러스터 목록에서 가상 클러스터 생성으로 클러스터를 만듭니다. 패브릭 타입은 InfiniBand를 선택합니다.
- 컴퓨트 > 가상머신 에서 가상 머신 생성으로 멤버 가상머신을 만듭니다. 이미지는 OFED(InfiniBand 드라이버) 포함 이미지, 인스턴스 타입은 클러스터와 동일한 GPU 타입을 선택합니다. 클러스터 시작에는 최소 2개 가상머신이 필요합니다.
- 만든 가상머신을 클러스터에 추가합니다. 가상머신은 중지됨 상태일 때만 클러스터에 연결할 수 있으므로 생성 후 한 번도 시작하지 않거나, 시작했다면 먼저 중지하세요.
- 가상 클러스터 상세 페이지에서 클러스터 시작을 클릭합니다.
- 각 가상머신을 개별 시작합니다.
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 타임아웃 | 방화벽 차단 | 클러스터 내부 트래픽 전체 허용 |