Skip to main content
QUICK REVIEW

[논문 리뷰] Efficient Neural Network Deployment for Microcontroller

Hasan Unlu|arXiv (Cornell University)|2020. 07. 02.
Advanced Neural Network Applications참고 문헌 3인용 수 9
한 줄 요약

이 논문은 마이크로컨트롤러에 신경망을 효율적으로 구현하기 위해 두 가지 새로운 최적화 기법—통합된 인-place max-pooling과 핑퐁 버퍼링—을 제안한다. 스트라이드 ≥ 커널 크기인 max-pooling에서 중간 버퍼를 제거하고, 레이어 간에 메모리를 재사용함으로써, CMSIS-NN 대비 RAM 사용량을 74% 감소시켰으며, 이로 인해 100KB 미만의 SRAM 장치에서도 최소한의 성능 손실로 추론이 가능해졌다.

ABSTRACT

Edge computing for neural networks is getting important especially for low power applications and offline devices. TensorFlow Lite and PyTorch Mobile were released for this purpose. But they mainly support mobile devices instead of microcontroller level yet. Microcontroller support is an emerging area now. There are many approaches to reduce network size and compute load like pruning, binarization and layer manipulation i.e. operator reordering. This paper is going to explore and generalize convolution neural network deployment for microcontrollers with two novel optimization proposals offering memory saving and compute efficiency in 2D convolutions as well as fully connected layers. The first one is in-place max-pooling, if the stride is greater than or equal to pooling kernel size. The second optimization is to use ping-pong buffers between layers to reduce memory consumption significantly. The memory savings and performance will be compared with CMSIS-NN framework developed for ARM Cortex-M CPUs. The final purpose is to develop a tool consuming PyTorch model with trained network weights, and it turns into an optimized inference engine(forward pass) in C/C++ for low memory(kilobyte level) and limited computing capable microcontrollers.

연구 동기 및 목표

  • 제한된 SRAM(킬로바이트 수준)과 제약된 계산 자원을 가진 마이크로컨트롤러에서 신경망의 효율적 추론을 가능하게 하기 위해.
  • 싱글코어 마이크로컨트롤러에서 순차적 신경망 실행 시 메모리 프로파일을 줄이고 메모리 재사용을 향상시키기 위해.
  • 학습된 PyTorch 모델을 최적화된 C/C++ 추론 코드로 변환하는 도구 체인을 개발하기 위해.
  • CMSIS-NN과 유사한 ROM 사용량을 유지하면서 RAM 효율성에서 뛰어난 성능을 내기 위해.

제안 방법

  • 스트라이드 ≥ 풀링 커널 크기일 경우, max-pooling을 컨볼루션 레이어 출력에 통합하여 결과를 직접 입력 버퍼에 쓰는 방식으로, 중간 저장소를 제거한다.
  • 레이어 간에 핑퐁 버퍼 전략을 적용하여, 가장 큰 중간 활성화 버퍼를 여러 레이어에 걸쳐 재사용함으로써 최대 메모리 사용량을 최소화한다.
  • 모델 가중치를 .bss 또는 .data가 아닌 .text 섹션으로 이동시켜, 런타임 할당을 방지함으로써 SRAM 소비를 줄인다.
  • 고유한 메모리 레이아웃과 버퍼 스케줄링을 사용하여, 최대 메모리 사용량을 개별 레이어 출력 중 가장 큰 값이 아니라 첫 두 레이어 출력의 최댓값으로 제한한다.
  • ReLU 활성화를 컨볼루션 커널에 통합하여 메모리 접근을 최적화하고, 추가 메모리나 계산을 피한다.
  • 최적화된 모델을 RISC-V 및 ARM Cortex-M 플랫폼용 C/C++ 코드로 컴파일하여 임베디드 배포를 목표로 한다.

실험 결과

연구 질문

  • RQ1스트라이드 ≥ 풀링 커널 크기 조건에서 인-place max-pooling이 마이크로컨트롤러에서 컨볼루션 신경망의 메모리 사용량을 줄일 수 있는가?
  • RQ2핑퐁 버퍼링 전략이 마이크로컨트롤러에서 순차적 신경망 추론 시 최대 메모리 소비를 얼마나 줄일 수 있는가?
  • RQ3LeNet-5와 같은 표준 CNN에 대해 제안된 프레임워크는 CMSIS-NN 대비 RAM 및 ROM 사용량에서 어떤가?
  • RQ4마이크로컨트롤러에서 추론 성능에 영향을 주지 않고 모델 가중치를 읽기 전용 메모리(ROM)에 안전하게 저장할 수 있는가?
  • RQ5100KB 미만의 SRAM을 가진 마이크로컨트롤러에서 32비트 부동소수점 LeNet-5 모델의 최대 메모리 절감 비율은 얼마인가?

주요 결과

  • 제안된 프레임워크는 최대 RAM 사용량을 11.2 KB로 줄여 CMSIS-NN의 44 KB 대비 74% 감소시켰으며, ROM 사용량은 동일한 36 KB를 유지했다.
  • 통합된 인-place max-pooling 최적화는 스트라이드 ≥ 풀링 커널 크기 조건에서 중간 버퍼가 필요 없이, 결과를 직접 컨볼루션 출력 버퍼에 쓰는 방식으로 작동한다.
  • 핑퐁 버퍼 전략은 최대 메모리 사용량을 첫 두 레이어 출력의 최댓값으로 제한하여, 전체 크기의 스케치 버퍼를 할당하는 것보다 메모리 프로파일을 크게 줄였다.
  • LeNet-5의 총 메모리 요구량은 기존 283 KB(246 KB 가중치 + 37 KB 활성화)에서 SRAM 11.2 KB, ROM 36 KB로 감소했다.
  • 프레임워크는 카메라 입력을 받는 SiFive FE310-G000 RISC-V 마이크로컨트롤러에서 실시간 추론을 성공적으로 구현하였으며, UART 출력을 통해 정확한 분류 결과를 도출했다.
  • 이 방법은 RISC-V 및 ARM Cortex-M 플랫폼 모두와 호환되며, 최소한의 성능 영향과 정확도 손실 없이 작동한다.

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

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

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

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