GPU Programming (1/6) - The Graphics Processing Unit (GPU) Revolution
02 Oct 2021< 목차 >
본 Post의 출처는 성균관대학교 권석준 교수님의 Facebook Post 입니다.
(교수님께 댓글로 허락받은 글입니다.)
The GPU Revolution
지난 10년 간 전 세계에서 가장 주가가 많이 상승한 IT기업을 꼽으라고 한다면 애플과 엔비디아를 들 수 있을 것이다. 애플은 아이폰의 등장과 함께 고가의 스마트폰 시장을 그야말로 10년 넘게 지배해 오고 있고, 엔비디아는 고성능 게임용 GPU, 그리고 2010년대 중반 이후 딥러닝과 코인 채굴용 가속기 시장이 폭발적으로 증가하면서 주가가 급상승하고 있다.
엔비디아는 1999년, 진정한 의미의 GPU (브랜드명 GeForce)를 처음 세상에 선 보인 기업이다. 물론 90년대 후반-00년대 후반까지는 엔비디아가 집중하던 사업은 고성능 게임용 GPU였다. 그런데 엔비디아는 AI 시대가 출현하게 될 것을 예견이라도 한 듯, 2007년 General-Purpose Graphics Processing Unit (GPGPU)
를 세상에 소개한다. 엔비디아가 새롭게 창조하려고 했던 시장은 단순히 게임을 위한 고성능 그래픽카드 시장이 아닌, 범용 (general purpose) 가속기 시장이었던 것이다. 시장의 성장을 위해 전 세계의 칩 설계 개발자들이 자사의 GUGPU를 활용할 수 있는 Software Development Kit (SDK)
인 CUDA
를 같이 공개한 것이 엔비디아의 노림수였는데, 그것이 제대로 먹혔다. 그와 더불어 Open Computing Language (OpenCL)이 같이 병행되면서 그야말로 GPU는 GUGPU의 시대로 접어들 수 있었고, 엔비디아는 조금씩 게임용 그래픽 카드의 시장을 벗어나, 본격적으로 가속기 시장으로 접어들게 되었다.
CPU vs GPU
잘 알려져 있다시피, CPU와 GPU의 가장 큰 차이는 Serial vs Parallel
이다. GPU에는 단위 개수로만 따지면 CPU보다 훨씬 많은 core가 집적된다. 그리고 병렬로 처리하고자 하는 곱셈, 덧셈 등의 연산을 각각의 core에 분산하여 ‘순식간에’ 처리한다. 이에 반해 CPU는 그 아키텍처 상, serial로 데이터를 받아서 결과물을 만들어낼 수밖에 없는데, 당연히 계산 속도는 GPU의 병렬 처리에 비할 수 없을 정도로 느리다. 여기서 오해하면 안 되는 것이 있다. ‘그러면 굳이 왜 CPU를 비싼 돈 내서 또 사는 것인가? 그냥 다 GPU로 하면 안 되는 것인가?’라는 의문을 가질 수 있는데, 사실 이는 비유하자면 장인이 조각을 하는 것과 비슷하다. 장인 한 사람이 한 달 걸려 혼자서 나무 깎고 칠하고 다듬고 하는 과정을 하는 것을 CPU에 비유한다면, 장인이 본인의 제자 10명에게 각각의 일을 분배하여 한 달에 10개의 조각품을 만드는 것을 GPU에 비유할 수 있다. 일종의 가내수공업과 분업의 차이라고 볼 수 있다. 조금 더 정확한 비교를 해 보자. 사실 GPU가 2000년대 중후반 이후 병렬 계산 성능으로 각광을 받은 이유는, GPU에 분산된 각각의 core에서 동시에 비슷한 계산을 하고, 그것을 한꺼번에 모아서 출력할 수 있는 칩의 설계 때문이었다. 예를 들어 B = [5*5]
행렬과 C = [5*1]
행렬을 곱하는 연산을 생각해 보자. 이 연산을 CPU로 하려면
for ii=1:행의 개수
for jj=1:열의 개수
A = B(ii,jj)*C(jj);
A(ii) = A(ii) + A;
end
end
같이 for loop을 두 번 돌려야 한다.
그렇지만 GPU로 이 연산을 하려면 B행렬의 각 성분과 C행렬의 각 성분의 index를 GPU 코어에 각각 분배해두기만 하면 된다. 예를 들어 B*C
행렬의 곱셈은 각 성분을 5*5 = 25번
곱하는 연산이 필요한데, B(i,j)
성분과 C(k)
성분은 GPU 코어에서는 [행의 개수*(i-1) + j]
번째 코어에 미리 할당해 두면 끝난다. 그러면 각 코어는 분배받은 곱하기 연산만 하고, 그 결과를 메모리에 모아서 더하기 연산만 추가로 하면 된다. 즉, 사전에 어떻게 분배하고 모을 것이냐의 순서만 잘 정해두면 단순한 곱셈/덧셈의 반복 연산은 GPU가 훨씬 빠를 것이다. CPU는 GPU에 비해 이런 병렬 연산이 거의 불가능한 대신, 부동소수점 자리를 더 많이 가져갈 수 있다. 즉, 정밀한 계산을 GPU의 개별 코어보다는 더 잘할 수 있고, 따라서 정확도가 필요한 ALU 계산은 당연히 CPU가 GPU보다 훨씬 잘한다. 다만 반복된 계산은 대부분 그렇게 높은 정밀도를 요구하지 않으므로 GPU의 병렬 계산이 훨씬 유리하다.
Why Deep Learning need GPGPU?
이렇게 병렬화에 최적화된 GPGPU가 왜 2010년대 중반 이후, AI, 특히 딥러닝 시대가 본격 개막된 이후에 더 각광을 받게 된 것일까?
애초에 딥러닝이 어떤 방식으로 작용하는지 알면 이해하기 쉽다. 딥러닝을 배울 때 초반에 기초로 배우는 연산 중 하나가 바로 합성곱 (convolution)이다. 합성곱은 주어진 행렬 형태의 input data에 또 다른 행렬인 kernel을 위치를 바꿔가며 연산하는 matrix operation이다. 그런데 가만 보면 이는 각 행렬들의 성분을 곱하고 더하는 연산의 반복일 뿐이다. 물론 kernel을 어떤 것을 쓰느냐에 따라 input matrix의 결과물은 달라진다. 예를 들어 이미지 처리 강의에서도 다뤘지만 라플라시안 kernel을 사용할 경우, 이미지의 경계나 경계의 구배 혹은 패턴 구별을 할 수 있는 기능이 생긴다. 어떤 종류의 kernel이든 일단 이렇게 합성곱을 거치는 과정에서 결국 단순한 곱셈/덧셈을 반복하게 되므로, 당연히 그에 특화된 설계 방식을 가지고 있던 GUGPU가 훨씬 유리한 입장이 되는 것은 사실이다. 또한 딥러닝에서 학습과 추론이 어떻게 이루어지는지를 생각해 보면, 왜 애초에 CPU를 기반으로 하는 딥러닝은 거의 불가능에 가까운 지도 이해할 수 있다. 앞서도 이야기했지만, GPU는 CPU만큼의 정밀도를 요구하지도 않고 그렇게 하도록 설계되지도 않았다. 딥러닝으로 training data를 학습하는 과정은 눈을 가린 사람이 손발만 사용해서 길을 찾아가는 것과 비슷한 과정이다. 운이 좋으면 손을 뻗은 곳에 지표로 삼을 만한 물체가 있을 수도 있지만, 운이 안 좋으면 발을 뻗은 곳에는 함정이 있을 수도 있다. 즉, 매번 trial을 할 때 반드시 error가 나오게 되어 있는데, 애초에 그 error의 정확도 혹은 정밀도는 별로 중요하지 않다. 오히려 그 error의 정밀도에만 신경 쓰다 보면 학습 속도가 느려질 것이다. 1초당 100번의 trial-and-error를 하는 사람이 길을 더 빨리 찾을 것인지, 1초당 1번의 아주 조심스러운 successful trial만 하는 사람이 더 길을 빨리 찾을 것인지를 비교해보면 답이 나올 것이다. 이러한 딥러닝의 학습 방식은 GPU가 설계된 아키텍처와 정확히 맞아떨어졌고, 이 때문에 이제는 GPU는 고성능 게임이 아닌 딥러닝용 가속기 머신으로 인식되기 시작했다.
여기서 한 가지 간과하면 안 되는 것은 여전히 GUGPU는 게임 성능 강화에도 최적화되어 있다는 것이다. 애초에 GPU가 행렬 처리에 특화된 성능을 가진 것을 생각하면 이것은 당연한 이야기다. 90년대 초반 이전의 게임에서는 사실 3D 이미지라는 개념이 거의 없었고, 있었어도 특정 방향으로의 2D projection만 계속 보여주는 식이었다. 사실상 2D only라고 봐도 무방하다. 행렬에 관한 선형대수 연산에서 2차원 행렬 (Matrix)
은 사실 쉬운 계산에 속한다. 그런데 문제는 3차원 행렬 (Tensor)
연산이다. 우리가 사는 세상은 3차원이고, 보고 듣고 느끼는 모든 물리적 현상이 3차원 공간 + 1차원 시간 속에서 벌어진다. 매 초마다 3차원 속에서의 이벤트는 시시각각 바뀌는데, 우리 눈은 그 정보를 강제로 2차원에 매핑하여 인식해야 한다. 인간의 두뇌가 시각 정보를 처리하는데 굉장히 많은 리소스를 사용하고 있다는 것은 바로 이 때문이다. 이는 연산에 대해서도 똑같이 적용할 수 있는 이야기다. 3차원의 어떤 물체 이미지를 우리가 인식하는 2차원 공간, 즉 모니터 위에 띄워야 하는 작업을 생각해 보자. 예를 들어 3차원 폴리곤으로 구성된 인형을 특정한 각도에서 바라보는 이미지를 2차원 모니터 상에 띄워야 하는 것이다. 이러려면 행렬 변환 (matrix transformation) 연산이 들어가야 한다. 회전 변환, stretching, 소실점 처리 같은 연산을 해야 한다. 여기에 조금 더 욕심을 부리면 ray tracing도 해야 한다. 즉, 빛과 그림자 효과도 같이 봐야 하는데, 이 계산은 더더욱 많은 연산을 필요로 한다. 기하광학 연산이 같이 모든 폴리곤의 각 질점마다 행해져야 하기 때문이다. 그런데 이렇게 무지막지한 계산을 매초에 한 번도 아니고, 적어도 30번에서 60번 정도는 해야, 사람의 눈은 이 현상이 실시간으로 자연스럽게 일어나고 있다고 인식을 한다. 그야말로 컴퓨터 공학자들에게는 악몽 같은 과업이었을 것이다. 90년대 초반에 CPU로 이러한 작업을 했다고 한다면 아마 1분에 한 장면 정도 겨우 띄울 수 있었을 것이다. 참을성 없는 게이머들에게는 참을 수 없는 렉 (lagging) 이 된다. 그런데 GPU는 이러한 반복된 연산을 행렬 기반으로 병렬 처리할 수 있기 때문에, 이제는 CPU가 이러한 작업의 부담을 홀로 질 필요가 없다. 각종 행렬 변환 연산과 ray tracing 기하광학 연산의 대부분은 GPU가 담당하고, CPU에서는 이들의 후속 연산만 담당하면 된다. 즉, 게이머 입장에서는 이제는 이 연산이 ‘가속’된 것처럼 느껴진다. 이로 인해 가속기라는 이름이 붙기도 했다.
So, are GPUs omnipotent?
이렇게 행렬 기반으로 표현될 수 있는 데이터라면 그것이 게임용 고해상도 3차원 이미지든, 의료용 3D voxel data든, 딥러닝 학습용 multi-feature tensor data든, GUGPU의 전성시대는 확실히 peak에 도달하고 있다고 해도 과언이 아닐 것이다. 그렇지만 문제는 GUGPU의 장점이 동시에 단점도 된다는 것이다. 병렬 처리의 속도를 개선하는 방법은 코어의 개수를 더 늘리거나, 코어와 코어 사이의 정보 I/O 속도를 더 빠르게 하는 것이다. 이를 위해 메모리를 각 코어와 통합할 수도 있고, 밴드폭 (bandwidth)을 더 늘릴 수도 있다. 그렇지만, 변하지 않는 한 가지 대가는 그만큼 전력 소모량이 늘어난다는 것이다. 코어 자체가 소모하는 전력과 더불어, 코어에서 소모되는 전력이 열로 환원되는 과정에서 이를 식히기 위한 냉각을 위한 전력 소모도 늘어난다. 또한 반복된 발열-냉각 과정은 칩의 수명에도 영향을 준다. GPU 역시 실리콘 기반의 반도체 칩이므로, 결국 집중된 전력의 사용과 연산은 코어를 이루고 있는 재료와 소자의 수명을 단축시킨다. 기계적인 failure, thermal failure, electrical failure가 생길 수 있기 때문이다. 실제로 블록체인 채굴용으로 거의 공장식으로 운영되는 채굴장에서 쓰인 GUGPU의 수명이 6개월도 못 간다는 이야기가 괜히 나오는 것이 아니며, 일반 피시방에서 사용되는 high performance GPU 역시, 수명은 보통 2년, 길게 잡아도 3-4년에 불과하다. 물론 그 수명이 무색하게 다음 세대의 GPU가 나오기 때문에 수명의 문제는 가려져 있지만, 수명 자체는 CPU보다 짧아지는 것은 감내할 수밖에 없는 단점이다.
The Rise of FPGA, NPU (TPU)
이럼에도 불구하고 AI 시대는 이제 막 성장하고 꽃 피우려는 상황인데, GPU 같은 가속기를 쓰지 않고는 그 수많은 연산을 감당할 방법은 없다. 그렇지만 GPU에만 의존하자니, 점점 학습을 위해 GPU가 소모하는 전력량은 하늘을 찌를 기세다. 이에 대한 대안이 당연히 필요하며, 2010년대 후반에서 2020년대 넘어오면서 나온 솔루션 중 하나가 Field-Programmable Gate Array (FPGA)
와 Neural Processing Unit (NPU)
다. 지난 2019년, 인텔과 더불어 CPU 제조업체 양강을 이루고 있던 AMD는 세계 제1위의 FPGA 업체인 자일링스를 전격 인수했다. 업계의 시각은 올 것이 왔다는 것이었는데, 그도 그럴 것이 경쟁자 인텔은 이미 FPGA 시장의 2인자 알테라를 2015년에 167억 달러에 인수한 바 있기 때문이다. 전통의 CPU 제조 대기업들이 CPU 와는 결이 다른 FGPA를 경쟁적으로 인수한 이유는 무엇일까? FPGA는 말 그대로 사용자가 그때그때 목적에 맞게 reprogramming 할 수 있는 연산 칩이다. 사용자가 재프로그래밍할 수 있다는 이야기는, 칩이 동작할 수 있는 최소한의 기능만 남겨 두고, 나머지 유닛의 배열이나 설계는 사용자가 바꿀 수 있다는 이야기다. 그렇다면 당연히 CPU나 디램 같은 표준화된 공정에서 찍어내는 반도체 칩에 비해, 비용이 비싸질 수밖에 없다. degree of freedom을 늘려 두어야 하기 때문이다. 딥러닝 시대 이전에는 이런 연유로 FPGA 기반의 칩들은 특수한 목적 (원전용, 우주탐사선용 같은 특정한 용도)로 주요 활용되었을 뿐, 범용으로 쓰이는 일은 거의 없었다.
그런데 딥러닝 시대가 본격화되면서, GPU가 마냥 지배할 것 같던 시장이 점점 다변화되기 시작했다. 이 기조는 GPU에게는 결코 좋기만 한 상황이 되지는 않았다. 예를 들어 단순히 딥러닝이 합성곱 계산만 반복하는 연산들의 집합이었다면 문제가 되지 않았을 것이지만, 딥러닝을 적용하고자 하는 분야가 넓어지면서, 딥러닝 엔진이 학습해야 하는 데이터의 규모와 특징도 더욱 다양하게 바뀌었다. 단순히 이미지에서 숫자를 인식하거나 개와 고양이를 구분하는 정도로는 응용 범위가 제한이 되니, 자연어를 처리한다든지, 1,000개가 넘는 feature를 갖는 복잡한 화학 공정 데이터에서 오류를 검출한다든지, IoT 센서들의 네트워크를 설계해야 한다든지, CFD로는 커버할 수 없는 다공성 매질 내부의 복잡한 유체의 흐름을 추론하여 모사한다든지, 실시간으로 자율주행 엔진을 만들어야 한다든지 하는 식으로 용도와 스펙이 다변화된 시장이 열리기 시작한 것이다. 딥러닝을 산업에 응용하고자 하는 측에서는 이렇게 시장이 다변화되는 것이 환영할만한 일이지만, 범용 GPU로 이것을 커버하려던 측에서는 이것은 고민거리가 된다. 각 응용처에서는 구별이 중요한지, 추론이 중요한지, 예측이 중요한지, 검출이 중요한지 가중치는 다 다른데, 이에 대해 천편일률적인 뉴럴넷 알고리듬에 최적화된 연산 구조를 계속 이끌고 가기 어려워졌기 때문이다. 딥러닝이 등장한 초반에는, 가용한 하드웨어가 거의 GUGPU 밖에 없으므로, 딥러닝 알고리듬 개발자들은 주어진 GUGPU 스펙을 기반으로 알고리듬을 구축할 수밖에 없었다. 그런데 딥러닝이 다루는 데이터의 종류와 양이 기하급수적으로 늘어나면서, 이제는 오히려 딥러닝 알고리듬이 GPU의 아키텍처 설계에 영향을 미치는 빈도가 늘어가고 있다. GPU 개별 코어의 정밀도 (부동소수점 자리)를 FP16에 고정시킨다는지, 정밀도의 변동 허용 (다중 정밀도) 코어를 설계하는 것이 바로 이런 사례에 해당한다. 그렇지만 이러한 딥러닝-driven GPU 설계에도 한계는 명확하다. GPU 역시 한 번 찍어내면 그 구조를 바꾸기 거의 불가능하고, reprogramming 할 여지가 없기 때문이다. 도끼로 면도를 한다면야 할 수는 있겠지만, 손에 잘 익은 면도기가 아쉬워지는 것은 인지상정이다.
대조적으로 FPGA가 이러한 목적에 더 적합할 수 있음이 점점 시장에서 받아들여지고 있다. FPGA는 앞서 언급한 것처럼, 로직 설계를 채 다 마치지 않은 상황에서 고객에게 납품된다. 다만 그 위에 고객들이 자신들의 목적에 맞게 프로그래밍할 수 있는 일종의 SDK를 제공한다. 고객들이 자신의 목적에 맞게 예를 들어 유체역학 시뮬레이션 전용 딥러닝 칩을 만들 수도 있다는 이야기인데, 설사 초반에 설계에 착오가 있어서 제대로 동작하지 않는다고 해도, reprogramming이 가능하므로 얼마든지 소정이 가능하고, 따라서 초기 테스트 과정에서 비용 손실을 줄일 수 있다. GPU에서 이루어졌던 하드웨어 단계에서의 병렬 처리 성능에 비할 수는 없겠지만, FGPA 역시 병렬 처리를 할 수 있는데, 이 역시 FPGA의 특징에 기인한다. FPGA에서는 소프트웨어 레벨에서 병렬 처리를 구현할 수 있는데, 단일 코어에서 복수의 명령어 (Multiple Instruction)
를 받아 복수의 아웃풋을 만들어내는 알고리듬 설계가 가능하다. 이러한 방식을 Multiple instruction multiple data (MIMD)
라고 한다. 그런데 GPU의 개별 코어에서는 반복된 작업을 통한 병렬 처리에 최적인 조건을 맞추기 위해 애초에 데이터 흐름이 single instruction multiple data (SIMD)로 구성된다. 명령어 셋이 잘 구축되어 있고 데이터 규격이 잘 정돈되어 있다면 그야말로 GPU는 하드웨어 레벨에서는 거의 신계에 가까운 병렬 처리가 가능하지만, 데이터 규격이 달라지거나 주어진 명령어 셋으로 커버하기 어려운 연산이 나오면 버벅댈 수밖에 없다. 그에 반해 FPGA는 하드웨어 레벨에서의 병렬 처리는 어려우나, flexible 하다는 것이 제일 좋은 장점이다. 데이터 규격 (width)가 달라져도 미리 define 된 명령어 셋에 구애받을 필요가 없으니, multiple instruction set을 활용할 수 있으니 오케이이기 때문이다. 이렇게 flexible 하다는 특징이 있다는 것은 다변화된 데이터셋과 말단 application이 각광받고 있는 지금의 딥러닝 시대에는 FPGA의 시장성이 높아질 것임을 의미한다.
그에 더해 애초에 수천 개의 코어를 동시에 돌릴 필요가 없는 (물론 성능은 다소 떨어지더라도) FPGA는 GPU와 비교해 보면 전력 소모는 매우 매우 낮아진다 (첨부 표 1 참조). 추가적으로 FPGA는 시장의 딥러닝 알고리듬이 개선됨에 따라, 전력 소모 방식도 수정이 가능하므로, 언제든 에너지 효율을 최적화할 수 있다. 필요 없는 스위치는 끄고, 필요한 스위치만 올리면 되는 방식이기 때문이다. 이러한 연유로 딥러닝 시대가 본격화되기 전, GPU에서 딱히 재미를 못 봤던 인텔과 AMD는 부랴부랴 업계 1, 2위 FPGA 업체를 거액으로 인수한 것으로 해석할 수 있다.
물론 기존의 GPU 강자였던 엔디비아 역시 가만있는 것은 아니다. FPGA가 아무리 장점이 많다고 해도, 여전히 GPU에 비해 딥러닝에서 취약한 치명적 단점
이 있다. 그것은 GPU에 비해 training 속도가 느리다는 것
이다. 이는 어쩔 수 없는 단점이다. 애초에 가용한 코어를 하드웨어 레벨에서 무작정 늘려서 built-in 한 구조가 아니기 때문이다. 인텔과 AMD는 FPGA를 통해 GPU가 지배하고 있던 AI용 가속기 시장의 포션을 가져가려는 복안을 세웠다. 인텔은 Agilex
와 PAC (Programmable Acceleration Card)
를 출시했고, AMD (자일링스) 역시 가속기 카드 Alveo
를 출시하면서 승부수를 던진 바 있다. 특히 자일링스는 HMB (High-Bandwidth Memory)
를 아예 FPGA에 결합한 제품인 버설 (versal)
같은 제품으로 선회하기도 했는데, 이는 10 나노 이하급 반도체 초미세 패터닝 기술이 성숙 단계에 이르면서 구현이 가능해진 기술이기도 했다 (versal의 경우 7 나노 공정으로 제조). 인텔이 알테라를 인수한 이후, 인텔의 FPGA 기반 가속기 매출은 큰 성장세를 보이지 않은 반면, 자일링스의 매출은 지속적으로 큰 성장세를 보이고 있고, 이는 자일링스 방식의 FPGA + HBM 구조가 딥러닝 가속기 성능의 격차를 조금씩 메꿔가고 있음을 보여 주는 것이기도 하다. 자일링스는 이에 더해, 딥뉴럴넷에 최적화된 xDNN 프로세서
로 개발을 확대하면서 flexible 딥러닝 가속기 시장을 노리고 있다.
사실 딥러닝 학습 과정에서 행렬 연산만큼 중요한 것이, 대용량 데이터의 학습 결과를 integration 하는 과정인데, 이를 위해서는 데이터가 쭉 줄지어 있을 때, 대기 시간을 단축하는 과정이 필요하다. 즉, 데이터의 지연성을 줄이는 것이 에너지 소모 면에서나 학습 속도 면에서나 점점 중요해지고 있다. 엔비디아가 FPGA 진영에 대해 꺼내 든 카드 역시, 바로 이 데이터 지연성을 줄이는 기술인 인피니밴드다. 이를 위해 엔비디아는 인텔과 AMD의 인수 경쟁에서 승리하면서 2019년, 네트워크-인터페이스 카드 (NIC)와 인피니밴드 분야 글로벌 강자인 멜라녹스를 69억 달러에 인수했고, 자사의 NPU 최적화 기술을 확보할 수 있었다. 엔비디아가 GPU에 더해 딥러닝, 나아가 AI 가속기 시장 전체를 노리고 있는 기술은 범용 딥러닝 가속기인 Xavier인 SoC며, 이는 특히 AI 가속기 수요가 폭증하고 있는 자율주행차 시장의 주력 제품으로 포지셔닝되고 있다. 엔디비아의 CUDA 역시 딥러닝에 특화된 cuDNN을 제공하는데, 데이터셋이나 규모에 상관없이, 거의 모든 딥뉴럴넷이 필요로 하는 유닛들을 미리 구현해 놓았기 때문에, 향후 NPU (Neural processing unit)으로의 시장 교두보도 확보해 놓은 상태라고 볼 수 있다. 특히 NPU는 특정 데이터셋에 대해 미리 하드웨어 레벨에서 DNN을 구현해 놓은 칩 (말 그대로 딥러닝 네트워크를 구성하는 각 층을 실리콘 칩 기반의 로직 유닛으로 1:1 대응시켜 구현한 칩이다. 즉, 뉴런을 하드웨어 레벨에서 그대로 구현한 것으로 보면 된다.)이기 때문에, 그 특성상 모바일 AP에 집적되기 좋다는 것을 고려한다면, 앞으로도 크게 성장할 AP 시장에서의 지배력도 계속 유지할 가능성이 높을 것이다. NPU는 ‘추론’을 GPU에서 하는 것이 아닌, 말단 장비 (예를 들어 스마트폰)에서 할 수 있는 수준으로 기능을 고정시켜 놓은 칩이라고 볼 수 있다. 웬만한 두꺼운 책 수준으로 덩치가 커진 GPU를 스마트폰에 넣을 수는 없으니, 최대한 학습된 기존 구조가 built-in 된 방식으로 NPU를 만드는 것이다. 모델 학습 자체는 GPU 서버에서 담당하되, 학습된 모델을 기반으로 입력된 데이터로부터 특성을 추론하는 기능만 담당하게끔 NPU가 역할 분담을 한다면, 이제는 전력을 많이 소모하지 않아도 되고, 덩치가 커질 필요도 없으므로, 스마트폰이나 차량용 반도체 칩 등에 맞춤형으로 같이 집적될 수 있다. 이는 FPGA가 추구해 오던 flexibility를 우회하는 전략으로도 볼 수 있다. 엔비디아는 바로 이러한 NPU 시장을 타깃으로 Xavier 이후 기술인 Jetson 시리즈를 발표했고, 가격도 더 인하했다.
NPU 시장의 경쟁 상대는 아마도 구글이 될 것인데, 구글은 자체 설계한 칩인 TPU (tensor processing unit)
시리즈 Coral을 발표했으며, 가격은 엔비디아의 Jetson의 1/5 이하로 책정하면서 원가 경쟁을 시도하고 있다. 물론 성능과 가격은 비례하는데, Coral의 성능은 Xavier나 Jetson의 1/5-1/3 수준으로 알려져 있다. 다만, 구글이 이후 출시할 TPU들은 시장에서의 피드백을 바탕으로 조금 더 광범위한 분야에서 활용될 것으로 전망되는데, 이는 구글이 구상하고 있는 GPU 클라우드 서버를 통한 학습 모델 업데이트 속도에서의 경쟁력에 기반을 둔 것이라 추정할 수 있다. 삼성이나 퀄컴 같은 전통의 모바일 AP 업체들 역시, 초미세 패터닝의 한계로 인해 AP 칩의 성능 자체가 개선될 여지가 점점 없어지다 보니, NPU를 욱여넣는 전략을 취하고 있다. 퀄컴은 자사의 스냅드래곤 시리즈 845 이후부터 NPU를 탑재하기 시작했으며, 삼성은 자사의 엑시노스 시리즈 9 이후부터 NPU를 탑재하기 시작했다. NPU를 통합하거나 병행하려는 업체들은 당연히 모바일 칩에서의 데이터를 확보하여 점점 그 적용 범위를 넓혀갈 것인데, 다음 시장은 아마도 차량용 반도체 (자율주행차칩이나 전장반도체칩), IoT 신호처리용 칩, 군사용 복합 레이더칩 등으로 점점 범위가 넓어질 것이다.
그런데 아이러니컬하게도 FPGA와 NPU/TPU/cuDNN 시장의 경쟁은 하드웨어가 아닌 소프트웨어, 특히 딥러닝 알고리듬의 변화 추세가 어떻게 될 것이냐에 달려 있다. 지금도 딥러닝 알고리듬 분야는 하루가 다르게 새로운 방법론, 새로운 이론, 새로운 모델이 쏟아져 나오고 있고, 매년 4대 인공지능 학회에 논문을 억셉시키는 것은 점점 어려워지고 있다. 그러나 다른 분야의 기술이 그렇듯, 딥러닝 역시 이제 점점 성숙기에 접어들면서 알고리듬의 혁신 속도가 느려지기 시작하면, FPGA 고유의 flexiblity의 장점도 점점 희석될 것이다. 더 빠르고 더 효율적인 알고리듬이 나오면 그에 맞춰 reprogramming 할 수 있었던 장점이, 만약 알고리듬 교체 주기가 점점 느려진다면 딱히 장점이 되지는 않을 것이기 때문이다. 일례로 이제는 이미지 인식 정도의 기능에 대해서는 더 이상 개선될 여지가 거의 없을 정도로 (사람의 인식률은 이미 넘은 지 오래고, 웬만한 알고리듬들은 이제 이미지 인식률이 95%를 넘는다.) 알고리듬은 saturated state에 도달한 것으로 볼 수 있다. 오히려 범용 DNN를 계속 개질 하여 하드웨어와 최신 알고리듬 사이의 격차를 줄여 나가는 방식이 나중에는 더 유리해질 수 있다.
딥러닝 가속기 시장은 앞으로도 계속 성장할 것이고, 아마 2030년 이후에도 수요는 증가 추세일 것이지만, 시장을 지배하는 방식이 무엇이 될지는 더 두고 보아야 한다. 딥러닝 알고리듬의 성숙기가 언제 찾아올 것인지는 아무도 예측할 수 없으나, 결국 성숙기는 올 것이고, 그 시점에서 어떤 기술이 더 최적화된 상황일지는 예측하기 어렵다. FPGA 역시 얼마든지 혁신할 여지는 있다. 올해 6월에 Nature에 공개된 구글의 강화학습 기반 칩 디자인 연구* (A graph placement methodology for fast chip design)는 이러한 혁신의 가능성을 보여주는 좋은 사례다. 좁은 칩 다이 면적 위에 수백만수천만 개의 유닛을 배치하고, 각 유닛 사이의 데이터 인풋과 아웃풋을 지연 시간을 최소로 하면서 에너지 사용량을 줄이는 설계는 반도체 칩 설계의 가장 어려운 부분 중 하나였다. 팹리스 업체들은 그간의 노하우를 활용하여 이러한 최적화를 진행해 왔는데, 구글에서 공개한 결과는 자뭇 충격적일 정도로 그간의 노하우를 무색게 할 정도의 개선을 이뤄냈다. 이는 마치 복잡한 아파트 평면에 온갖 가구와 가전제품을 배치하되 몸의 움직임을 최소화하면서도 힘을 최소로 쓸 수 있는 최적의 동선을 배치하는 것과 비슷하다. 구글은 바둑의 상태 공간 (~10^360) 보다 훨씬 큰 공간인 유닛 배치 상태 공간 (~10^2500)에 대해 알파고의 방법을 훨씬 더 발전적으로 계승시킨 방식으로 최적화 설계를 이뤄낸 것이다. 이러한 설계 방법은 당연히 FPGA의 최적화에도 바로 적용할 수 있는데, 주어진 instruction set의 degree of freedom을 고려하여 주어진 성능을 최적화하는 것은 같은 맥락에서 달성 가능한 작업이기 때문이다.
엔비디아나 구글, 인텔, AMD, 퀄컴 등이 사용하는 기존의 방식과 아예 궤를 달리 하는 기술도 나올 수 있을까? 당연히 그럴 가능성이 있다. 뉴럴넷이라는 이름 그대로, 이제는 인간의 대뇌 신경망을 단순히 흉내 낸 것이 아니라, 아예 copy & phaste 하는 방식으로 반도체 칩과 연계하는 방식의 기술을 생각할 수 있다. 최근에 삼성과 하버드대 한국이 과학자들이 공개한 perspective가 바로 그런 예다** (Neuromorphic electronics based on copying and pasting the brain…). 이 논문에서 전망한 대체 기술은 바로 뉴로모픽 반도체 (neuromorphic chip)인데, 이미 잘 알려진 개념인 뉴로모픽 칩이 새삼 다시 주목받은 이유는, 아예 인간의 뇌 신경망에서 주고받는 전기신호를 나노 전극과 연결하여 그대로 복사 (copy)하고 그것을 하부에 연결된 메모리에 복사 (phaste)하는 개념이 가능하다는 것을 실존 기술 레벨에서 보였기 때문이다. 이는 뇌라는 소프트 조직을 다 걷어낸 나머지 모든 기능을 그대로 반도체 칩으로 옮겨갈 수 있다는 것을 의미한다. 뉴로모픽 칩을 구현하기 위한 메모리 반도체 기술은 이미 SRAM, RRAM, MRAM, memristor 등으로 구현되어 있거나 이미 실제로 활용되고 있기 때문에, 수천조 개의 뉴런에서 발생하는 신호를 어떻게 실시간으로 지연성을 최소화한 채 메모리로 옮기느냐가 관건이 될 뿐, copy & phaste 방식의 연결은 이제는 기술적으로 불가능한 상태는 아닌 것으로 보인다.
앞으로도 딥러닝 가속기가 이끄는 반도체 시장은 다양하게 그리고 더 강력하게 성장할 것이다. 딥러닝 기반의 데이터 처리가 얼마나 더 다변화된 시장을 뚫을 수 있을 것이고, 얼마나 더 큰 비정형 데이터들을 처리할 수 있느냐에 따라 그 시장 규모, 그리고 지배 기술이 정해질 것이며, 여기서 주목해야 하는 것은 현재의 키 플레이어 기술들의 발전과 더불어, 그것을 아예 다른 방향에서 대체할 수 있을만한 신개념 기술 들일 것이다. 뉴로모픽 외에도, photonics 기반의 neural network이 가능하며, 이는 지연시간 자체가 빛의 속도로 줄어들 것임을 의미하므로, 더 강력한 NPU의 등장을 예고할 수 있다. 스핀트로닉스의 경우 병렬 처리 성능을 더 끌어올릴 수 있을 것이며, 구글이 공개한 TFQ 같은 앙자컴퓨터 전용 딥러닝 알고리듬은 지금까지의 방식과 전혀 다른 양상으로 ‘추론’을 재정의하게 될 가능성도 있다. 앞으로의 반도체 시장 역시, 결국 딥러닝이 주도하는 AI 가속기와 그에 걸맞은 알고리듬의 혁신에서 주요 모멘텀이 창출될 것이고, 다양한 아키텍처를 가져오는 더 많은 팹리스 업체들이 우후죽순 등장하는 와중에, 이들의 옥석을 가려내고 기술의 구현 한계를 결정할 수 있는 공정 기술의 확보가 결국 앞으로 창출될 시장의 지배력을 결정하게 될 것으로 예상된다.