GPU Interconnect Topology

마지막 수정:

distributedcollectivetopologynvlinkpcieinfiniband

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은 어떤 질문에 답하기 위해 보는가?