본문으로 건너뛰기
NVIDIA GPU Architecture

NVIDIA GPU Architecture

1. NVIDIA GPU Architecture

1.1. GPU Architecture

[Figure 1] NVIDIA H100 GPU Architecture

[Figure 1] NVIDIA H100 GPU Architecture

[Figure 1]은 H100 GPU의 Architecture를 나타내고 있다. H100 GPU Chipset 전체에서 시작하여, 주 연산을 담당하는 SM (Streaming Multiprocessor) 단계를 거쳐, SM 내부의 Sub-core까지 순차적으로 확대하며 Architecture를 단계적으로 보여 준다.

1.1.1. GPU Chipset

  • PCI Express : GPU는 PCI Express Interface를 통해서 CPU 또는 Network Card와 연결된다. H100 GPU의 경우에는 PCI Express 5.0 Interface를 이용한다.
  • GigaThread Engine : 수천, 수백개의 GPU Thread를 동시에 생성하고 관리하는 역할을 담당한다. 생성한 GPU Thread를 다수의 SM에 분배하고, 유휴한 SM이 발생하지 않도록 관리한다. 다수의 App이 GPU를 이용하기 위해서 Time-slicing 기법을 이용하는 경우, GPU의 Context Switching을 담당하는 역할도 수행한다. A100 GPU부터 제공되는 MIG (Multi Instance GPU) 기능도 GigaThread Engine를 확장하여 구현되었다.
  • GPC (GPU Processing Cluster) : SM을 묶는 가장 큰 단위이다. H100 GPU의 경우에는 8개의 GPC가 존재한다.
  • TPC (Texture Processing Clusters) : GPC 다음으로 SM을 묶는 단위이며, Texture Sampling/Filtering, Vertex Fetch, Tessellation 연산을 담당한다. H100 GPU의 경우에는 하나의 GPC에 8개의 TPC가 존재한다. 또한 하나의 TPC에는 2개의 SM이 존재한다.
  • L2 Cache : 모든 SM이 공유하여 이용하는 Data Cache의 역할을 수행하며, GPU가 Memory의 접근을 최소화하기 위해 사용된다. H100 GPU의 경우에는 L2 Cache가 2개의 Partition으로 구성되어 있으며, NUMA (Non-Uniform Memory Access) 기반으로 동작하며, 각 Partition당 60MB의 용량을 가진다.
  • Memory Controller : Memory을 제어하는 역할을 수행한다. H100 GPU의 경우에는 12개의 Memory Controller가 존재하며, 2개의 Memory Controller가 한 쌍을 이루어 1024 Bit Bus를 구성하여 하나의 HBM3를 제어한다.
  • Memory : GPU의 전역 (Global) 공유 메모리 역할을 수행한다. H100 GPU의 경우에는 HBM3를 이용하며, 최대 6개의 Memory를 가질 수 있다. 각 HBM3마다 16GB의 용량을 가지기 때문에 최대 96GB의 용량을 가질 수 있다.
  • High-speed Hub : GPU 내부 Bus와 NVLink를 연결하는 Hub 역할을 수행한다.
  • NVLink : GPU 사이의 데이터를 주고받기 위한 초고속 데이터 전송 채널을 제공한다. H100 GPU의 경우에는 NVLink 4.0를 이용한다.

1.1.2. SM (Streaming Multiprocessor)

  • L1 Instruction Cache : SM 내부에서 실행되는 GPU Thread의 Instruction을 Caching하는 역할을 수행한다. GPU는 SIMT (Single Instruction Multiple Threads) 구조, 즉 하나의 명령어를 동시에 여러 GPU Thread에서 수행하기 때문에 각 GPU Thread마다 Memory에 접근을 수행하는 경우에는 Memory의 병목이 발생한다. L1 Instruction Cache는 Instruction을 Caching하여 Memory 접근을 최소화하는 역할을 수행한다.
  • Sub-core : 실제 연산을 수행하는 Core들을 묶는 단위이다. H100 GPU의 경우에는 4개의 Sub-core가 존재한다.
  • Tensor Memory Accelerator : Memory와 Shared Memory 사이의 Data 전송을 관리하는 역할을 수행한다.
  • L1 Data Cache / Shared Memory : SM 내부에서 처리되는 Data를 Caching하는 역할을 수행하거나, SM 내부에서 Data 공유를 위한 Shared Memory 역할을 수행한다. H100 GPU의 경우에는 256KB의 용량을 가진다.
  • Texture Units (Tex) : Texture Sampling, Filtering 연산을 수행한다. H100 GPU의 경우에는 하나의 SM에 4개의 Tex가 존재한다.

