20171024

병렬처리
EIE: Efficient Inference Engine on Compressed Deep Neural Network. 최종 결과에 영향이 없는 것들은 없애서 연산량을 줄인다. DNN, CNN을 실제로 살펴보면 weight의 양이 많다. DRAM 접근에는 상당히 많은 에너지를 소모하게 된다. 에너지 사용량을 줄이기 위해 DRAM을 없애고, SRAM에 모든 것을 저장하자. 이를 위해서는 model size를 줄이는 것이 필요하고, 따라서 compression을 수행한다. 어떻게 model을 줄이느냐, 어떻게 줄어든 model을 잘 실행하느냐 등의 연구를 진행하고 있음. 더 작은 model로 만들고, 그러면서도 높은 정확도로 머신 러닝을 수행한다.
Network pruning은 불필요한 연결과 뉴런을 제거하는 것. 최종 결과에 큰 영향을 차지하지 않는 시냅스와 뉴런을 삭제한다. 삭제한 뒤에 재학습이 필요하다. 다음으로 weight training은 weight를 몇 개의 값으로 분류하고, weight 대신에 weight matrix의 index로 대체한다. 실제로 생물학적으로도 많은 뉴런과 시냅스가 삭제된다고 한다. 실제로 이러한 압축을 통하면 9-13배 정도의 weight 압축이 가능했다. L2 regularization을 적용하는 것이 L1 regularization보다 좋았다. Pruning과 retrain을 반복하고 L2 regularization을 사용하면 압축률이 높을 때에도 상당히 높은 정확도를 보일 수 있다. Weight를 몇 개로 묶어서 weight를 몇 가지로 indexing해서 사용하는데, 이 과정에서 k-means를 사용해 clustering한다. k-means의 초기화는 linear initialization이 효율적이었다. Huffman coding을 사용해, 자주 쓰는 값을 더 짧은 bit으로 표현함으로써 압축률을 높임. GPU에서는 compression을 통한 성능 향상이 크지 않다. Indirection을 효과적으로 표현하지 못하기 때문이다. 따라서 이를 해결하기 위한 아키텍쳐 측면의 개선이 필요하다. 압축된 데이터 표현을 어떻게 효율적으로 쓸 것인가? Batch size를 1로 측정했기 때문에 GPU에 조금 불리하게 측정된 것은 있음.
Sparse matrix 표현을 어떻게 효율적으로 아키텍쳐 측면에서 활용할 것인가에 대해 EIE에서 해결함. GPU에서는 indirection이 발생하면 memory를 한 번 더 접근해야 함. Column-wise로 연산하는 이유는 입력값이 0인 경우에는 연산을 건너뛰도록 하기 위함이다. Sparse matrix의 특성 상, 각각의 PE는 load balancing이 안 될 수 있다. 이를 해결하기 위해 queue를 사용함.

Advertisements
Posted in 1) Memo

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

누적 방문자 수
  • 101,726 hits
%d bloggers like this: