본문 바로가기
공부/ML&DL

[머신러닝 공부] Tiny ML -23 / 모델, 바이너리 크기 최적화

by 로디네로 2022. 5. 9.
반응형

 

 

Chapter23. 모델, 바이너리 크기 최적화

 

"

임베디드 플랫폼에서 ML 모델바이너리 크기를 최적화하려면?

"

 


목차 :

  1. 시스템의 한계
  2. 메모리 사용 측정
  3. 다양한 문제들과 모델
  4. 모델 선택
  5. 실행파일 크기 줄이기

 

이전 포스팅 :

 

[머신러닝 공부] Tiny ML -22 / 에너지 최적화 문제

Chapter22. 에너지 최적화 문제 " TinyML + 임베디드 장치에서의 에너지 소비를 줄이려면? " 목차 : 대략적인 감 잡기 전체 시스템 전력소모 측정 모델 전력 사용량 추정 전력소모 개선 임베디드 장치(M

dbstndi6316.tistory.com

 


 

대부분 임베디드시스템의 읽기 전용 스토리지는 1MB 미만이며 SRAM이 512KB를 넘지 않는다.

 

워크스테이션에서 모델을 학습하거나 추론하며 32GB RAM이나 GPU의 RAM도 8G가 넘는것을 볼 수 있는데, KB단위는 오히려 생소할 수 있다.

 

하지만 마이크로컨트롤러용 TFlite는 최소 20KB의 플래시 및 4KB의 SRAM만 갖추면 작동되도록 설계되었다.

(그만큼 성능을 장담할 수는 없지만 용도에 맞게 써야한다.)

 

 


 

 

1. 시스템의 한계

 

대부분 임베디드 시스템은 Flash memory에 프로그램과 읽기 전용데이터가 모두 저장되는 구조이며, 이런 메모리에는 주로 SRAM이 쓰인다.

 

SRAM은 작은 전력소비로 빠르게 작동가능하지만 크기가 제한적이여서 DRAM과 반대의 성격을 띈다.

 

어떤 메모리칩을 사용할 것인지 생각해야한다.

 

 


 

 

2. 메모리 사용 측정

 

 

- 1. Flash 메모리 사용 측정

 

실행파일을 컴파일 한 후 생성된 이미지 크기를 확인하면 플래시 메모리 필요 공간의 양을 결정할 수 있다.

 

어떤 요소들이 포함돼 있을까?

▶ 운영체제 크기

▶ 마이크로컨트롤러용 TFlite 코드 크기 (공간)

▶ 모델 데이터 크기

▶ 어플리케이션 코드 크기

 

 

- 2. RAM 사용

 

스토리지의 크기를 결정하는것과 다르게 RAM의 크기는 프로그램 수명에 따라 다르기 때문에 어려울 수 있다.

 

 RAM 크기를 추정하려면 소프트웨어의 여러 계층을 살펴봐야 한다.

 

▶ 운영체제 크기

▶ 마이크로컨트롤러용 TFlite RAM 크기

▶ 모델 메모리 크기 (레이어 모양에 따른)

▶ 어플리케이션 메모리 크기

 

 


 

 

3. 다양한 문제들과 모델

 

모델이 각 과제에서 엄격한 리소스 제약조건에 묶여있으면 그에따른 정확도 변화와 에너지 소모를 고려해야한다.

 

예시를 들어보자

 

- 1. 음성 호출어 모델

 

[머신러닝 공부] Tiny ML -8 / 음성인식 어플리케이션-1

Chapter8. 음성인식(호출어 감지) 어플리케이션 만들기 " 이번 챕터에서는 TinyML을 좀더 생활에 밀접한 부분에 사용해본다. " 목차 : TinyML을 이용한 호출어감지는 왜 필요할까? 만들고자 하는 시스템

dbstndi6316.tistory.com

18KB의 작은 모델을 사용하며 이 모델은 무음,알수없음,yes,no 만 85%(top-1) 정확도로 구분 가능했다.

 

실제로는 연속적인 상황에서 sliding window 같은 방식으로 1초의 클립을 제공하며 반복 예측하기 때문에 실사용시 정확도는 더 낮을것이다. (input이 확실하지 않으니..)

 

여기서 충분한 정확도를 내려면 대략적으로 300~400KB의 모델이 필요하다.

 

 

- 2. 가속도계 이용 유지보수 모델

 

가속도계의 독특한 흔들림 패턴으로 베어링 고장을 알아낼 수 있는 모델이다.

 

이는 수천개 정도의 가중치로 충분하며 10KB 미만의 크기로도 가능하며 95%이상의 정확도를 기대할 수 있다.

 

 

- 3. 인체 감지 모델

 

[머신러닝 공부] Tiny ML -13 / 인체감지 어플리케이션-1

Chapter13. 인체감지 어플리케이션 " 카메라로 인체를 감지해보자 (CNN) " 목차 : 개요 만들고자하는 시스템 어플리케이션 아키텍처 코드 기본흐름 -> 다음장 핵심 함수 분석 -> 다음장 마이크로컨트

dbstndi6316.tistory.com

임베디드 플랫폼에서 컴퓨터 비전활용 프로젝트이다.

 

사람 얼굴인지 구분해내는 모델을 사용한다.

 

텐서플로팀은 이 프로젝트에서 96x96 흑백을 input으로 하는 250KB 모델로 90%의 정확도를 얻어냈다.

 

관련 프로젝트 링크 - https://oreil.ly/E8GoU 

 

 


 

 

4. 모델 선택

 

모델 최적화 측면에서는 기존 모델을 바탕으로 시작하면 좋다.

 

가장 유용한 부분은 세밀한 아키텍처보다 데이터 수집과 개선이기 때문이다.

 

그리고 지금은 임베디드 플랫폼에서 머신러닝 소프트웨어가 초기단계이기 때문에, 기존 모델을 사용하면 텐서플로 오퍼레이션이 최적화 될 가능성이 있다.

 

따라서 앞서 진행했던 프로젝트들은 앞으로의 프로젝트 진행에도 유용하게 쓰일 수 있다.

 

 


 

 

5. 실행파일 크기 줄이기

 

모델이 메모리의 대부분을 점유하겠지만, 컴파일된 코드가 차지하는 공간에 대한 생각도 필요하다.

 

따라서 임베디드 플랫폼에서는 수정되지 않은 TFLite 코드는 사용할 수 없다.

 

- 우선 코드 크기 측정이 필요하다.

bin 파일의 크기가 곧 읽기전용 플래쉬메모리 크기가 되므로 실제 사용량 파악에 활용가능하다.

 

- 텐서플로 라이트의 사용 공간

프레임워크에 대한 모든 호출을 주석처리하고 바이너리가 얼마나 작아지는지 확인하면 된다. (약 20~30KB)

 

- OpResolver 확인

너무 많은 Op를 구현하면 상당한 용량을 차지할 수 있다.

 

- 개별 함수 크기 이해

gcc 툴체인을 사용하는 경우 nm 을 이용해 .o 파일의 함수와 객체 크기에 대한 정보를 얻을 수 있다.

nm -S tensorflow/lite/micro/tools/make/gen/ \
sparkfun_edge_cortex_m4/obj/tensorflow/lite/micro/ \
examples/micro_speech/sparkfun_edge/audio_provider.o

 

 

 

 

반응형

댓글