1.1.3. Sub-core

  • L0 Instruction Cache : Sub-core 내부에서 실행되는 GPU Thread의 Instruction을 Cache하는 역할을 수행한다.
  • Warp Scheduler : Warp는 32개의 GPU Thread로 구성된 가장 기본적인 실행 및 스케줄링 단위이며, Warp에 GPU Thread들은 서로 다른 Data를 가지지만 동일한 명령어를 실행한다. Wrap Scheduler는 실행 준비가 완료된 Warp을 선택하고 연산 유닛으로 전달한다. 만약 실행 상태의 Wrap이 중단되어야 하는 경우 다른 실행 준비 상태의 Wrap을 선택하여 연산 유닛에 전달하여, 연산 유닛이 놀지 않도록 관리하는 역할을 수행한다.
  • Dispatch Unit : Warp Scheduler에서 선택된 Warp을 어느 연산 Unit에 전달할지 결정하는 역할을 수행한다.
  • Register File : 모든 연산 유닛은 Register File에서 데이터를 읽고, 결과를 Register File에 저장한다.
  • INT32 Core : 32 Bit Integer 연산을 수행하는 연산 Unit. H100 GPU의 경우에는 하나의 Sub-core에 16개의 INT32 Core가 존재한다.
  • FP32 Core : 32 Bit Floating Point 연산을 수행하는 연산 Unit. H100 GPU의 경우에는 하나의 Sub-core에 32개의 FP32 Core가 존재한다.
  • FP64 Core : 64 Bit Floating Point 연산을 수행하는 연산 Unit. H100 GPU의 경우에는 하나의 Sub-core에 16개의 FP64 Core가 존재한다.
  • Tensor Core : 행렬 연산을 연산 Unit. H100 GPU의 경우에는 하나의 Sub-core에 하나의 Tensor Core가 존재한다.
  • LD/ST Unit : Memory, Cache로부터 Register File에 Data를 Load하거나, Register File의 Data를 Memory, Cache에 Store하는 역할을 수행한다.
  • SFU (Special Function Unit) : exp(), sin(), cos()과 같은 초월함수 연산을 수행한는 연산 Unit. H100 GPU의 경우에는 하나의 Sub-core에 4개의 SFU가 존재한다.

1.2. GPU Server Architecture

[Figure 2] NVIDIA DGX H100 Server Architecture

[Figure 2] NVIDIA DGX H100 Server Architecture

[Figure 2]는 NVIDIA DGX H100 Server의 Architecture를 나타내고 있다. 대부분의 GPU Server는 다수의 GPU를 Cluster로 구성하여 이용한다. DGX H100 Server는 H100 GPU 8개와 CPU 2개를 이용하여 NUMA (Non-Uniform Memory Access) 기반으로 구성되어 있다.

  • CPU : 두 개의 Intel CPU가 존재하며, UPI (Ultra Path Interconnect)를 통해서 두 CPU가 연결되어 있다. CPU는 PCI Express Interface를 통해서 DGX Networking ConnectX-7와 GPU와 직접 연결되어 있으며, PCI Express Switch를 통해서 Data Cache NVME, Storage Networking ConnectX-7, NVSwitch와도 연결되어 있다.
  • Data Cache NVME : 외부 Storage (NFS, Lustre)로부터 Data를 가져와 임시로 Caching하는 역할을 수행한다. DGX H100 Server의 경우에는 4개의 3.84TB의 NVME를 이용한다.
  • Storage Networking Interface : 외부 Storage에서 Data를 가져와 Data Cache NVME로 저장하기 위한 Network Card Interface이다. H100 GPU의 경우에는 ConnectX-7를 이용한다. ConnectX-7는 NVIDIA의 SmartNIC을 지징하며 InfiniBand Protocol을 이용한다.
  • OS NVME : 운영체제가 설치된 NVME를 의미한다. 첫번째 CPU와 PCI Express Interface를 통해서 연결되어 있다. DGX H100 Server의 경우에는 2개의 1.92TB의 NVME를 이용한다.
  • 100Gbps Ethernet : GPU Server 관리 및 모니터링을 위한 Network와 연결된 Network Card Interface이다. 두번째 CPU와 PCI Express Interface를 통해서 연결되어 있다.
  • DGX Networking Interface : DGX Network 즉 GPU Cluster의 Data Plane Network를 담당하는 Network Card Interface이다. H100 GPU의 경우에는 ConnectX-7를 이용한다. DGX Networking Interface는 CPU 뿐만 아니라 GPU와도 PCI Express Interface와도 연결되어 있는데, 이러한 이유는 GPU Server 클러스터 환경에서 GPU가 다른 GPU Server의 GPU Memory에 GPUDirect RDMA (Remote Direct Memory Access) 기반으로 CPU 개입없이 접근할 수 있도록 하기 위함이다.
  • NVSwitch : GPU를 NVLink를 통해서 완전히 (Any-to-Any) 연결하기 위해서 사용되는 Switch 역할을 수행한다. CPU는 NVSwitch를 제어하기 위해서 PCIe Interface를 통해서 연결되어 있다.

2. 참조