일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- CDC
- 남산업힐
- pytest-pythonpath 설치 오류
- Design DNN Accelerator
- linux c 컴파일
- 이진수 곱셈 알고리즘
- CUDA
- DNN Accelerator
- makefile
- Makefile compile
- 딥러닝 가속기
- gpgpu-sim
- gcc 컴파일
- CLOCK GATING
- linux makefile 작성
- DNN 가속기
- Data HAzard
- linux c++ 컴파일
- systolic array
- AMBA
- Pyverilog 튜토리얼
- 대구 반도체 설계기업 특화
- Pyvrilog tutorial
- pyverilog 설치 오류
- 컨벌루션 연산
- pygraphviz 설치 오류
- Pyverilog 설치
- Pyverilog 실행
- 데이터 해저드
- 클럭 게이팅
- Today
- Total
목록NPU (19)
오늘은 맑음
천천히 Efficient Processing of Deep Neural Networks라는 Textbook을 읽어볼까 합니다. 저자는 Vivienne Sze, Yu-Hsin Chen, Tien-Ju Yang로, 기존 Eyeriss라는 논문을 저술했습니다. 기존 Efficient Rrocessing of Deep Neural Network라는 survey 논문이 있지만 이 내용을 확장해서 Textbook을 집필한 것 같습니다. 책을 쭉 보게 되면 Eyeriss 논문에서 봤던 내용들과 그림들과 내용들이 보입니다. Part 1에서부터 Part 2의 4강까지는 기존의 Deep Neural Network의 배경 지식(Conv Layer, FC Layer)과 어떻게 하면 효율적으로 Deep Learning algo..
3년전 딱 지금 시기에 학부 졸업작품으로 NPU를 만들기를 시작하게 되었습니다. 그 땐 딥러닝이 뭔지도 잘 몰랐고, rtl도 2학년 때 수업 이후로 쓴 적이 없어서 쉽지 않다고 생각했습니다. 그 때 DianNao를 Reference삼았었는데, 역시나 쉽지 않더라구요 Tensorflow에서 가중치 뽑는 방법도 몰라서 선배 도움 받아서 c로 feed forward 짜고 back proagation까지 구현 한 다음에 직접 뽑아냈었습니다. 조금 더 알아봤으면 지금처럼 편하게 tensorflow에서 읽었을텐데 말이죠. 처음에는 CNN을 구현하려고 했는데... 논문도 읽고 data flow를 생각하다 보니 결국 fully connected만 이용해서 MNIST 데이터 세트를 구별하는 정도로 작아졌습니다. 그래도 ..
이전 글에서는 Systolic array에서 사용하는 processing element의 구조를 보았습니다. 이번에는 systolic array를 사용해서 Deep Learning Algorithm을 연산하는 대표적인 NPU인 TPU의 구조를 보도록 하겠습니다. TPU의 구조는 위와 같습니다. 많은 block diagram이 있지만 우측을 살펴보도록 하겠습니다. 가장 우측 중간에 MMU(Matrix Multiply Unit)라는 block이 있습니다. MMU의 좌측에는 Systolic Data setup block이, 위에는 Weight FIFO, 아래로는 Accumulator가 있습니다. MMU를 보면 위와 같습니다. 화살표는 데이터의 흐름을 의미합니다. Row 단위로 Data가 전달 되고, Colum..
기존에 올렸던 글에서는 모두 adder tree를 가지는 구조였습니다. 간략하게 그리면 위의 구조였습니다. A(activation)과 W(weight)가 하나씩 입력 되면, 연산기에서 서로 곱해줍니다. 만약 5x5 컨벌루션이라고 하면 뉴런(파란 동그라미)가 25개 있겠죠? 그러면 아래처럼 2인 1조로 더해주는 동작을 반복해 최종 출력이 1개가 되게끔 만들어 줍니다. 아래의 덧셈 과정을 adder tree 구조라고 합니다. 여기에 곱셈과 덧셈 과정이 있는데, quantization의 경우 곱셈기와 덧셈기의 크기를 줄여서 필요한 하드웨어 자원의 크기를 줄이려는 알고리즘이죠. 일로 인해 잠시 멈췄던 NPU 공부를 다시 해볼까 합니다. 기존의 구조가 아닌 Eyeriss나 TPU와 같이 많은 논문에서 사용하는 s..
앞서 5x5 convolution연산까지 수행하는 연산기까지 만들었습니다. 계속 컨트롤패스를 구축하고 있었는데 가장 고민되는 부분이 메모리에서 버퍼로 데이터를 불러와 재사용하는 부분입니다. Eyeriss 논문을 보면 다양한 방법을 제시하고 있습니다. 여기서 제시하는 데이터 플로우를 참조해서 해야할 것 같습니다. 항상 어려운 점이 c나 c++ 또는 python을 이용해서 코딩하다가 verilog로 설계를 들어가게 되면 개념이 달라져 생각하던 알고리즘대로 구현하기가 쉽지 않습니다. 여러 방법을 생각해보고 있지만 항상 아쉽습니다
이번에는 만들어진 Processing Element를 이용해서 convolution 연산을 수행해보도록 하겠습니다. 구성은 간단합니다. SRAM과 PE(Processing Element)가 있고 그림에는 표현이 되어있지 않지만 Address를 생성해주는 제어기(controller)가 있습니다. Controller는 address와 nCE를 생성해주고 이로부터 나온 데이터는 MAC 연산을 수행하는 PE로 들어가서 연산을 수행합니다. 제 모듈은 최대 5 x 5의 activation과 weight를 연산할 수 있습니다. 맨 아래의 negative reset신호가 high가 되고나서 데이터가 전송이 되기 시작해서 가장 윗 라인인 Output 데이터가 출력됩니다. 총 3번의 convolution연산이 끝나면 두 ..