Skip to main content
QUICK REVIEW

[논문 리뷰] Espresso: Efficient Forward Propagation for BCNNs

Fabrizio Pedersoli, George Tzanetakis|arXiv (Cornell University)|2017. 05. 19.
Advanced Neural Network Applications참고 문헌 21인용 수 10
한 줄 요약

Espresso는 이진 컨볼루션 신경망(BCNNs)의 순방향 전파를 비트 패킹과 최적화된 CUDA 커널을 사용해 가속화하는 경량이며 종속성 없는 C/CUDA 라이브러리이다. 이는 이진 최적화된 컨볼루션 및 밀집층을 지원함으로써 CPU 대비 최대 85배, 표준 GPU 대비 최대 16배의 성능 향상을 이루며, 메모리 사용량을 최대 31배까지 감소시키고, 최소한의 오버헤드로 CPU 및 GPU 배포를 모두 지원한다.

ABSTRACT

There are many applications scenarios for which the computational performance and memory footprint of the prediction phase of Deep Neural Networks (DNNs) needs to be optimized. Binary Neural Networks (BDNNs) have been shown to be an effective way of achieving this objective. In this paper, we show how Convolutional Neural Networks (CNNs) can be implemented using binary representations. Espresso is a compact, yet powerful library written in C/CUDA that features all the functionalities required for the forward propagation of CNNs, in a binary file less than 400KB, without any external dependencies. Although it is mainly designed to take advantage of massive GPU parallelism, Espresso also provides an equivalent CPU implementation for CNNs. Espresso provides special convolutional and dense layers for BCNNs, leveraging bit-packing and bit-wise computations for efficient execution. These techniques provide a speed-up of matrix-multiplication routines, and at the same time, reduce memory usage when storing parameters and activations. We experimentally show that Espresso is significantly faster than existing implementations of optimized binary neural networks ($\approx$ 2 orders of magnitude). Espresso is released under the Apache 2.0 license and is available at http://github.com/fpeder/espresso.

연구 동기 및 목표

  • 모바일 및 임베디드 디바이스에 DNN을 구현할 때 발생하는 높은 메모리 및 계산 비용을 해결하기 위해.
  • 최소한의 메모리 프로파일과 최대의 속도를 확보하면서도 이진 컨볼루션 신경망(BCNNs)에서 효율적인 추론을 가능하게 하기 위해.
  • CPU 및 GPU 배포를 모두 지원하는 자체 포함형이며 종속성 없는 프레임워크를 제공하기 위해.
  • 이전의 BDNN 프레임워크가 완전히 연결된 층만 최적화했을 뿐 컨볼루션 층에는 적용하지 못한 한계를 극복하기 위해.
  • 입력이 비이진인 첫 번째 네트워크 층에 대한 이진 최적화를 가능하게 하여 전체 추론 성능을 향상시키기 위해.

제안 방법

  • 네트워크 로딩 시 한 번만 비트 패킹을 수행하는 전용 이진 최적화 컨볼루션 및 밀집층을 설계하여 반복 계산을 줄이기 위해.
  • 비트 연산과 최적화된 메모리 액세스 패턴을 사용한 커스텀 CUDA 커널을 구현하여 계산을 가속화하기 위해.
  • 비트 패킹 기법을 사용해 이진 가중치와 활성화를 효율적으로 저장함으로써 메모리 사용량을 최대 31배까지 감소시키기 위해.
  • 입력 특징을 8비트 평면으로 분할하고 가중치 합을 통해 결과를 재결합함으로써 첫 번째 층에 대한 새로운 최적화 기법을 적용하여 이진 계산을 가능하게 하기 위해.
  • 배치 크기가 1일 경우 표준 행렬-벡터 곱셈을 최적화된 행렬-행렬 커널(sgemv 등)으로 대체하여 성능 향상시키기 위해.
  • 메모리 효율적인 메모리 할당과 메모리 코ales싱을 통합하여 GPU 지연 시간을 최소화하고 처리량을 극대화하기 위해.

실험 결과

연구 질문

  • RQ1경량이며 종속성 없는 프레임워크가 CPU 및 GPU에서 BCNN의 최신 추론 속도를 달성할 수 있는가?
  • RQ2비트 패킹과 비트 연산은 BCNN에서 메모리 사용량 감소와 행렬 곱셈 가속화에 얼마나 효과적인가?
  • RQ3비이진 입력을 처리하는 컨볼루션 네트워크의 첫 번째 층에 대해 이진 최적화를 효과적으로 적용할 수 있는가?
  • RQ4이전 구현 대비 컨볼루션 및 완전히 연결된 층을 모두 최적화함으로써 BCNN에서 얻을 수 있는 성능 향상은 어느 정도인가?
  • RQ5최적화된 커널, 메모리 액세스 및 비트 패킹의 조합이 BCNN의 추론 속도와 메모리 프로파일에 어떤 영향을 미치는가?

주요 결과

  • GPU 최적화 구현을 사용할 경우 CIFAR-10에서 1.0ms의 추론 시간을 기록하여 CPU 대비 85배, 표준 GPU 대비 16배의 성능 향상을 달성했다.
  • GPU 최적화 구현은 컨볼루션 층의 메모리 사용량을 53.54MB에서 1.73MB로 감소시켜 최대 31배의 메모리 감소를 이뤘다.
  • 첫 번째 층의 이진 최적화는 입력 비트 평면에서의 이진 계산을 가능하게 하여 성능을 3배 향상시켰다.
  • 최적화된 CUDA 커널은 표준 GPU 구현 대비 비트 패킹 오버헤드를 5배 줄였으며, 메모리 코ales싱 측면에서 뚜렷한 성능 향상을 보였다.
  • Espresso의 최적화된 행렬 곱셈 커널은 적절한 경우 행렬-행렬 연산으로 전환함으로써 최대 15%의 추가 성능 향상을 달성했다.
  • 프레임워크는 자체 포함되어 있으며 크기가 400KB 미만이며, Apache 2.0 라이선스 하에 배포되어 있어 임베디드 및 모바일 플랫폼에 쉽게 배포할 수 있다.

더 나은 연구,지금 바로 시작하세요

논문 읽기부터 검토까지, 연구 시간을 획기적으로 줄여보세요.

카드 등록 없음 · 무료 플랜 제공

이 리뷰는 AI가 만들고, 인간 에디터가 검토했습니다.