머신러닝(ML)과 딥러닝(DL)을 포함한 AI는 이미 우리 삶 깊숙이 자리 잡았다. 자연어 처리(NLP), 이미지 분류(classification) 그리고 객체 인식(object detection)은 우리가 사용하는 많은 디바이스 속에 하나의 기술로 내장돼있다. 하지만, 시간이 흐름에 따라 AI 학습 데이터의 양(volume)과 크기(size)는 비례해서 증가하고 있다. 메모리는 더 많이 요구되고 더 낮은 레이턴시를 구현하기 위해서는 폰 노이만 구조의 전형적인 병목(bottleneck)현상을 해소해야만 한다. 이러한 발전양상에 따라 현대 AI는 ⓐ 사생활(Privacy), ⓑ 전력 소비(Power Dissipation), ⓒ 비용(Cost) 위주로 도전과제를 안고 있다.
현대 클라우드 컴퓨팅은 [데이터 업로드 (edge to cloud) → 클라우드 컴퓨팅 → 예측 결과 반환 (cloud to edge) → 기능 수행] 순서로 이뤄지고 있다. 이 과정에서 파생되는 문제점은 다음과 같다.
위 문제들을 해결하기 위한 한 가지 방법으로 추론(interference) 연산의 주체를 클라우드로부터 local로 바꿔야 한다는 의견이 지배적이다. 결과적으로, 학습 부분은 로컬 GPU/FPGA/TPU/NPU 또는 클라우드에서 진행하고, 생성된 모델을 작은 컴퓨팅 디바이스에서도 동작할 수 있게끔 최적화를 수행한 뒤 엣지 디바이스에서 추론을 진행하게 된다.
더 깊은 내용을 진행하기 전, CNN, DNN과 같은 model 속 공통 구조에 대한 소개를 먼저 진행한다.
Neural network model의 내부에는 수많은 MAC(Multiply-Accumulate) 연산이 포함돼있다. MAC 연산은 이름 그대로 곱셈 뒤 누산하는 연산을 의미한다. 각 모델은 여러 레이어로 구성돼있는데, 이때 계산을 위해 외적(dot product)을 사용하게 된다. 외적을 빠르게 병렬처리 하기 위해 지금까지 GPU 또는 FPGA같은 ASIC이 사용됐다. 상대적으로 가볍다고 알려진 'MobileNet-224 1.0' 모델 조차도 weights가 4.2M를 넘고 MAC 연산은 569M이 넘는다. 엣지 디바이스에서 이 많은 연산량을 처리하는 추론 연산을 수행하는 것은 힘들다.
CPU의 ALU가 연산을 처리하기 위해서는 storage로부터 memory로 정보를 올려야 한다. (fetch-decode) 마찬가지로 엣지 디바이스가 input data와 weights를 MAC 하기 위해서는 반드시 DRAM 또는 SRAM에 정보(input data, weights, temporary resutlt ...)를 저장해야만 한다.
위 사진을 보자. CPU가 연산을 하기 위해서는 storage → DRAM(SRAM) → buffer → PE → ALU 과정을 거쳐야 하는 것이 보인다. 폰 노이만 구조는 분명 획기적인 연산 속도 증가 방법이지만, serial processing인 이상 '병목현상'이라는 한계가 존재한다는 것이 단점이다. 쉽게 말하면, 엣지 디바이스가 처리하기에는 weights와 input data를 ALU까지 전송하는 과정에서 너무 많은 시간이 소요되는 것이다.
위 인포그래픽을 보면, ALU에서 처리되는 일반적인 MAC 연산에 1
이라는 비용(전력과 시간)이 소모된다고 가정했을 때, RF(Register File)는 1
, PE(Processing Unit)은 2
, buffer은 6
그리고 DRAM은 200
이 소모된다. 일반적인 MAC 연산 1개가 250FJ을 소모하므로 단순 데이터 이동에만 약 50PJ을 소모하는 것이다!
여기까지 이해했다면, analog in-memory computing의 필요성에 대해 이해한 것이나 다름없다. Storage로부터 DRAM, CPU까지 데이터를 이동하는 과정을 생략한다면, 에너지와 시간 측면에서 수십 수백 배 이득을 볼 수 있다.
In-memory computing의 핵심은 데이터 이동 때 사용되는 에너지 소모를 완전 제거해서 전력 효율을 극대화 하는 것이다. 데이터를 이동하지 않기 위해서는 flash에 weights를 저장하고, input data가 들어왔을 때 저장된 weights를 바로 사용해서 컴퓨팅하면 된다.
Analog In-Memory Computing에 사용되는 flash cell은 NAND flash가 아닌, NOR flash다. 여기서는 'ESF3 (Embedded SuperFlash 3rd gen)' 이라는 Microchip의 Silicon Storage Technology (SST)의 한 제품을 예로 들어 소개한다. ESF3는 NOR flash이므로 당연히 word line(WL), bit line(BL), floating gate(FG), control gate(CG)를 가지고 있고, 인접한 cell과 erase gate(EG), source line(SL)을 공유하고 있다.
Analog In-Memory Computing의 핵심은 두 가지다.
일반적인 flash 구조와 마찬가지로 ESF3 cell의 CG에 문턱전압()을 걸어줘서 program하게 되는데, 이때 인가되는 전압에 따라 response current가 달라지며 전도도(conductance, )가 달라진다. 바로 이 전도도로 flash에 저장된 데이터를 읽을 수 있다. 조금 더 과정을 풀어서 쓰면, ESF3 cell은 4bit를 저장할 수 있어서 weights의 데이터에 따라 인가되는 전압의 크기가 달라지고, response current와 conductance가 달라지므로 데이터를 식별할 수 있게되는 것이다.
위 그림은 추론 과정을 간단한 2x2 구조로 나타낸 그림이다. x1, x2
라는 input data가 들어오면 DAC (Digital to Analog Converter)를 통해 ESF3 cell의 CG로 서로 다른 전압이 들어오게 된다. 각 cell에서 내보내는 전류 이므로 물리적으로 자연스럽게 곱셈 연산을 수행하게 된다. 같은 열 상에 있는 cell은 ADC (Analog to Digital Converter)에서 합쳐지고 단일 결과 y1, y2
를 내보내게 된다.
우리는 이번 기사를 통해 NOR flash를 이용한 analog in-memory computing의 필요성과 장점 그리고 연산 과정에 대해서 알아봤다. 마지막으로 장점을 다시 한 번 정리하면서 요약문을 마친다.