티스토리 뷰

IT

딥러닝 ASIC 가속기(Accelerator)란?

Homo Nomad 2020. 7. 3. 19:20
반응형

딥러닝 가속기(Accelerator) AI 연산 장치이며, GPU, FPGA, ASIC으로 구분됩니다. Accelerator 컴퓨터 시스템에서 주연산장치인 CPU 보완하는 보조 연산장치를 의미하는데 대표적으로 GPU 있습니다. CPU만으로는 고사양 그래픽 처리를 담당하기에 한계가 있어 GPU 그래픽 Accelerator 등장했죠. 지난 게시글 (왜 GPU는 AI 시대에 중요해졌는가?)에서도 설명되었지만 그래픽처리와 딥러닝은 병렬 단순 연산(곱셈, 덧셈 위주) 처리가 주를 이룬다는 공통점이 있습니다. 따라서 딥러닝 Accelerator GPU 많이 활용되고 있죠. FPGA(fileld programmable gate array) 이름에서 있듯이 프로그램 가능한 Chip입니다. 빠르게 진화하는 딥러닝 모델에 맞추어 Chip 구성을 변화할 있다는 유연성이 장점이지만, 반대로 효율성이 떨어진다는 단점이 있죠. 아래에서 주로 살펴볼 ASIC (application-specific integrated circuit) 딥러닝 연산에 특화된 Processor입니다. ASIC 목표로 하는 응용에 특화되었기 때문에 GPU FPGA 대비 효율성은 높지만 유연성은 떨어지는 단점이 있죠. 이번 글에서는 구글(Google) TPU 중심으로 딥러닝 ASIC 구조와 특징을 자세하게 살펴보겠습니다.

 

구글 1세대 TPU 추론(Inference) 연산을 위해 개발된 ASIC으로써 2016년에 처음 발표되었고 이후 2세대와 3세대가 나왔습니다. 특히 TPU 1세대는 구조를 자세히 설명한 논문[1] 공개되어 ASIC 특징을 분석하는 많은 도움을 주죠. 어떻게 TPU AI 연산에 최적화 되었는지 이해하기 위해서는 딥러닝 연산을 살펴볼 필요가 있습니다. 사물인식에 주로 쓰이는 CNN (convolutinoal neural network) algorithm 예로 들어보죠. CNN Algorithm 과정은 Convolution, Activation, Pooling으로 구성되어 있습니다. Convolution 화면을 Filtering하여 영상의 특징(Feature) 추출하는 과정입니다. CNN 활용한 영상인식 AI 모델의 대부분은 Filter 정보를 담고 있죠. Convolution 마친 다음 단계로의 데이터 전달 여부를 판단하는 Activation 거칩니다. 이는 우리 뇌의 정보 전달을 모사한 구조인데 뇌의 뉴런은 신호를 다음 단계로 전달할지 말지 결정하는 단계가 있다고 하네요. 다음은 선택적(Optional) 단계로써 Pooling 있습니다. Pooling 주변의 개의 Pixel 제일 크거나 작은 값만을 선택하여 남기는데 정보의 압축과정이라고 보면 됩니다. 아래 그림에서는 색깔별로 구분된 구역 중에서 가장 값만이 선택되었네요. 다시 구글 TPU 구조를 살펴보면 Convolution 담당하는 Matrix multiplication unit, Activation unit, Pooling Normalization 맡은 unit 각각 존재하는 것을 확인할 있습니다. 딥러닝 연산에 적합하도록 하드웨어가 설계된 셈이지요.

 

Pooling 예시 (source: DeepAI.org)

다른 TPU 특징으로는 데이터 재사용율을 높이기 위한 Systolic array 방식의 Matrix multiplication unit 있습니다. Systolic이란혈관을 흐르는이라는 뜻을 가진 단어인데, 혈관이 우리 몸의 세포를 지나가듯 데이터가 연산을 담당하는 Processing unit 지나간다는 의미를 갖습니다. 이는 데이터의 재사용율을 높이기 위한 구조인데요, 재사용율이란 메모리로부터 가져온 데이터를 얼마나 반복하여 연산하는가를 의미합니다. 데이터 재사용율은 딥러닝 연산에서 매우 중요합니다. 데이터를 DRAM으로부터 가져오는 시간(Latency) 동안 Processor 쉬어야 하기 때문에 동일 시간에 수행할 있는 작업량이 줄어듭니다. 또한 DRAM으로부터 데이터 가져오는 작업은 에너지를 많이 소모하죠. 따라서 딥러닝 Accelerator 설계자 입장에서는 DRAM에서 가져온 데이터를 최대한 많이 사용하고자 합니다. 아래의 Matrix multiplication unit에서는 딥러닝 model data (weight) 위에서 아래로, Feature map 화면 data 좌에서 우로 흘러가고 최대 256번까지 연산됩니다. 데이터가 Processing unit 지나가면서 1번의 곱셈과 덧셈 연산을 하게 되죠. Matrix multiply unit 왼쪽을 보면 “Systolic data setup”이라는 블록이 있는데 위에서 내려오는 딥러닝 모델의 Weight 맞춰 연산을 수행하기 위해 중간 결과값(Feature map) 스케쥴링하는 역할을 합니다. Systolic array 방식으로 한번에 5만번의 계산을 수행하는 연산 장치를 효율적으로 활용하기 위한 블록이죠.

 

TPU Architecture 및 Systolic Array (source: Google[1])

메모리 관점에서 본다면 구글 TPU SRAM 메모리의 사이즈가 큽니다. 24MB SRAM 추론(Inference) 수행하면서 생성되는 중간 결과값을 저장하는 역할을 합니다. CNN 영상인식을 예로 든다면 Layer 지나면서 생성되는 무수히 많은 Feature map SRAM 저장되겠죠. 앞에서도 말했지만 DRAM 데이터를 저장하고 불러오는 작업은 시간과 에너지가 많이 소모되기 때문에 결과값을 버퍼 역할을 하는 대용량의 SRAM 저장시키고 최대한 DRAM Access하지 않으려 시도이지요. 추가로 TPU 1세대에서는 딥러닝 Model 저장을 위해 DDR3 사용했는데 Google 논문에서도 나와 있듯이 느린 DRAM Bandwidth TPU 연산 속도를 따라가지 못해 전체적인 TPU 시스템 성능의 제약으로 작용합니다. 때문에 TPU 2세대에서부터는 메모리 Bandwidth 가장 HBM 장착하죠. 구글이 정확히 공개하지 않았지만 2,3세대는 1세대의 기본 아키텍처를 유지하는 가운데 집적도를 높인 것으로 추정됩니다.

 

외의 딥러닝 ASIC 업체는 2019 Intel 인수된 이스라엘 스타트업 Habana 있습니다. Habana Intel 인수 Training Gaudi Inference Goya 출시했습니다. Gaudi 딥러닝 연산의 핵심은 TCP(tensor core processor)입니다. Habana 설명에 따르면 TCP VLIW SIMD 구조라고 하네요. VLIW (very long instruction word) 명령어 구조안에 여러 독립적인 명령어를 넣어서 번의 Instruction으로 여러 프로세서를 구동하는 구조입니다. SIMD(single instruction multi data) 하나의 명령어로 여러 데이터의 연산을 수행하는 벡터용 구조이지요. VLIW SIMD 구조는 번의 Instruction으로 TCP 작은 Processor 구동시켜 Instruction overhead 낮추고, 딥러닝 연산의 대부분을 차지하는 벡터(행렬)연산의 효율성을 높이기 위한 전략으로 보입니다. Gaudi Goya 주요 차이점은 Memory interface 있습니다. 대량의 데이터를 학습하기 위해 Memory Throughput(bandwidth) 중요한 Training Gaudi에는 HBM2 탑재하였고, 상대적으로 Latency 중요한 Inference Goya에는 DDR4 탑재되었습니다. 물론 HBM이나 DDR4외에도 Scratchpad 형식의 On-chip memory 포함되어 메모리 접근의 Latency 줄이려고 했지요.

 

Gaudi and Goya Architecture (Source: Habana labs)

마지막으로 살펴볼 업체는 영국의 Graphcore입니다. Graphcore 딥러닝용 ASIC IPU(intelligence processing unit) Scratchpad 형식의 SRAM 300MB 탑재된 특징을 갖고 있습니다. Graphcore Architecture Citadel에서 작성한 White paper[2] 참고했습니다. Graphcore 1216개의 Tile 구성되어 있는데 1개의 Tile에는 1개의 AMP 256KB Scratchpad memory 포함되어 있습니다. AMP Habana TCP 같이 VLIW SIMD 프로세서로써 벡터(행렬) 연산을 병렬 수행할 있도록 설계되어 있습니다. IPU 특징은 300MB 되는 Scratch memory입니다. Graphcore 설명에 따르면 Processor 옆에 위치한 Scratchpad memory 활용함으로써 데이터 접근에 드는 시간(Latency) 줄이고 전체적인 성능 향상을 이룰 있다고 합니다. 하지만 딥러닝 모델과 중간 연산값의 합이 Scratchpad memory 범위를 벗어나면 기존 Processor 동일하게 DRAM으로부터 데이터를 가져와야 하기 때문에 한계가 있습니다. 또한, 1216개의 Tile 존재하는 메모리와 프로세서에 적절히 데이터를 분배하고, 연산 스케쥴링을 하여 프로세서의 성능을 최대한 끌어올리는 일은 쉽지 않아 보입니다. 이를 위해서는 Library 지원을 비롯한 컴파일 능력이 필요한데 Graphcore 어느 수준인지 아직 확인이 되지 않네요.

 

IPU Architecture (source: Graphcore)

지금 살펴본 업체 모두 기존 딥러닝 연산 프로세서의 대표격인 엔비디아의 GPU와의 비교를 통해 ASIC 효율성 성능을 홍보하고 있습니다. 실제 서비스에 들어간 구글 TPU 제외하고는 나머지 업체들은 시작 단계인데 어느정도나 기존 엔비디아의 시장을 가져올 있을지 지켜봐야겠습니다.

 

 

[1] N. P. Jouppi et al., 2017, In-Datacenter performance analysis of a tensor processing unit, proceedings on 44th ISCA

[2] Z. Jia et al., 2019, Dissecting the Graphcore IPU architecture via microbenchmarking, Technical report

반응형
댓글
글 보관함