ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [개념 정리] 클러스터 해부학 (FLOPS, GPU memory, 대역폭, Interconnect, PCIe, RDMA)
    Big Data/Distributed Deep Learning 2022. 6. 2. 01:03
    728x90

    Keyword : FLOPS, GPU memory, 메모리 용량, 메모리 대역폭, Interconnect, PCIe, RDMA

    개인적인 공부를 위해 초고성능 딥러닝 클러스터 구축하기를 정리한 것임을 미리 밝힙니다.
    기업에서 진행한 딥러닝 클러스터 구축에 대한 경험을 자세히 공유해주신 글로
    자세한 내용이 궁금하신 분들께는 위의 포스트 직접 읽어보시는 것을 추천드립니다.

     

    클러스터 해부학

    딥러닝 클러스터의 목표 : 학습 과정을 빠르게 하는 것
    → 시스템의 한 부분에서 병목 발생하지 않도록, 최상단 소프트웨어와 최하단 하드웨어까지 모든 단계 고려

     

    GPU 서버 성능 지표 알아보기

    1. FLOPS

    - GPU가 1초 동안 몇 개의 부동소수점(floating-point) 연산할 수 있는 지를 나타내는 성능 척도
    - FLOPS가 크면 같은 시간 동안 더 많은 계산 처리 가능, 성능이 좋다는 뜻
    - 1,000,000 FLOPS = 1 GFLOPS / 1,000 GFLOPS = 1 TFLOPS / 1,000 TFLOPS = 1 PFLOPS

    - GPU의 구조를 쉽게 설명하면 부동소수점 연산을 처리하는 코어가 수천 개 있어서 동시에 많은 수의 연산을 처리하는 형태. GPU는 코어가 수십 개인 CPU보다 FLOPS가 훨씬 높음. 따라서 GPU는 그래픽스, 시뮬레이션, 딥러닝 등 독립적인 연산이 많은 애플리케이션 가속에 널리 이용

    부동 소수점 연산의 정밀도(precision)에 따라 기준이 되는 FLOPS 값이 달라질 수 있음. 계산용 GPU에서는 보통 FP32(=SP, Single Precision) 성능이 FP64(=DP) 성능의 2배 정도, FP16(=HP) 성능은 FP32 성능의 2배 이상. 성능이 높아지는 대신 정밀도가 떨어지지만, 과학 분야의 애플리케이션이 아니라면 높은 정밀도를 필요로 하지 않음. 특히 딥러닝 모델의 추론 단계에서는 FP16으로도 충분. 최근에는 딥러닝 학습에서 FP16 정밀도 사용하는 경우도 많음

     


     

    2. GPU Memory

    FLOPS 만큼 중요한 성능의 척도 : 메모리 용량(capacity), 대역폭(bandwidth)

    메모리 용량(capacity)

    GPU가 처리할 수 있는 배치의 크기나 모델의 크기와 관련

    - 배치의 크기 : 메모리가 크면 한 GPU에서 더 많은 배치 처리 가능. data parallelism 활용도 늘려 같은 데이터셋을 더 빠르게 학습 가능

    - 모델의 크기 : GPU는 연산을 위해 모델의 파라미터를 메모리에 담아두기 때문에 이를 위한 메모리 용량이 충분해야 함. Model parallelism으로 여러 GPU에 파라미터를 나누는 데는 제약 사항도 많고 동기화/통신 비용이 증가하기 때문에 한계가 있음

    GPU의 메모리 용량뿐만 아니라 시스템 메모리 용량도 확보 필요. 배치나 모델이 시스템 메모리에서 각 GPU로 전송되는 것이기 때문에, 시스템 메모리가 모든 GPU의 메모리를 합한 것보다는 커야 병목이 되지 않음

    메모리 대역폭(bandwidth)

    GPU가 메모리를 읽고 쓰는 속도와 관련. 대역폭이 크다고 해서 메모리 접근 속도가 반드시 빨라지는 것은 아니지만, GPU는 넓은 메모리 영역을 동시에 읽고 쓰기 때문에 대역폭이 클수록 메모리 접근에 소요되는 총시간이 감소하는 것이 보통

    FLOPS와 메모리 대역폭은 프로그램 성능의 상한을 결정

    - Activation, Pooling, Normalization 같이 메모리 접근 횟수 대비 연산 비중이 거의 없는 레이어는 보통 memory-bound 라고 부름. memory-bound는 대역폭에 의해 성능 상한 결정

    - Convolution, Dense 같이 메모리 접근 횟수 대비 연산 비중이 큰 레이어는 보통 compute-bound 라고 부름. compute-bound는 FLOPS에 의해 상한 결정

    시스템에서 memory-bound와 compute-bound를 나누는 기준은 FLOPS에 의한 이론 성능 상한과 대역폭에 의한 이론 성능 상한이 맞물리는 지점. 메모리 접근 대비 연산 수가 많으면 compute-bound, 연산 수가 적으면 memory-bound. CPI에서 실행할 때는 compute-bound였던 프로그램이 GPU에서는 memory-bound 될 수 있음

     


     

    3. Interconnect

    CPU가 관리하는 시스템 메모리와 GPU에 장착된 메모리는 물리적으로 분리
    파일로 저장된 데이터셋을 GPU에서 학습하기 위해서는 시스템 메모리에 있는 배치를 GPU 메모리로 전송하는 과정 필요. 학습된 모델 파라미터를 저장하기 위해서는 거꾸로 GPU 메모리에서 시스템 메모리로 전송하는 과정이 필요

    다른 GPU에 할당된 배치에서 계산된 그라디언트를 합치는 경우, Model parallelism을 활용해 모델을 쪼갠 경우 등 서로 다른 GPU 간에 데이터를 주고받아야 할 때도 서로의 메모리로 데이터를 전송하게 됨

    이렇게 데이터를 주고 받을 때 사용되는 대표적인 인터페이스로 PCI Express(PCIe)가 있음. PCIe는 여러 개의 lane으로 구성되어 있는데, 2020.12 기준 표준으로 사용되는 PCIe 3.0 버전은 lane 당 (x1) 약 1GB/s의 대역폭으로, 최신 CPU/마더보드에서 지원하는 PCIe 4.0 버전은 그 두 배인 lane 당 (x1) 약 2GB/s의 대역폭으로 양방향 통신이 가능

    보통 GPU는 16 lane 너비(x16)를 지원하므로 PCIe 3.0 기준 약 15.75GB/s의 대역폭으로 양방향 통신이 가능. 하지만 CPU에서 지원하는 PCIe lane 수가 부족하면 일부 GPU는 x16으로 동작하지 못하고 x8로 동작하는 경우가 생김

    서버급 Intel CPU에서는 소켓 당 48 lane을 지원. 일반적인 2소켓 구성 상 48x2=96 lane을 사용할 수 있어 GPU와 고속 네트워크 카드(HCA)를 합쳐 최대 6개까지만 제 성능으로 지원 가능. 반면 서버급 최신 AMD CPU에서는 소켓 당 96 lane까지도 지원, 훨씬 큰 대역폭 운영 가능. (NVIDIA의 고성능 서버 라인업인 DGX가 Intel에서 AMD로 변경된 이유)

    NVIDIA에서는 PCIe와 별도로 NVIDIA GPU 간 고속 통신을 위해 NVLink 기술을 제공. 예를 들어 NVLink 2세대(e.g. V100)에서는 150GB/s의 대역폭, NVLink 3세대(e.g. A100)에서는 300GB/s의 대역폭으로 각각 PCIe 3.0, PCIe 4.0보다 9배가량 넓은 대역폭으로 통신 가능. PCIe로는 병목이 걸리는 규모의 데이터 전송도 NVLink를 이용하면 문제없음. 하지만 범용 인터페이스인 PCIe와 달리 지원해주는 일부 메인보드에서만 사용 가능, GPU에 따라서 별매품 NVLink 브릿지를 설치해야 하는 경우도 있음

     


     

    서버를 연결하는 기술 알아보기

    GPU가 다른 GPU에 있는 메모리에 접근해야 하는 경우, 한 서버에 장착된 GPU라면 PCIe 또는 NVLink를 통해 통신 가능. 하지만 딥러닝 클러스터에서는 다른 서버에 장착된 GPU 간에 데이터 통신 필요. 모든 서버를 연결하는 고속 인터커넥트 네트워크 필요

    고속 인터커넥트 네트워크를 구성하려면 우선 각 서버에 고속 네트워크 카드인 HCA(Host Channel Adapter) 설치 필요. HCA는 서버의 메모리 서브시스템과는 PCIe로, 다른 서버의 HCA와는 고속 네트워크 스위치와 특수 케이블을 통해 연결되어 있음. 스위치는 또 다른 스위치들과 연결되어 클러스터의 내부망을 구성

     

    1. RDMA (Remote Direct Memory Access)

    수많은 서버들이 데이터를 교환할 때마다 CPU, 캐시, OS 페이지를 거치게 되면 엄청난 병목 발생. GPU 사이에 발생하는 모든 I/O 마다 OS와 메모리 서브시스템이 동기화되어야 하기 때문에 그 과정에서 많은 비효율이 발생

    이를 방지하기 위해 데이터를 주고받을 디바이스와 메모리 서브시스템만 관여해, CPU 자원의 낭비 없이 데이터를 주고 받는 기술 DMA(Direct Memory Access). 디스크에 저장된 파일을 시스템 메모리로 올리는 동안 CPU는 다른 작업을 수행할 수 있도록 하는 기술, 시스템 메모리를 거치지 않고 GPU 끼리 PCIe를 통해 직접 통신하는 기술 등이 DMA에 포함

    디바이스의 데이터를 OS 간섭 없이 곧바로 HCA를 통해 다른 서버로 보내거나, 반대로 HCA를 통해 받은 데이터를 곧바로 디바이스로 보내는 것을 RDMA(Remote Direct Memory Access)라고 함. DMA가 한 서버 내의 디바이스 간 메모리 접근 기술이라면, RDMA는 서로 다른 서버에 있는 디바이스 간의 메모리 접근에 관한 기술

    RDMA를 실현하는 대표적인 기술로는 Mellanox의 Infiniband가 있고, 범용으로 사용되는 Ethernet 프로토콜을 이용한 RoCE(RDMA over Converged Ethernet)도 있음

     


     

    2. Nonblocking Minimal Spanning Switch

    네트워크를 구성하는 각 스위치에 연결된 uplink의 수와 downlink의 수가 1:1로 동일하여 항상 두 디바이스 사이에 통신이 일어날 수 있으면서, 네트워크를 구성한 스위치의 개수가 최소일 때를 nonblocking minimal spanning switch 구조라고 함

    만일 nonblocking 구성이 아니게 되면 모든 디바이스가 다른 디바이스와 통신하는 collective communication 패턴에서 항상 병목이 걸림. 분산 학습에서 일어나는 대부분의 통신 패턴인 AllReduce 또는 AllGather 연산이 모두 collective communication 이기 때문에 여기서 병목이 걸린다면 매 스탭마다 성능 저하가 일어나니, 결국 전체 성능에 크게 영향을 줌

    스위치 연결 토폴로지는 장단점이 다른 여러 가지 방식이 있고, 모니터링 장비 등도 연결되어야 하기 때문에 꼭 최소의 스위치를 사용해야 하는 것은 아니지만, 서버의 HCA들이 all-to-all로 1:1 nonblocking 통신을 할 수 있도록 구성하는 것이 중요 (추가 공부 필요)

    728x90

    댓글

Designed by Tistory.