GPU Interconnect Topology
마지막 수정:
collective operation은 추상적으로 보면 rank들이 tensor를 주고받는 연산이다. 하지만 실제 시간은 GPU들이 어떤 길로 연결되어 있는가에 크게 좌우된다.
같은 all-reduce
빠른 링크 위에서 실행 -> compute와 겹치거나 짧게 끝남
느린 링크 위에서 실행 -> 전체 step의 병목이 됨
그래서 분산 학습을 볼 때는 먼저 rank만 보는 것이 아니라, rank들이 어떤 물리 링크 위에 놓였는지도 봐야 한다.
세 가지 링크
한 서버 안과 서버 밖의 링크는 속도 차이가 크다.
GPU memory 안: HBM
같은 서버 안: NVLink 또는 PCIe
다른 서버 사이: InfiniBand 또는 Ethernet
대략적인 감각은 이렇다.
NVLink : 같은 노드 GPU 사이의 고속 링크
PCIe : 더 일반적인 장치 연결 버스
InfiniBand : 여러 GPU 서버를 잇는 클러스터 네트워크
Ethernet : 더 범용적인 네트워크, 보통 latency가 더 불리함
숫자는 세대와 장비에 따라 달라지지만, 중요한 순서는 보통 유지된다.
NVLink inside node > PCIe inside node > InfiniBand across nodes > Ethernet across nodes
nvidia-smi topo로 보기
NVIDIA GPU 서버에서는 topology를 먼저 확인할 수 있다.
nvidia-smi topo -m
출력은 GPU와 GPU 사이의 연결 종류를 matrix처럼 보여준다.
GPU0 <-> GPU1: NVLink로 직접 연결
GPU0 <-> GPU5: PCIe switch나 CPU를 거쳐 연결
GPU0 <-> NIC : 네트워크 카드와 얼마나 가까운지
이 정보는 단순한 하드웨어 설명이 아니다. 어떤 rank들을 같은 process group으로 묶을지, tensor parallel을 한 노드 안에 둘지, data parallel을 노드 밖으로 펼칠지에 영향을 준다.
collective 비용이 달라지는 이유
AllReduce를 예로 보자.
각 rank가 gradient shard를 보냄
다른 rank에서 온 값을 더함
최종 결과를 다시 모두가 가짐
이때 통신량이 같아도 링크가 다르면 시간이 달라진다.
NVLink 안에서 all-reduce:
같은 서버의 GPU들이 빠르게 주고받음
InfiniBand를 건너는 all-reduce:
노드 사이 링크를 지나야 해서 더 비쌈
그래서 tight coupling이 필요한 Tensor Parallelism은 되도록 같은 노드 안에 두고, 노드 사이에는 Data Parallelism처럼 상대적으로 덜 자주 동기화하는 축을 배치하는 경우가 많다.
확인
- rank와 process group만 알아도 collective 비용을 예측할 수 있는가?
- 같은 AllReduce라도 NVLink 안에서 실행될 때와 노드 밖으로 나갈 때 무엇이 달라지는가?
nvidia-smi topo -m은 어떤 질문에 답하기 위해 보는가?