컴퓨팅 전용으로 특화한 GPU. 그래서 생긴 NVLink
NVIDIA는 멀티 GPU를 급격하게 진행하고 있습니다. 현재 NVIDIA GPU 개발의 초점 중 하나는 멀티 GPU 구성에서의 성능 향상입니다. 이는 NVIDIA GPU의 인터커넥트 대역폭 변화를 보면 잘 드러납니다. NVIDIA GPU는 메모리 대역폭의 확장보다 칩 상호 연결 대역폭을 빠르게 끌어 올리고 있습니다. 즉, GPU의 실리콘 및 IO 핀을 상호 연결에 할당하고 있습니다.
구체적으로는 PCI Express 시대의 케플러 GPU에서 메모리 대역폭과 인터커넥트 대역폭 비율은 9:1이었습니다. 그것이 현재의 볼타 세대에선 3:1이 됐습니다. GPU와 GPU, 또는 GPU와 CPU의 연결 대역폭이 2세대만에 10배로 늘어나, 멀티 GPU에서 데이터 교환 성능이 크게 향상됐습니다.
NVIDIA GPU의 인터커넥트 대역폭 변화
이것은 NVIDIA GPU의 작업 부하의 변화에 따른 것입니다. 사실 지금까지도 HPC(High Performance Computing)의 영역에선 GPU에 광대역 상호 연결을 요구하고 있었습니다. 또 딥 러닝은 연산 모델의 확대가 이루어지며 멀티 GPU의 병목 현상을 낮출 필요가 생겼습니다. 이런 흐름에 NVIDIA는 맞춰나가고 있습니다.
NVIDIA의 멀티 GPU 전략은 NVIDIA의 GPU 제품 차별화와 밀접한 관련이 있습니다. NVIDIA는 컴퓨팅을 위한 GPU와 그래픽용 GPU의 두가지로 제품을 차별화시켰습니다. 케플러까지는 두 GPU가 한 종류였으나 이후엔 그래픽에 최적화된 맥스웰을 출시하면서 두가지로 나눴습니다. GPU 컴퓨팅에선 연산 성능을 끌어 올리고 HBM 메모리 도입으로 메모리 대역을 확장하며 NVLink로 인터커넥트 대역폭을 늘립니다. 반대로 말하면 제품을 두가지로 나눠 GPU 컴퓨텡에 최적화할 수 있었습니다.
2가지로 나눠 각각의 시장에 최적화한 NVIDIA
인터커넥트 대역폭이 급격히 성장하는 NVIDIA GPU
거대한 병렬 프로세서인 GPU는 메모리 대역폭을 많이 차지합니다. 그리고 GPU끼리 연계하려면 상대의 메모리에 액세스하기 위한 방대한 인터커넥트 대역폭이 필요합니다. 따라서 NVIDIA는 지난 3세대 동안 컴퓨팅 GPU 메이저 아키텍처에서 상호 연결 확장에 집중했습니다.
기존의 GPU는 PCI Express의 한계에 묶여 있었습니다. 기존의 GPU는 특수한 경우를 제외하면 PCI-E를 통해 칩과 칩을 연결했습니다. 호스트 CPU나 다른 GPU와 연결 모두 PCI-E에 의존합니다. 하지만 PCI-E의 속도는 느리게 발전해 왔습니다. 따라서 인터커넥트 대역폭은 GPU 컴퓨팅 성능과 메모리 대역폭의 향상을 따라가지 못했습니다. 그것이 멀티 GPU 구성의 병목이 됐고 CPU와 GPU를 혼합한 컴퓨팅 노드의 설계의 문제였습니다.
예를 들어 2세대 전의 케플러 GPU는 테슬라 K40(GK110/180)이 메모리 대역은 GDDR5 288GB/s, 인터커넥트는 PCI-E 3.0의물리 계층이 32GB/s였습니다. 메모리 대역폭이 인터커넥트보다 9배나 넓어 PCI-E에서 병목 현상이 생깁니다. FP32에서 4.2TFLOPS의 연산 성능이 겨우 32GB/s의 I/O에 연결됩니다. 그래픽카드 내부에선 빠르지만 밖으로 나오면 느려집니다. 따라서 GPU 연결에 한계가 있었습니다.
NVIDIA GPU의 3세대 동안 메모리와 인터커넥트 대역폭 변화
이전 세대인 파스칼 아키텍처 테슬라 P100(GP100)은 HBM2 메모리를 적층해 대역폭이 732GB/s로 올랐습니다. 연산 성능도 FP32에서 10.6TFLOPS로 높아졌습니다. 그리고 NVIDIA는 이 때 독자적인 칩 상호 연결인 NVLink를 도입했습니다. NVLink 1.0로 상호 연결 대역폭은 단번에 확장됐습니다.
NVLink로 GP100은 160GB/s의 인터커넥트 대역폭을 확보했습니다. GP100도 PCI-E 3.0을 탑재하지만 GPU 끼리의 연결이나 Power 시리즈 CPU와 연결은 NVLink를 씁니다. GP100의 NVLink는 1세대의 전송 속도가 1페어 단방향이 20Gbps입니다. NVLink는 각 포트마다 단방향 8쌍, 양방향 16쌍으로 구성됩니다. 따라서 NVLink 1.0에서 포트 당 전송 속도는 물리 계층 레벨에서 40GB/s가 됩니다. GP100은 NVLink 1.0을 4포트 갖춰 총 160GB/s의 대역폭이 나옵니다. 이제 메모리 대역폭 대비 NVLink 대역 비율은 4.6:1로 약 22 %가 됐습니다.
볼타 세대의 NVLink 2.0 구성
현재 볼타 아키텍처의 테슬라 V100(GV100)은 메모리 대역폭이 900GB/s로 올랐습니다. 그러나 인터커넥트 대역폭은 그 이상으로 상승했습니다. GV100는 6포트 NVLink을 구현해 NVLink 전송 속도도 25Gbps로 올랐습니다. 따라서 1포트 대역폭은 50GB/s가 되어 GPU의 총 대역폭은 6포트 × 50GB/s, 최대 300GB/s가 됩니다.
메모리 대역폭과 인터커넥트 대역폭의 비율은 3:1로 메모리 대역폭의 33%까지 인터커넥트 대역폭이 올랐습니다. 그래봣자 1/3이지만 HBM2 메모리의 대역폭 자차가 넓어서 300Gb/s의 인터커넥트는 상용 프로세서에서 비정상적인 수준입니다. PCI-E는 GV100에서도 여전히 32GB/s니 10배의 대역폭이 됩니다. NVLink와 PCI-E를 더하면 실제 대역은 332GB/s에 달합니다.
케플러에서 볼타까지 3세대 동안 NVIDIA GPU의 메모리 대역은 3배, 연산 성능은 FP32에서 3.7배가 됐지만 인터커넥트 대역폭은 10배 이상이 됐습니다. 이 비율을 보면 NVIDIA가 GPU 개발에서 어디에 초점을 두는지를 명확하게 알 수 있습니다.
볼타의 NVLink 유효 대역폭은 PCI-E의 10배 이상
HBM2의 로컬 메모리 대역폭과 비교하면 NVLink 대역은 1/3
Power 8/9는 NVLink에 직접 연결
NVLink의 큰 장점은 GPU끼리 직접 연결할 수 있다는 것입니다. 이게 아니어도 PCI-E 스위치를 사용하면 GPU끼리 연결할 수 있지만 대게는 CPU를 통해 PCI-E로 연결합니다. GPU 사이의 데이터 전송은 NVLink CPU를 거치지 않고 직접 연결함으로써 불필요한 단계 없이 낮은 레이턴시로 실행할 수 있게 됐습니다.
NVLink가 없으면 GPU끼리 연결하기 위해 CPU를 거치는 방법이 일반적이었습니다.
NVLink에 직접 연결해 GPU 사이의 데이터 전송이 쉬워졌습니다.
또한 NVLink을 지원하는 CPU는 GPU를 광대역에 접속할 수 있습니다. 여기에는 IBM의 Power8과 Power9가 있습니다. Power8는 NVLink 1.0, Power9는 NVLink 2.0을 지원합니다. 볼타 GV100 2개와 Power9의 조합은 각각 3포트의 NVLink에 연결되며, GV100끼리도 3포트 NVLink로 연결됩니다. 각각의 대역폭은 150GB/s가 됩니다.
IBM의 Power9
IBM의 Power8/9와 NVLink 연결하는 NVIDIA GPU
이 구성을 사용하는 IBM Power System AC922는 2개의 Power9와 4개의 볼타 GV100으로 구성됩니다. 또 CPU당 3개의 GV100을 연결한 6 GPU 구성 버전도 있습니다. 여기에는 각각의 칩 연결이 2포트에 100GB/s 대역폭이 됩니다. 또한 NVLink를 통한 연결에선 CPU와 GPU가 캐시 일관성을 유지합니다. 큰 틀에서 보면 NVLink은 앞으로 가속 포트라는 시대 흐름에 맞췄다고 생각할 수도 있습니다. IBM은 NVLink과 OpenCAPI에서 일반적인 PHY를 사용합니다.
IBM의 Power9과 GV100 조합
IBM의 GPU 컴퓨팅 시스템의 로드맵
IBM의 GPU 컴퓨팅 시스템 Power System AC922
2 CPU와 4 GPU 사이의 150GB/s 버전, 2 CPU와 6 GPU 사이의 100GB/s 버전
x86 CPU와 PCI Express 연결
NVLink가 없는 x86 CPU 시스템에서 NVLink는 GPU 사이의 연결에만 씁니다. x86 CPU와 접속은 PCI-E입니다. NVIDIA가 2016년에 발표한 GPU 컴퓨팅 시스템 DGX-1은 2 CPU와 8 GPU 시스템입니다. CPU와 GPU는 PCI-E를 통해 연결됩니다. 파스칼 GP100 기반이니 GPU끼리는 1포트 NVLink 1.0에 40GB/s로 연결됩니다. 또한 GPU끼리 NVLink에 직결하지 않는 조합도 있습니다.
DGX-1
NVLink에서 GPU를 직결할 수 없는 x86 CPU는 PCI-E에 연결
NVIDIA의 1세대 DGX-1의 구성
도쿄 공업 대학의 TSUBAME3.0. 파스칼 기반에 4 GPU를 NVLink에 연결, CPU와 PCI-E로 연결합니다. 그러나 츠바메 3.0은 노드 사이를 PCI-E 스위치를 통해 Omni-Path 4포트로 연결합니다.
2017년에 볼타 발표와 함게 나온 GV100 기반 DGX-1V는 GPU의 NVLink 포트가 6개로 늘어났습니다. NVLink 2.0은 1포트 대역이 50GB/s로 GPU끼리 2포트 조합도 가능합니다. 그러나 여전히 1포트 연결하는 GPU도 있고, 8개 이상의 GPU를 구성하려면 DGX-1V끼리 인피니밴드로 연결하면서 병목 현상이 생깁니다.
볼타 기반 GDX-1V의 구성
GPU 사이를 전체 대역으로 연결하기 위해 NVSwitch을 도입
NVIDIA는 NVLink의 도입 이후 4 GPU, 8 GPU로 멀티 GPU 구성을 확장했습니다. 그러나 DGX-1V까지 쓰려면 여전히 NVLink 포트 수가 부족하며, 6포트로도 GPU에게는 상당한 부담이 됩니다. 그래서 NVIDIA가 개발한 것이 NVLink 스위치인 NVSwitch입니다.
지금까지 NVIDIA GPU의 GPU 사이 연결
NVSwitch
NVSwitch의 목적은 16개의 GPU를 스위치를 통해 연결할 뿐만 아니라 GPU NVLink의 전체 대역폭인 300GB/s로 연결하는 것입니다. 이를 가능하게 만드려면 GPU를 모두전체 대역의 크로스바 스위치에 연결해야 합니다. 그럼 NVLink 108 포트에108x108 스위치를 만들어야 하지만 이건 기술적으로 불가능합니다.
1개의 스위치에 16개의 GPU가 전체 대역으로 연결
그래서 타협합니다. 예를 들면 4포트 NVLink에서 4개의 GPU끼리 직접 연결하고 나머지 2포트는 GPU 노드 사이를 스위치에서 연결하는 구성입니다. 그런데 NVIDIA는 GP100의 NVLink가 전체 대역으로 연결되길 고집했습니다. 그 결과 생긴 것이 18포트 NVLink의 NVSwitch를 6개 사용한 16 GPU 전체 대역폭 연결입니다.
NVIDIA의 DGX-1 DGX-1V, DGX-2의 구성
DGX-2 시스템 구성
6개 × 2세트 NVSwitch을 사용한 DGX-2
NVIDIA는 DGX-2 한장에 6개의 NVSwitch, 시스템 전체에 12개의 NVSwitch를 사용하면 16개의 GPU끼리 전체 대역폭으로 연결 가능하게 만들었습니다. GPU가 같은 기판의 다른 GPU에 액세스하려면 아래 그림대로 6개 스위치를 통해 300GB/s의 완전 대역폭으로 액세스합니다.
GPU가 다른 기판의 GPU에 액세스하는 경우에도 GPU는 6개의 NVLink 포트로 6개 NVSwitch에 액세스. 6개의 NVSwitch 칩이 다른 기판의 6개 NVSwitch 칩을 통해 스위치돼 6포트 액세스합니다. 양쪽 GPU의 6개 NVLink 포트를 최대한 사용하면 최대 300GB/s의 액세스가 가능합니다. 2개의 GPU 사이에서 데이터를 전송해도 논 블로킹 스위치니 전체 대역으로 액세스됩니다.
NVSwitch를 사용한 액세스. 위는 같은 기판의 GPU끼리 액세스. 아래는 다른 기판의 GPU끼리 액세스
여러 GPU에서 데이터를 전송해도 전체 대역을 액세스
이렇게 보면 DGX-2의 6개 x 2세트 NVSwitch이 작동함을 알 수 있습니다. 이를 이미지로 표현하면 아래처럼 됩니다. 하나의스위치 칩에서 GP100의 NVLink끼리 연결하는 건 불가능하니 스위치 칩을 분할했다는 의견도 있습니다.
거대한 스위치의 개념
NVSwitch가 GPU 노드에서 광대역 연결을 목적으로 만들어진 것처럼 보입니다. GPU의 NVLink 대역폭을 최대한 활용해 GPU 사이의 연결을 고집하고 있습니다. 앞으로 노드 사이의 연결까지 확장할지는 모르지만, 현재는 노드의 칩 사이를 초 광대역으로 연결하는 스위치입니다. 이건 인텔의 Omni-Path는 다른 발상입니다.
DGX-2는 16개의 GPU를 연결하는데 12개의 NVSwitch를 사용하지만 NVSwitch 포트의 구성만 보면 6개의 NVSwitch 칩으로 실현할 수 있습니다. NVIDIA는 DGX-2의 세미나와 NVIDIA Deep Learning Seminar 2018에서 12개의 NVSwitch로 구성한 이유를 설명합니다.
6개의 NVSwitch로 실현할 수 있는 DGX-2
현재 DGX-2는 8개의 GV100 GPU와 6개의 NVSwitch 기판을 사용, 2개의 기판을 NVLink에 연결해 16 GPU 구성을 실현합니다. 16개의 GPU와 6개의 NVSwitch를 하나의 보드에 장착하면 보드 설계와 신호 품질 유지가 어려워집니다. 또 시스템 쿨링에서도 기판을 분리하는 게 낫습니다. 그래서 전력을 많이 쓰는 NVSwitch 칩을 2개 달았습니다.
DGX-2의 실제 구성
제조 비용을 따지면 DGX-2의 구성은 매우 호화롭습니다. 거대한 GPU 16개에 20억개 트랜지스터의 스위치 칩을 12개 넣습니다. NVIDIA GPU가 그만큼 높게 팔리린다는 걸 배경에 두고 있는 GPU 서버입니다. 이런 기세를 잘 타고 있는 NVIDIA의 여유가 만들어낸 솔루션이라 할 수도 있습니다.
는것같습니다.. 수십년후에 엔비디아는 정말 더 괴물같은 회사가되어있지않을까하는생각이들어요..
인텔하고 경쟁할 큰양대산맥으로 커지지않을지합니다..ㅋ