MCUNetV2: Memory-Efficient Patch-based Inference for Tiny Deep Learning

강민석·약 8시간 전

논문

목록 보기
26/26

MCU란?

유튜브 참고 자료 : https://youtu.be/dcNk0urQsQM?si=6-rqgMvH7yPFEKrC
IBM 블로그 자료 : https://www.ibm.com/kr-ko/think/topics/microcontroller

MCU(Micro Controller Unit)

하나의 칩 안에 CPU + 메모리 + 주변 장치가 모두 들어있는 소형 컴퓨터

이미지 출처 : https://datacapturecontrol.com/articles/io-devices/microcontrollers/overview

  • 작은 컴퓨터를 하나의 칩으로 만든 것으로 생각하면 직관적

MCU 구성 요소

  1. CPU (중앙처리장치)

    • 컴퓨터의 두뇌라고도 불리며, 명령을 실행하고 작업을 제어하는 핵심 구성 요소
  2. 메모리

    • 프로그램 메모리와 달리 시스템 전원이 끊기면 손실될 수 있는 임시 데이터를 저장하는 휘발성 메모리(RAM)
      (RAM : 프로그램이 실행될 때 쓰는 작업공간)
      • SRAM : 작지만 빨라야 하는 Cache
      • DRAM : 크게 많이 필요한 메인 메모리
    • 전원이 꺼져도 유지되는 프로그램 코드를 저장하는 비휘발성 Flash 메모리가 포함되어 있음
  3. 주변 장치

    • 사용 목적에 따라 타이머/카운터(시간 측정, PWM 생성), ADC(아날로그 -> 디지털 변환 센서), I/O 인터페이스, 통신 프로토콜(UART) 등 포함될 수 있음

Micro Controller vs Micro Processor

  • MCU : CPU + 메모리 + 주변 장치가 한 칩에 다 들어있는 완성형 제어용 컴퓨터

    칩 하나만 있으면 동작 가능 (All-in-one)

    사진 출처 : https://www.youtube.com/watch?v=dcNk0urQsQM

  • MPU : 연산만 담당하는 CPU 칩 (메모리, 주변 장치는 외부에 따로 필요)

    시스템 동작에 필요한 장치들은 전부 외부에 있어 보드 전체가 필요(CPU-only)

    사진 출처 : https://www.youtube.com/watch?v=dcNk0urQsQM

적용 분야 차이

  • MCU : "특정하게 정해진 일"을 안정적으로 반복하는 임베디드 시스템의 핵심

    디지털 카메라, 세탁기, 리모컨 등 수행될 작업이 미리 정의되어 있는 장치에서 사용

    사진 출처 : https://www.youtube.com/watch?v=dcNk0urQsQM

    MCU는 입력값을 바탕으로 몇 가지 처리를 수행하고 그 결과를 출력함

    여기서 입력은 사용자 입력일 수도 있고, 센서에서 오는 입력일 수도 있음

    • 예를 들어, 전자레인지의 경우 출력과 시간을 설정하면 음식이 조리된 상태로 나옴
  • MPU : PC나 노트북과 같이 "범용적인 컴퓨팅" 중심으로 사용

    게임, 웹, 사진 편집, 문서 작업 등 MPU는 기본적으로 작업이 미리 정의되지 않은 복잡한 응용 분야에서 사용

MCU의 병목 현상

MCU에서의 memory bottleneck은 CPU는 일할 준비가 됐는데, 메모리(Flash/SRAM)에서 데이터, 코드를 가져오거나 저장하는 속도/대역폭이 부족해서 CPU가 기다리는 현상을 말함

주요 원인

1. Flash 메모리에서 실행할 때 느림

  • Clock이란 MCU 내부 회로가 한 번 동작하는 박자로, CPU는 클럭에 맞춰 명령어를 한 단계씩 실행하고, 주변 장치도 클럭 기준으로 동작
  • MCU에서 코드는 보통 Flash 메모리에 있고, CPU는 Flash에서 명령어를 가져오며 실행하는데, Flash 메모리는 SRAM보다 느리다.

