-
[GPU] 후퍼(Hopper) 란a 2022. 3. 30. 10:53반응형
new~
1. tensor core
특화형 부품.. mma 연산만을 하는 부분인데, AI나 HPC 분야에서 이 연산이 필수이다. 대기업에서야 엄청난 자원으로 시간을 절약하며 학습 시킬 수 있지만, 개인 컴퓨터에서 성능 좋은 GPU가 없으면 캐글 대회도 수상하기 힘든 현실이기 때문에, 이번에 새로 나온 아키텍처에서도 꾸준히 텐서코어를 유지/향상한 듯하다. 실수 연산을 빠르게, 캐시 크기를 넓게 만들었다는 건 당연한 얘기고.
1)Transformer Engine
2) Asynchronous Execution features include a new Tensor Memory Accelerator (TMA) unit
: 많은 양의 데이터를 글로벌 메모리에서 shared memory로 전달하는 게 가능하다. 이게 뭐지
후버에서는 FP8 텐서 코어를 추가했다고 한다.
E4M3는 지수가 4비트고 밑이 3비트라서 E5M2보다 정확한 수를 표현할 수 있지만 수의 범위가 좁아진다. FP16, FP32 연산들 보다 비트 수가 적어지니까 연산을 빠르게 할 수 있다.
Transformer engine은 FP8과 FP16 정확도를 둘 다 사용해서 메모리 사용을 줄이고 성능을 향상시킨다. 이전 세대보다 3배 빨라졌다고 하며, MMA연산은 숫자의 정밀도에 따라 한번에 연산할 수 있는 양이 달라진다.(오,, 당연한데 이제 앎)
1-2) Tensor Memory Accelerator (TMA) unit
a copy descriptor는 주소가 아니라 텐서의 dimensions와 블록의 coordinates를 사용해서 데이터를 옮긴다.
대용량 데이터 블록을 지정해서(shared memory 의 용량까지 가능) 글로벌 메모리에서 shared memory로 로드/스토어가 가능하다. 이걸 데리고 있는 tma는 다양한 텐서 레이아웃(1D-5D), 다양한 메모리 액세스 모드, 기타 기능을 지원한다.
2. Thread Block cluster
한 GPU 당 담긴 SM 수가 100개 이상이 되면서, 스레드 블록만으로 프로그래밍 모델을 최적화 하는 게 어려워진 탓에, 새로운 단위를 만들게 되었다. TBC(Thread Block Cluster) 가 hierarchy에 추가가 된 것이다.
Thread -> Thread Block -> Thread Block Cluster -> Grid
스레드 블록은 스레드 여러 개의 그룹고, 한 클러스터(TBC)는 스레드 블록의 그룹이다.
굳이 스레드 블록을 묶어서 클러스터로 지정한 것은 무슨 이유일까?
GPU 세상에서 한 그룹이 되는 것은 이 그룹 안의 요소들이 동시에(concurrently) 수행된다는 것이다. 한 클러스터 안의 스레드 블록들은 동시에 수행된다.
스레드 블록이 동시에 수행되면서 어느정도의 성능을 보이려면, 어떻게 해야 할까?
GPC는 SM들의 그룹이다. GPC에서 SM끼리 연결되어 있고 데이터를 공유할 수 있다고 한다. 데이터를 공유해서 지연성을 줄이는가 보다.
3. Distributed Shared Memory(DSMEM)
4. Asynchronous Execution
execution이 async 한 것과 sync 한 것의 차이는 무엇일까?
sync하다면, 다음 작업을 시작하기 전에 지금 하고 있는 작업이 끝나야 하고, async하다면 지금 하고 있는 작업이 끝나기 전에 다른 작업을 시작할 수 있다.
후퍼에서는 메모리 명령이랑 별개의 독립된 작업을 수행할 수 있다고 한다. 이런 async한 메모리 명령을 하는 유닛이 따로 있다. Tensor Memory Accelerator(TMA)라고 한다.
TMA에서 원하는 데이터가 있는 주소를 글로벌 메모리에 전달하고 Shared memory에 담는 동안, 스레드들은 각자 할 일 하면 되는 거다.
각자 할 일 하다가 sync를 맞출 때, Asynchronous barrier가 필요하다. 암페어 때부터 있는 이 베리어는 싱크를 맞춰주기 위해 각기 다른 스레드들을 잠깐 머무르게(wait) 한다.
synchronization process )
(1) 스레드가 자기 할 일 끝나면 arrive 신호를 보낸다.
(2) arrive는 non-blocking이므로 다른 work를 할 수 있다.
(3) 스레드들이 다른 스레드에서 생성된 데이터가 필요한 시점에 스레드들은 wait 신호를 보낸다.
(4) 모든 스레드들이 arrive 신호가 될 때까지 wait한다.
5. HBM and L2 cache memory architecture
쿠다에서 device memory라고 불리는 HBM은 예전 GDDR 에서 발전한 DRAM이다. L2 캐시는 HBM 메모리를 읽/쓴다.
constant memory -> constant cache
texture and surface memory -> texture cache
후퍼에서는 기존 모델보다 넓은 bandwidth를 가졌다고 한다.
5-1. ECC Memory Resiliency
: 데이터 파손되는 거에 민감한 애플리케이션을 위해서 Error Corretion Code(ECC)를 갖고 있다. 이 ECC가 후퍼에서는 'Sideband ECC'로, ecc가 담긴 메모리 공간이 메인메모리랑 분리되어 있다. 이건 이전의 'inline ECC'랑 다른데, 인라인ECC는 메인 메모리 공간을 썼다.
5-2. Memory Row Remapping
: sparse 한 row를 교체한다고 한다.
6. Secure MIG
Multi-instance GPU(MIG) : 한 GPU를 여러 사용자가 사용한다. 후퍼는 많게는 7개의 gpu instance로 분할할 수 있게 한다고 한다. 여기서는 multi-tenant라는 특징이 생기는데, 여러 개의 애플리케이션이 동일한 gpu에서 돌아가는 현상이다.
인스턴스들은 각각 고유한 메모리, 캐시, 스트리밍 멀티프로세서를 사용해 동시에 실행된다. 특정 작업을 할 때마다 적합한 크기의 GPU를 할당해 진행하기 때문에 이전 대비 활용도를 최대 7배 높일 수 있다.
어떤 논문에서는 multi-tenant일 때 가장 큰 bottleneck이 page walk라고 했다. L2캐시에서 HBM 메모리를 읽는 과정이 너무 느리거나 unfair하다는 얘기다. 다른 문제점은 없을까? 있었으면 좋겠다. 내가 쓰게...
MIG에서 중요한 이슈는 두 가지, 독립성과 안전이다. 아, 근데 후퍼에서는 딱히 개선된 사항이 없나 보다. 이전 세대 백서를 읽어봐야 하겠다.
7. transformer engine
또또 딥러닝 그런 거다. 자연어 처리 BERT 같은 애들은 계산을 할 때 정확도에서 고려해야 할 게 생긴다. 정확도를 높이면 연산이 느려지고 낮추면 데이터가 파손되거나 결과가 그럴싸하지 않다. 트랜스포머 엔진은 텐서코어가 만든 output값들을 분석하는 부분이다.
텐서 코어 연산에서 정확도가 다른 mixed precision 을 하는 이유는, 일정한 속력을 보이면서 정확도를 유지하기 위함이다. 트렌스포머 모델의 각 층에서, 트렌스포머 엔진은 텐서코어가 생성한 결과값들을 분석한다.
트랜스포머 엔진은 어떤 유형의 뉴럴 네트워크 층이 다음에 오는지, 어떤 정밀도를 필요로 하는지에 대한 지식을 바탕으로 텐서를 메모리에 저장하기 전에 어떤 타깃 포맷으로 변환할 것인지도 결정한다.
FP8 has a more limited range than other numerical formats. 왜 실수 8비트 연산은 제한이 되지? 뭐가 제한임..
사용 가능한 범위를 최적화하기 위해 트랜스포머 엔진은 텐서 통계에서 계산된 스케일링 계수를 사용하여 텐서 데이터를 표현 가능한 범위로 동적으로 스케일링합니다.
8. Security Enhancement and Confidential Computing
BCoal같이 attack을 예방하는 defense mechanism이 일리가 있다
반응형'a' 카테고리의 다른 글
[c++] (0) 2022.04.01 [알고리즘] AES 암호화 알고리즘 (0) 2022.04.01 [c++] C언어와 C++의 다른 부분(bool, 참조자, new/delete) (4) 2022.03.30 [GPU] GPGPU-sssim ispass benchmark build (0) 2022.03.25 [JS] 날씨 API 호출하기 (0) 2022.03.25