NPU의 원리 — 신경망 연산에 최적화된 프로세서는 어떻게 작동하는가
NPU의 원리 — 신경망 연산에 최적화된 프로세서는 어떻게 작동하는가
스마트폰으로 사진 속 얼굴을 인식하거나 음성 명령을 알아듣고, 실시간으로 외국어를 번역할 때, 그 이면에서는 막대한 양의 계산이 순식간에 처리된다. 흥미로운 점은 이 작업을 담당하는 주체가 우리에게 익숙한 중앙처리장치(CPU)가 아니라는 사실이다. 최근 몇 년 사이 스마트폰과 노트북, 자율주행차, 사물인터넷(IoT) 기기에는 신경망처리장치(NPU, Neural Processing Unit)라는 전용 칩이 속속 탑재되고 있다. 마이크로소프트가 이른바 ‘코파일럿+ PC’ 인증 기준으로 초당 40조 회(40 TOPS)의 연산 성능을 요구할 만큼, NPU는 이제 개인용 컴퓨터의 기본 구성 요소로 자리 잡았다. 그렇다면 이 칩은 대체 어떤 원리로 작동하는 것일까. 그 답을 이해하려면 인공지능 연산이 근본적으로 어떤 성격의 계산인지부터 짚어야 한다.
신경망 연산의 본질: 곱하고 더하기의 반복
딥러닝 모델이 수행하는 계산의 본질은 의외로 단순하다. 신경망의 한 계층에서 벌어지는 일은 결국 입력값 하나하나에 가중치를 곱한 뒤 그 결과를 모두 합산하고, 여기에 활성화 함수를 적용하는 과정의 반복이다. 수식으로 쓰면 ‘출력 = 활성화함수(가중치 × 입력 + 편향)’라는 한 줄로 요약되며, 이미지 분류에 쓰이는 합성곱 신경망이든 최신 언어 모델의 근간인 트랜스포머든 이 구조가 수백 번 되풀이될 뿐이다. 문제는 여기 등장하는 가중치 행렬이 수백만 개의 숫자로 이루어질 수 있다는 데 있다. 입력의 모든 값을 모든 가중치와 곱한 뒤 더해야 하므로, 단 한 번의 추론(inference)에도 수십억 번의 ‘곱하고 더하기’가 필요하다.
이처럼 두 숫자를 곱한 다음 그 값을 누적해 더하는 연산을 곱셈-누산(MAC, Multiply-Accumulate) 연산이라 부른다. NPU의 설계 철학은 바로 이 지점에서 출발한다. 신경망 추론이 사실상 거대한 행렬 곱셈의 반복이라면, 굳이 온갖 종류의 작업을 두루 처리하도록 만들어진 범용 프로세서를 쓸 이유가 없다. 오직 MAC 연산만 압도적으로 빠르고 효율적으로 처리하는 전용 회로를 만들면 되는 것이다.