CPU가 100MHz로 동작한다고 치면, 1사이클이 10ns인데, Flash가 명령어를 내주는데 30ns만큼 걸린다면, CPU는 10ns마다 명령어를 읽고 쓰려는데, Flash에서 30ns가 걸려서 CPU에서 Flash에 접근하기 위해 wait state가 발생하며 CPU가 기다리게 됨

2. SRAM 용량/대역폭 부족

  • Buffer란 데이터를 잠깐 저장해두는 임시 공간인데, CPU에서 데이터를 처리하는 속도와 데이터가 들어오는 속도가 완벽하게 같지 않기 때문에, 중간에 잠깐 쌓아둘 통이 필요한데, 이 통이 Buffer이다.

MCU의 SRAM은 일반적인 PC에서 사용되는 SRAM보다 용량이 더 작은데, CPU가 다른 작업을 하는 동안 데이터가 계속 들어오면 buffer가 금방 차버려, 데이터가 유실될 수 있음

작은 buffer로 인해, 데이터를 쪼개서 자주 처리해야 해서, 오버헤드가 늘어남

3. CPU가 I/O 복사를 하느라 바쁨

  • 주변(입출력 장치 I/O) 장치로부터 CPU가 처리해야 할 데이터들이 계속 들어오게 되는데, 그 데이터를 RAM에 쌓아야 한다.(MCU에서 말하는 RAM은 주로 SRAM)

들어오는 데이터를 RAM에 운반하는 일을 CPU하게 하게 되면, CPU가 할당하는 시간의 대부분이 운반에 사용되어서 CPU가 해야할 계산 작업을 못함

그래서 등장한 게 DMA이다. 현대 MCU에는 DMA를 지원(너무 작은 MCU는 없을 수도)

  • DMA는 주변장치와 RAM 사이에서 데이터를 운반하는 일을 CPU대신 해주는 하드웨어

4. 버스/주변 장치가 메모리를 공유해서 충돌

  • MCU 내부에는 데이터가 다니는 길인 버스가 있는데, CPU가 RAM을 읽고 쓰는 것도 이 버스를 쓰고, DMA가 데이터를 RAM으로 옮기는 것이 이 버스를 사용한다.

CPU가 RAM에서 배열을 읽고 쓰는 중에 DMA가 데이터를 RAM에 쓰려고 하면 둘이 같은 버스를 놓고 경쟁하며 한 쪽은 기다려야 하는 상황 발생

Abstract

MCU에서 초소형 딥러닝을 구현하는 것은 제한된 메모리 크기로 인해 어려운 과제이다.
메모리 병목 현상은 CNN 설계의 불균형한 메모리 분포로 인해 발생하는데,
CNN은 초반 layer에서 feature map의 HxW가 아직 크기 때문에 초반 몇 블록은 activation이 매우 커 메모리 사용량이 폭증한다.

  • CNN에서는 Conv 출력 feature map 자체를 activation이라고 부름

    CNN의 activation 메모리 : MemoryH×W×CMemory ∝ H \times W \times C

  • 초반 몇 개의 block의 peak memory가 나머지 블록보다 크다

    초반 메모리가 더 큰 이유

    • CNN의 activation(H×W×CH \times W \times C) 텐서에서 layer가 깊어질수록 HHWW의 크기가 감소하는 정도가 CC가 늘어나는 정도보다 크기 때문에 activation memory가 점점 줄어듦
    • 예를 들어 H,WH,W를 2배 줄이면 H×WH \times W는 4배 감소하지만, C를 2배 늘리면 최종적으로 H×W×CH \times W \times C는 2배 감소하게 된다.

이 문제를 해결하기 위해 이 논문에서는 feature map의 작은 공간 영역에서만 작동하고 peak memory를 크게 줄이는 일반적인 패치별 추론 스케줄링을 제안한다.

하지만, 이 방법을 사용하면 패치와 계산 오버헤드가 겹치게 되어, receptive field와 FLOP을 후반 단계로 이동하고 계산 오버헤드를 줄이기 위해 receptive field 재분배를 추가로 제안한다.

Introduction

profile
많이 배우고 싶습니다

0개의 댓글