일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- DNN Accelerator
- Pyverilog 튜토리얼
- 클럭 게이팅
- 대구 반도체 설계기업 특화
- pytest-pythonpath 설치 오류
- linux makefile 작성
- 남산업힐
- CDC
- pygraphviz 설치 오류
- linux c++ 컴파일
- CUDA
- 데이터 해저드
- Pyverilog 실행
- 컨벌루션 연산
- Makefile compile
- AMBA
- DNN 가속기
- gcc 컴파일
- Pyverilog 설치
- pyverilog 설치 오류
- Data HAzard
- makefile
- 딥러닝 가속기
- gpgpu-sim
- linux c 컴파일
- Design DNN Accelerator
- systolic array
- 이진수 곱셈 알고리즘
- CLOCK GATING
- Pyvrilog tutorial
- Today
- Total
오늘은 맑음
Study note : Efficient Processing of Deep Neural Networks(3) 본문
5.3 DNN HARDWARE DESIGN CONSIDERATIONS
5.3절에서는 DNN hardware design을 할 때의 고려사항에 대해서 설명합니다.
DNN hardware를 design할 때 중요한 점으로는 "최적의 성능(performance, energy efficiency)을 위한 flexible architecture 찾기" 입니다.
여기서 최적의 성능을 위한 flexible architecture를 찾기 위해서는 최적의 "mapping"을 찾아야 합니다. 여기서 "mapping"이란 다음의 의미를 함축한 것으로 생각하시면 됩니다.
- MAC operation을 temporally, spatially하게 동작 시키고
- MAC operation을 어떻게 하면 하나의 PE에서 동일한 데이터를 재사용해서 연산하고, 그 PE들을 어떻게 병렬적으로 잘 동작시킬까? 라고 생각하시면 될 것 같습니다.
- 서로 다른 메모리 계층 구조에서 어떻게 데이터를 자르고(tile) 어떻게 이동시킬 것인가
- DNN layer를 계산 할 때에는 많은 input featuremap과 weight를 이용합니다. 이 데이터들을 한 번에 연산할 수 없으므로 조금씩 데이터를 tiling해서 더 PE와 가까운 메모리로 이동시킵니다. 이 때 한 번에 가져오는 데이터는 한정되어 있으므로 가장 많이 재사용 할 수 있는 방법으로 가지고 오는 것이 data transfer cost를 줄이는데 도움이 됩니다.
위의 두 가지를 고려해 보더라도 DNN layer를 계산하는 방법은 너무 많지만 DNN hardware에서는 모든 방법을 지원할 수 없죠. 따라서 최적의 mapping을 찾는 것이 중요합니다. 가장 최적의 mapping을 찾는데 앞으로 주목할 것은 "dataflow"입니다. Dataflow는 mapping을 최적화 하는데 가장 중요한 역할을 한다고 하는데 앞으로 어떻게 설명할지 계속 진행해봐야 될 것 같습니다.
그리고 중요하게 서술하는 내용은 "flexibility"입니다. 앞서부터 계속 flexibility가 나오는데 이는 범용 프로세서에서 매우 중요하기 때문입니다. 현재 DNN 알고리즘은 연구가 계속 진행되고 있으므로 DNN hardware가 어떠한 특정한 DNN model에 국한된다면 다음에 새로운 DNN model이 나왔을 때는 다시 hardware를 만들어야 합니다.
실제로 hardware를 다시 만드는 것은 개발 비용(시간과 인력등)이 많이 들기 때문에 한 번 hardware를 만들 때 다양한 DNN model들을 수행할 수 있도록 고려해서 만드는 것이 중요합니다.
마지막으로 DNN hardware를 설계하고 사용하는 단계를 정리해보면 아래와 같습니다.
- At design time
- dataflow를 고려하라
- PE의 개수와 각 PE에 들어가는 곱셈기와 덧셈기의 개수를 고려하라
- 메모리의 계층 구조와 그 level을 고려하고 각 level의 메모리 용량을 고려하라
- 메모리 계층과 메모리와 PE간의 데이터 전달 패턴에 대해 고려하라
실제로 일반적인 design할 때 모두 고려해야 하는 항목들입니다. 어떻게 데이터를 전달할지, 연산기는 얼만큼 사용할 것인지, 메모리는 어떻게 얼마나 사용할 것인지에 대한 내용입니다. 다만 DNN algorithm을 반영해서 최적의 design을 고려해야 합니다.
- At mapping time
- Design이 된 후 어떠한 DNN model이 주어졌을 때 최적의 mapping기법 찾기
- At configuration time
- 최적의 mapping 기법을 찾은 후 accelerator에 반영하기
- At runtime
- 동작 단계, 구성된 가속기에 의해 DNN 데이터가 입력되면 연산이 진행된다. 여기서 구성된 accelerator의 성능에 따라 configuration과 runtime을 반복해야 할 수도 있다고 합니다.
Reference
https://www.morganclaypool.com/doi/abs/10.2200/S01004ED1V01Y202004CAC050
이번 포스팅까지는 5장에 대한 전체적인 overview와 컨셉들이 많아서 글의 양을 적당히 줄이려고 했으나 사견까지 들어가니 그대로 번역한 수준의 글이 된 것 같아 조금 더 간추려 보려고 합니다. 부족한 글 읽어주셔서 감사합니다.
'NPU' 카테고리의 다른 글
Study note : Efficient Processing of Deep Neural Networks(5) (0) | 2021.12.15 |
---|---|
Study note : Efficient Processing of Deep Neural Networks(4) (0) | 2021.11.21 |
Study note : Efficient Processing of Deep Neural Networks(2) (0) | 2021.11.13 |
Study note : Efficient Processing of Deep Neural Networks(1) (3) | 2021.11.08 |
나의 학부 졸업작품 감상 평(MNIST dataset을 이용한 dnn accelerator 시뮬레이션) (4) | 2021.04.20 |