일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- linux c++ 컴파일
- linux c 컴파일
- 클럭 게이팅
- Makefile compile
- pytest-pythonpath 설치 오류
- gpgpu-sim
- Design DNN Accelerator
- Pyverilog 튜토리얼
- Pyverilog 설치
- linux makefile 작성
- CDC
- 데이터 해저드
- pyverilog 설치 오류
- gcc 컴파일
- systolic array
- 딥러닝 가속기
- CUDA
- 남산업힐
- Pyvrilog tutorial
- CLOCK GATING
- Data HAzard
- makefile
- 컨벌루션 연산
- Pyverilog 실행
- AMBA
- DNN Accelerator
- 대구 반도체 설계기업 특화
- 이진수 곱셈 알고리즘
- pygraphviz 설치 오류
- DNN 가속기
- Today
- Total
오늘은 맑음
Study note : Efficient Processing of Deep Neural Networks(2) 본문
5.2 KEY PROPERTIES OF DNN TO LEVERAGE
5.2에서는 5.1에서 이야기 한 내용에 이어서 어떻게 하면 DNN의 특성을 이용해서 hardware의 performance와 energy efficiency를 높일 수 있을지에 대해서 설명합니다.
5.1에서는 주로 data locality를 이용하거나, data의 bitwidth를 줄여 전체적인 transfer cost를 낮추는 방법을 이야기 했다면, 5.2에서는 연산기 내부에서 어떻게 하면 data transfer cost를 줄일 수 있을지에 대해서 이야기합니다.
DNN의 연산 특성상(예를 들면 convolution layer) 각 convolution 연산 사이에는 data dependancy가 없습니다. 즉, kernel이 stride단위로 sliding하면서 convolution 연산을 수행하는데, 이 때 각 convolution 연산은 서로 다른 연산기에서 수행되어도 상관이 없다는 의미입니다. 이러한 DNN 알고리즘의 특성으로 DNN hardware accelerator는 많은 PE(Processing Element)를 배치해 병렬처리 하게 되어 높은 throughput을 낼 수 있습니다.
https://wh00300.tistory.com/151?category=780793
PE들을 병렬로 처리하게 되면 PE의 개수만큼 많은 데이터들을 보내주어야 하는데 이 때 소모되는 data transfer cost 역시 줄일 수 있을까요?
답은 DNN 알고리즘 안에 있습니다. 알고리즘의 특성으로 인해 많은 MAC 연산기에서 동일한 데이터를 가지고 연산하는 상황이 발생하게 되며 이를 이용해서 많은 PE들을 병렬로 사용하면서 data transfer cost를 줄일 수 있습니다.
- Input Featuremap Reuse
현재 layer의 Input fmap을 Filter 1과 2를 이용해서 다음 layer의 Input fmap을 만들 때 Filter 1과 Filter 2에는 동일한 Input fmap을 사용하게 됩니다. 따라서 Input featuremap reuse에서는 서로 다른 dimension(M)의 Filter와 연산하는 Input featuremap을 재사용할 수 있습니다. - Filter Reuse
입력 데이터가 batch(한 번에 여러장의 입력이 들어오는 경우)로 들어오는 경우, Filter는 각 입력 데이터 1번과 2번에서 동일하게 사용될 수 있습니다. 즉, Filter는 input feature map 1과 2가 들어올 때 재사용 될 수 있습니다. - Convolutional Reuse
Convolution연산에서는 하나의 Input featuremap을 연산할 때 처음부터 끝까지 sliding하면서 연산되는 Filter가 동일하게 사용됩니다.
이 책에서는 3가지 타입으로 데이터 재사용을 정리합니다.
이런식으로 데이터를 재사용 하게 되면 data transfer cost를 더욱 아낄 수 있습니다. 그 방법은 다음과 같습니다.
- 재사용 되는 데이터를 더욱 transfer cost가 낮은 memory에 담아둔다.
- 해당 memory에 있는 데이터를 사용하는 모든 PE에 같은 데이터를 전송한다.
추가적으로 input activation 혹은 filter weight를 재사용 하면서 data movement cost를 줄일 수 있는 방법으로는 spatial sum을 이용하는 방법이 있습니다. 만약 일반적인 adder tree를 사용하게 되면 추가적인 memory를 필요로 합니다. 중간중간 partial sum들을 잠시 담아둘 register가 필요하지요? 하지만 같은 사이클에 나온 출력 값들을 더할 수 있습니다.
하지만 spatial sum을 이용한다면, 즉 output activation이 나올 때 마다 가산 연산을 수행한다면 adder tree에서 필요로 하는 memory를 줄일 수 있습니다.
간단히 그려보면 위와 같은 모양이 되겠네요. 왼쪽과 같이 adder tree를 사용하면 1과 2를 더한 3을 저장할 memory와 3과 4를 더한 7을 저장할 memory가 필요합니다. 또한 3과 7을 더한 10을 저장할 memory까지 추가적으로 필요로 하죠. 하지만 오른쪽과 같이 spatial sum을 이용하게 되면 하나의 memory에서 최종 출력인 10까지 계산을 하고 출력할 수 있게 됩니다. 물론 여러 cycle이 소요되겠지만 많은 PE로부터 나오는 값들을 모두 adder tree로 처리하게 되면 많은 memory가 추가적으로 필요하게 될 것입니다.
추가적으로 중간에 3과 6으로 더한 과정에서는 RBR(redundant binary representation)을 사용하면 기존의 two-input adder보다 더욱 아낄 수 있다고 하는데, 자세한 내용은 wiki 링크를 걸어두겠습니다.
https://en.wikipedia.org/wiki/Redundant_binary_representation
RBR을 사용하면 중간 덧셈 과정에서 carry를 전파하지 않아도 되어서 계산할때 필요한 cost가 줄어든다는 내용인 것 같은데 저도 처음 보는지라 조금 더 찾아봐야 할 것 같습니다.
이런 식으로 data transfer cost를 더욱 줄여보았지만 아직 제한사항이 있습니다. 위의 설명을 보게 되면 input feature map을 재사용 하거나, filter를 재사용 할 수 있습니다. 즉 한 타입의 데이터만을 재사용 할 수 있다는 것입니다. 이렇게 되면 DNN은 각 layer마다 다른 특성을 가질 수 있으므로, hardware가 input feature map/filter 둘 중 하나를 재사용하게끔 고정되어 버리면 큰 효과를 보지 못 할 수도 있습니다.
따라서 다음 5.3부터는 하드웨어가 고정 된 상태에서 서로 다른 DNN layer를 효율적으로 처리하기 위한 방법을 설명합니다.
https://wh00300.tistory.com/246
Reference
https://www.morganclaypool.com/doi/abs/10.2200/S01004ED1V01Y202004CAC050
'NPU' 카테고리의 다른 글
Study note : Efficient Processing of Deep Neural Networks(4) (0) | 2021.11.21 |
---|---|
Study note : Efficient Processing of Deep Neural Networks(3) (0) | 2021.11.20 |
Study note : Efficient Processing of Deep Neural Networks(1) (3) | 2021.11.08 |
나의 학부 졸업작품 감상 평(MNIST dataset을 이용한 dnn accelerator 시뮬레이션) (4) | 2021.04.20 |
Systolic array를 이용한 NPU에 대한 이해(2) (0) | 2021.04.18 |