CPU·GPU와 무엇이 다른가
이 차이를 이해하려면 CPU의 구조와 비교하는 것이 도움이 된다. 노트북용 CPU는 대개 강력한 코어 네다섯 개를 갖추고 있어 복잡하고 순차적인 작업을 유연하게 처리하는 데 능하다. 그러나 단순한 계산 수십억 번을 동시에 쏟아내는 데는 오히려 비효율적이다. 반면 NPU는 곱셈-누산만 담당하는 아주 작은 처리 장치, 곧 MAC 유닛 수천 개를 촘촘히 집적한다. 각 유닛이 하는 일은 보잘것없이 단순하지만, 이들이 한꺼번에 병렬로 작동하면 초당 수조 회에 이르는 계산을 처리할 수 있다.
그래픽처리장치(GPU) 역시 병렬 연산에 강해 인공지능 학습에 널리 쓰이지만, 본래 그래픽 렌더링을 위해 설계된 범용성을 여전히 품고 있다. NPU는 이보다 한 걸음 더 나아가 신경망 추론이라는 단일 목적에 회로를 완전히 특화한다. 업계에서는 같은 작업을 CPU에서 GPU로, 다시 GPU에서 NPU로 옮겨 갈 때마다 와트당 성능, 즉 전력 대비 처리량이 최대 한 자릿수 배수(약 10배)씩 개선될 수 있다고 본다. 실제로 한 분석에 따르면 SoC 안의 CPU 코어가 인공지능 연산에서 초당 약 0.5조 회 수준을 내는 데 비해, 같은 칩에 얹힌 NPU는 그보다 70배가량 효율적으로 동일한 계산을 수행한다.
심장부, 시스톨릭 어레이
NPU 효율의 핵심에는 시스톨릭 어레이(systolic array)라는 독특한 회로 구조가 있다. ‘시스톨릭’은 심장이 규칙적으로 박동한다는 뜻의 의학 용어에서 왔는데, 이름 그대로 데이터가 클록 신호에 맞춰 격자 모양으로 늘어선 처리 장치 사이를 리듬감 있게 흘러 다닌다. 이 개념을 대중화한 대표적 사례가 구글이 2015년 자사 데이터센터에 도입한 텐서처리장치(TPU)다. 초대 TPU는 8비트 정수 곱셈-누산 유닛을 256×256, 곧 6만 5,536개나 격자로 배치해 초당 92조 회의 연산을 단 28~40와트라는 낮은 전력으로 처리했다.
시스톨릭 어레이가 효율적인 이유는 데이터를 다루는 방식에 있다. 일반적인 프로세서에서는 계산할 때마다 같은 가중치와 입력값을 메모리에서 반복해 불러오고, 중간 결과를 다시 메모리에 저장하기를 되풀이한다. 그런데 실제로 칩이 소모하는 에너지의 상당 부분은 계산 그 자체가 아니라 이렇게 데이터를 이리저리 옮기는 데 쓰인다. 시스톨릭 어레이는 이 낭비를 근본적으로 줄인다. 이른바 ‘가중치 고정(weight-stationary)’ 방식에서는 가중치를 각 처리 장치 안에 미리 심어 둔 채 고정하고, 입력 데이터만 격자를 따라 가로로 흘려보낸다. 각 칸에서 곱셈이 일어나고 부분 합은 세로 방향으로 내려가며 차곡차곡 누적된다. 데이터가 한 번 들어오면 옆 칸으로 넘겨 재사용하기 때문에, 같은 값을 메모리에서 몇 번이고 다시 읽어 올 필요가 사라진다.
메모리 병목과 저정밀도 연산
사실 인공지능 추론에서 진짜 걸림돌은 연산 능력 자체가 아니라 메모리 대역폭, 즉 데이터를 얼마나 빨리 실어 나를 수 있느냐다. 수백억 개의 매개변수를 가진 대형 모델을 돌리려면 어마어마한 양의 데이터가 메모리와 연산 장치 사이를 오가야 한다. NPU는 자주 쓰는 가중치를 칩 바깥의 느린 DRAM 대신 칩 안에 내장된 빠른 SRAM에 최대한 담아 두는 방식으로 이 병목을 완화한다. 특히 애플처럼 CPU와 GPU, 신경망 엔진이 하나의 메모리 풀을 공유하는 통합 메모리 구조에서는 장치 사이에 데이터를 복사할 필요조차 없어 큰 이점을 얻는다.
또 하나의 비결은 정밀도를 과감히 낮추는 것이다. CPU가 다루는 32비트 부동소수점 대신, NPU는 흔히 8비트 정수(INT8)만으로 계산한다. 연구자들은 추론 단계에서는 굳이 소수점 아래 여러 자리까지의 정밀도가 필요하지 않으며, 이를 줄여도 예측 결과에 의미 있는 차이가 생기지 않는다는 사실을 확인했다. 32비트를 8비트로 바꾸면 모델이 차지하는 메모리는 4분의 1로 줄고, 데이터 이동량과 전력 소모도 크게 감소한다. 이렇게 숫자의 표현 범위를 줄이는 기법을 양자화(quantization)라 부른다. 다만 학습 단계에서는 미세한 값의 변화가 수백만 번 누적되므로 더 높은 정밀도가 필요한데, 구글은 이를 위해 지수 부분은 그대로 두고 정밀도만 낮춘 BFloat16 같은 형식을 고안하기도 했다.
온디바이스 AI 시대의 엔진
정리하면 NPU의 원리는 세 가지 축으로 요약된다. 첫째, 신경망 연산을 곱셈-누산이라는 단순 연산의 대량 병렬 처리로 환원한다. 둘째, 시스톨릭 어레이를 통해 데이터를 재사용하며 불필요한 메모리 접근을 줄인다. 셋째, 양자화로 정밀도를 낮춰 전력과 대역폭을 절약한다. 이 세 가지가 맞물리면서, 한때 거대한 데이터센터에서만 가능하던 인공지능 연산이 손안의 기기에서도 실시간으로 이루어질 수 있게 되었다.
NPU가 여는 가장 큰 변화는 ‘온디바이스 AI’, 곧 데이터를 외부 서버로 보내지 않고 기기 안에서 직접 처리하는 방식이다. 이는 응답 속도를 높이고 전력 소모를 줄일 뿐 아니라, 개인 정보가 기기 밖으로 나가지 않게 함으로써 프라이버시를 지키는 데도 유리하다. 지난 40여 년간 컴퓨터 산업을 지배해 온 ‘무엇이든 두루 처리하는 범용 프로세서’라는 철학에서 벗어나, 특정 목적에 회로를 최적화하는 방향으로의 전환을 NPU는 상징적으로 보여 준다. 앞으로 인공지능이 우리 삶의 더 깊은 곳까지 스며들수록, 이 작지만 특별한 칩의 역할은 더욱 커질 것이다.