All-Reduce를 쉽게 이해하기

여러 GPU가 같은 모델을 나눠 학습할 때 각 GPU가 계산한 gradient를 합치고 다시 공유해야 합니다. 이 대표적인 집단 통신이 All-Reduce입니다.

3줄 요약
분산 학습에서 All-Reduce가 하는 일과 네트워크 병목이 되는 이유를 설명합니다.
이 글은 개념뿐 아니라 실제 인프라에서 어디에 쓰이는지까지 연결해 설명합니다.

4개 GPU 예시

GPU0: 2 GPU1: 3 GPU2: 5 GPU3: 4 ↓ Reduce (합산) 총합 = 14 ↓ Broadcast/분배 모든 GPU가 14를 갖음

왜 중요한가

GPU가 계산을 빨리 끝내더라도 gradient 동기화가 끝나지 않으면 다음 step으로 진행할 수 없습니다. 그래서 대규모 학습에서는 통신 시간이 전체 학습 시간에서 큰 비중을 차지할 수 있습니다.

Ring과 Tree 방식

All-Reduce는 여러 알고리즘으로 구현될 수 있습니다. Ring은 링크를 고르게 활용하기 좋고, Tree 계열은 지연시간 측면에서 장점이 있을 수 있습니다. 실제 라이브러리는 메시지 크기와 토폴로지에 따라 전략을 선택합니다.

NCCL과 네트워크의 관계

NCCL은 NVLink, PCIe, InfiniBand, RoCE 같은 실제 링크 위에서 집단 통신을 수행합니다. 따라서 'NCCL 성능'은 소프트웨어만의 문제가 아니라 토폴로지와 네트워크 품질의 결과입니다.

자주 묻는 질문

All-Gather와 뭐가 다른가요?

All-Gather는 각 GPU가 가진 서로 다른 조각을 모아 전체를 공유합니다. All-Reduce는 값을 합산·평균 같은 연산으로 결합한 뒤 모두에게 배포합니다.

GPU 수가 늘면 All-Reduce가 더 느려지나요?

통신량과 동기화 복잡도가 늘 수 있습니다. 그래서 고속 패브릭과 토폴로지 최적화가 중요합니다.