오늘은 맑음

Systolic array를 이용한 NPU에 대한 이해(1) 본문

NPU

Systolic array를 이용한 NPU에 대한 이해(1)

자전거 타는 구구 2021. 4. 6. 00:22
반응형

기존에 올렸던 글에서는 모두 adder tree를 가지는 구조였습니다.

간략하게 그리면 위의 구조였습니다. 

A(activation)과 W(weight)가 하나씩 입력 되면, 연산기에서 서로 곱해줍니다.

만약 5x5 컨벌루션이라고 하면 뉴런(파란 동그라미)가 25개 있겠죠?

그러면 아래처럼 2인 1조로 더해주는 동작을 반복해 최종 출력이 1개가 되게끔 만들어 줍니다.

아래의 덧셈 과정을 adder tree 구조라고 합니다.

여기에 곱셈과 덧셈 과정이 있는데, quantization의 경우 곱셈기와 덧셈기의 크기를 줄여서

필요한 하드웨어 자원의 크기를 줄이려는 알고리즘이죠.

 

일로 인해 잠시 멈췄던 NPU 공부를 다시 해볼까 합니다.

기존의 구조가 아닌 Eyeriss나 TPU와 같이 많은 논문에서 사용하는 systolic array 구조로 한 번 다시 만들어 볼까 합니다.

 

 

systolic array에서의 processing element

일반적으로 systolic array에서의 processing element 또는 연산기는 위와 같이 생겼습니다.

activation과 weight가 입력 되고 multiplier에 의해 곱해집니다.

이 값은 이 전 element의 partial sum과 함께 더해져 다음 processing element에게 전달됩니다.

이러한 processing element가 여러개 존재해 array 구조를 갖는 것을 systolic array라고 합니다.

자연스럽게 partial sum들이 다음 processing element로 전달되어 adder tree와 같이 누적 연산을 수행하고, activation은 다음 processing element로 전달되어 입력 데이터를 재사용 할 수 있게 해줍니다.

 

다음에는 위의 Processing element를 이용한 systolic array에 대해 알아보도록 하겠습니다.

반응형
Comments