NVIDIA의 HGX-2
NVIDIA가 NVSwitch를 사용한 HGX-2를 발표
NVIDIA CEO 겸 설립자인 젠슨황은 컴퓨텍스 타이페이에 맞춰 GTC 타이완에서 발표한 최대 16 GPU 구성의 GPU 가속장치 HGX-2를 공개했습니다.
HGX-2 자체는 GTC 2018에서 공개한 GPU 컴퓨터 DGX-2의 GPU 노드 보드를 뽑아낸 것입니다. 볼타 아키텍처의 테슬라 V100(GV100), 32GB HBM 메모리 8개에, NVLink 스위치 칩인 NVSwitch 6개를 하나의 GPU 기판에 통합했습니다.
하나의 보드에서 8개의 GPU, 2개의 보드를 NVSwitch를 통해 NVLink로 연결하면 16개의 GPU 구성이 나옵니다. 서버를 위한 GPU 가속입니다.
NVIDIA의 DGX-2
AI에서 HPC(High Performance Computing)까지 다양한 시장을 노리는 HGX-2
먼저 발표된 DGX-2는 16개의 볼타 GV100 GPU와 2개의 제온 CPU를 조합한 원 박스 서버입니다. 반면 HGX-2 보드는 CPU 부분이 없이 GPU로만 구성된 가속 보드입니다.
DGX-2는 2개의 GPU 보드와 1개의 CPU 보드, NVLink 백플레인으로 구성되는데, 여기에서 GPU 보드만 따로 떼어 판매하는것이 HGX-2라고 생각하면 됩니다.
사실 HGX-2 보드와 CPU를 조합한 제품은 서버 파트너가 판매합니다. 딥 러닝과 HPC를 주요 시장으로 하며, 8 GPU의 HGX-T1과 16 GPU의 HGX-T2가 있습니다.
HGX-T1은 HGX-2 보드 1장, HGX-T2는 HGX-2 보드 2장을 NVLink로 연결합니다. 또 HGX-2 보드를 쓰지 않는 GPU 서버 제품군도 포함됩니다.
슈퍼 컴퓨팅 용으로는 SCX-E 시리즈가 있으며, SCX-E1에서 E3는 PCI-E 기반, SCX-E4는 NVLink 기반입니다. 딥 러닝의 추론 처리를 위한 HGX-I1 / I2도 있습니다.
NVIDIA의 서버 라인업
NVIDIA의 서버 제공 업체
HGX-2의 특징은 NVIDIA가 NVLink과 NVSwitch로 밀접하게 통합된 GPU 노드를 파트너에게 제공한다는 데 있습니다.
앞으로는 NVLink 노드를 활용해 더 큰 GPU 컴퓨터도 가능할 것입니다. 하나의 컴퓨팅 노드 연결해 NVLink를 사용하는 것이 아니라 노드 사이의 연결에도 NVLink를 사용합니다. 인텔의 Omni-Path처럼 쓰는 방법도 가능합니다.
초 광대역 NVLink로 GPU를 상호 연결
NVIDIA의 테슬라 V100(GV100)는 1개의 GPU에 6포트 NVLink를 구현합니다. NVLink는 차동 신호(Differential Signaling) 방식의 좁은 인터페이스로 각 포트마다 단방향 8쌍, 양방향 16쌍으로 구성됩니다.
현재 세대의 NVLink 전송 속도는 1쌍 단방향이 25Gbps, 8쌍으로 구성된 단방향 링크는 25GB/s의 대역폭, 1포트는 양방향 50GB/s의 대역폭이 나옵니다. 6포트 NVLink을 구현한 GV100은 총 300GB/s의 NVLink IO 대역폭을 갖춥니다.
기존의 GPU와 비교하면 NVIDIA GV100의 I/O 대역폭이 월등히 넓습니다.
NVLink의 1링크 구성
NVIDIA GPU의 I/O 및 메모리 대역폭
DGX-2/HGX-2는 하나의 보드에 8개의 GV100 GPU를 탑재하며, 각 GPU가 각각 6개의 NVSwitch로 1링크의 NVLink에 연결됩니다.
NVSwitch는 18포트 NVLink를 구현하며 18포트 모두에 논 블러킹 크로스바 연결을 제공합니다. 18포트가 각각 양방향 50GB/s, 총 900GB/s의 스위칭 능력을 갖습니다. HGX-2는 NVSwitch를 사용해 16개의 GPU가 모두 300GB/s의 상호 연결 대역으로 이어집니다.
구체적으로는 HGX-2의 베이스 보드 1장에 NVSwitch를 통해 300GB/s로 서로 연결되며, 두 개의 베이스 보드가 NVSwitch끼리 연결됩니다. 보드 사이의 대역은 2.4TB/s입니다.
HGX-2의 연결 구성. 8 GPU라면 한쪽 보드만.
또 DGX-2/HGX-2는 x86 CPU 보드와도 연결합니다. CPU에 NVLink가 없으니 PCI-E를 씁니다. DGX-2와 HGX-2 HGX-T2는 16개의 GPU에 2개의 CPU가 됩니다. GPU에 크게 치우쳐진 18개의 컴퓨팅 노드 시스템이 됩니다.
컴퓨팅 노드 사이의 연결에 NVLink을 확장하는 방향
NVIDIA는 NVLink를 컴퓨팅 노드의 프로세서를 연결하는데 씁니다. 지금은 NVSwitch가 나왔지만 이는 GPU끼리 전체 대역폭을 확장하는데 쓰고 있습니다. 하나의 노드에 6개의 스위치를 넣는 건 꽤나 호화로운 방법입니다.
잘 생각해보면 이는 상당히 이례적입니다. 노드의 전체 대역폭 연결에 스위치를 도입할 필요성은 바뀌어 나가고 있습니다. 예전에는 스위치가 없었으니 NVLink를 노드의 상효 연결에 쓸 수밖에 없었습니다. 하지만 지금은 스위치가 있으니까 NVLink 노드 사이의 패브릭으로 사용할 수 있습니다. 앞으로 NVLink를 노드 사이의 연결에 쓰진 않을까요?
젠슨 황은 거기에 대해 이렇게 말합니다. "(HGX-2) 보드에 8개의 GPU와 6개의 스위치가 300GB/s의 대역폭으로 연결됩니다. 이 보드는 컴퓨팅 노드입니다. 우리는 이 노드를 넘어서는 백플레인이 있고, HGX-2 보드 2개를 전체 대역으로 연결합니다. 서로 다른 컴퓨팅 노드를 백플레인에 연결하면 그 시간이 길이접니다."
예를 들어 4개의 DGX-2/HGX-2 보드를 NVSwitch를 통해 연결할 수 있습니다. 이 경우 보드 사이의 대역폭은 줄어듭니다. NVSwitch의 GPU와 연결하지 않은 10 개의 NVLink 포트 중 9 포트를 각각 3개의 보드 연결에 사용하면 각각의 보드 사이는 900GB/s로 연결됩니다. 이것도 꽤 큰 대역입니다. 또는 노드 사이이의 연결해 NVSwitch을 넣는다면 더 큰 구성에서도 광대역이 유지됩니다.
4개의 보드에 32 GPU를 연결
HGX-2 보드. 오른쪽에 백플레인 보드가 있어 메인보드를 연결합니다.
인텔의 Omni-Path와 NVIDIA의 NVLink
NVLink를 컴퓨팅 노드 사이의 연결해 사용하는 또 다른 패브릭인 인텔 Omni-Path와 비교해 봅시다. Omni-Path는 기본적으로 노드 사이의 연결에 사용합니다. 1쌍의 차동 전송은 25Gbps의 속도를 내며, 단방향 4쌍에서 양방향 8쌍으로 NVLink보다 더 긴 거리를 상정해 만들어졌습니다.
1 포트의 대역폭은 단방향 12.5GB/s, 양방향 25GB/s. 인텔의 Omni-Path Edge Switch 100 스위치는 총 48포트의 크로스바 스위치로 스위칭 대역폭은 총 1.2TB/s가 되어 NVSwitch를 넘어섭니다.
NVSwitch가 나오지 않았을 때 설계된 일본 도쿄 공업대학의 슈퍼 컴퓨터 TSUBAME 3.0은 NVLink와 Omni-Path를 모두 사용합니다. 컴퓨팅 노드에 4 GPU를 NVLink로 연결하고, CPU와 GPU는 PCI Express 연결. 컴퓨팅 노드 사이를 PCI Express 스위치를 통한 Omni-Path 4포트로 연결하는 구성입니다.
도쿄 공업 대학의 TSUBAME 3.0
그럼 NVSwitch가 도입된 지금은 NVSwitch만으로 어느 정도의 노드를 연결할 수 있을까요? 여기에는 한가지 장애물이 있습니다. 바로 CPU입니다. NVIDIA의 현재 아키텍처는 x86 CPU와 연결하는데 PCI-E를 씁니다. NVLink로 서로 연결되는 건 GPU 뿐이며 GPU 제어에 필요한 CPU는 NVLink로 연결되지 않습니다.
즉, NVLink만으로 컴퓨팅 노드를 연결하면 CPU끼리 연결되지 않는다는 이야기입니다. CPU도 포함한 완전한 컴퓨팅 노드라면 NVLink만으로 노드 사이를 연결하지 못하는 것이 현실입니다.
물론 IBM의 Power 시리즈 프로세서는 NVLink로 GPU와 직접 연결합니다. NVSwitch에는 여유포트가 있으며 Power는 NVSwitch에 연결할 수 있으니 컴퓨팅 노드를 NVLink로만 접속할 수 있습니다.
그러나 x86 CPU에선 아직 불가능합니다. Powr 외에 다른 CPU에서 NVLink로만 연결하기 위해선 NVLink를 PCI Express로 바꿔주는 ASIC가 필요합니다.
GPU로 CPU 코어의 통합
또 다른 방법으로는 NVIDIA GPU에 CPU 코어를 통합하는 것입니다. 컴퓨팅 노드가 CPU를 통합한 GPU만으로 구성되면 문제가 해결됩니다.
실제로 NVIDIA는 하이엔드 GPU와 CPU 코어를 통합하는 구상을 갖고 있었습니다. 그러나 현재는 그 구상은 후퇴했습니다. 이러한 경향은 NVIDIA만이 아닙니다.
예를 들어 CPU와 GPU를 통합한 APU (Accelerated Processing Unit)로 서버까지 커버하려 했던 AMD도 하이엔드에서는 별도의 GPU를 쓰는 방향으로 나가고 있습니다.
NVIDIA의 Xavier
NVIDIA 제품 중 CPU 코어를 통합하는 자동차와 임베디드용 SoC 계열 뿐입니다. 최신 Xavier는 8개의 NVIDIA 아키텍쳐 Arm CPU 코어와 볼타 아키텍처의 GPU 코어에 딥 러닝 가속 장치 DLA (Deep Learning Accelerator)등 다양한 코어를 탑재합니다.
젠슨황은 이렇게 설명합니다. "Xavier 같은 제품은 통합이 적합합니다. 또 CPU와 GPU만으로는 부족하지요 Xavier는 6종류의 서로 다른 프로세서를 통합합니다.
그러나 볼타 GV100 기반 HGX-2에서 통합은 별로입니다. 그 이유는 다른 구성이 필요하기 때문입나다. 어떤 때에는 1개의 CPU와 1개의 GPU, 다른 경우에는 1개의 CPU와 8개의 GPU가 필요한 식입니다.
소금과 후춧가루의 조합을 생각해 봅시다. 요리마다 각각 다른 소금과 후춧가루의 조절이 필요합니다. 소금과 후추가루를 섞어두면 사용이 제한됩니다. 이처럼 CPU와 GPU도 1종류의 구성은 제한이 많습니다. "
HGX-2를 가지고 설명하는 젠슨황
실제로 NVIDIA가 제공하는 DGX 등의 GPU 컴퓨터 솔루션을 보면 CPU에 비해 GPU의 비율이 점점 높아지고 있습니다. 지금은 CPU가 2에 GPU가 16입니다.
하지만 스칼라 CPU의 연산 능력도 유지하고 싶은 컴퓨터도 있습니다. 단일 GPU로 이러한 요구에 대응하기 위해선 CPU를 분리하는 쪽이 좋습니다.
또한, 이 배경에는 워크로드가 GPU에서 병렬 연산에 치우쳐져 있다는 상황이 있습니다. 단일 GPU에서 요구되는 성능 요구가 높고, GPU로 자원을 늘리는 것이 먼저라는 사정도 있습니다.
이런 상황에서 일단 NVIDIA는 PCI Express 및 NVLink 를 합친 칩에서 x86 CPU를 NVLink에 연결하고 있습니다.
조금 모양새는 다르지만 어쩌고보면 엔비디아도 그런 방향으로 시스템을 개발하는 것 같습니다.
GPU와 ARM CPU와 x86 CPU를 모두 묶음으로서 모든 처리 상황에서 유리하고 효율적인 시스템을 도모하려고 하니...