본문 바로가기

AI

TensorFlow Lite - 모바일 & IoT 디바이스를 위한 딥러닝 프레임워크

TensorFlow Lite 

- 텐서플로우 모델을 모바일, 임베디드, IoT 환경에서 돌릴 수 있도록 도와주는 툴.

- latency가 낮고, 작은 바이너리 사이즈로 작동하기 때문에 온 디바이스로 모델 추론이 가능함.


다음과 같은 니즈에 따라 엣지 디바이스에 대한 수요는 계속해서 증가하는 추세:

  - 네트워크 연결이 열악한 상황에서 레이턴시는 낮은 사용자 경험을 요구하고 있음

  - 개인정보를 보호할 수 있어야 함

 

이에 따라 2017년, 구글은 머신러닝을 엣지에서 효율적으로 작동시킬 수 있도록 도와주는 TensorFlow Lite를 공개하였고, 처리 속도, 지원 디바이스, 개발 편의성 등의 측면에서 그 기능을 매년 강화하고 있다.

<자료: TF Dev Summit 2020>

 

한 줄로 요약하자면, TensorFlow Lite는 Android, iOS, 리눅스 등 다양한 모바일 환경과 임베디드 시스템에서 머신러닝 모델을 사용할 수 있게 하는 제품 단계 수준(production ready)의 크로스 플랫폼 프레임워크이다.

 

2020년 현재, 전세계적으로 40억이 넘는 모바일 디바이스에서 TF Lite를 사용하고 있는 것으로 집계되었다. 구글의 대표적인 앱인 Photos, 유튜브, 구글 클라우드도 TFLite를 사용하고 있으며, 우버와 에어비엔비에서 역시 이 프레임워크를 도입하여 이미지, 텍스트, 오디오, 콘텐츠 생성 등 다양한 애플리케이션에 적용하고 있다.

<자료: TF Dev Summit 2020>

더보기

구체적인 적용 사례로, Airbnb에서는 객실 사진을 거실/ 주방/ 화장실 등 카테고리별로 분류하여 사용자가 쉽게 방 사진을 확인할 수 있도록 하고, 업로드된 이미지에 대한 자동 캡셔닝 기능을 제공하여 이해를 돕고 있음.

<자료: https://medium.com/airbnb-engineering/categorizing-listing-photos-at-airbnb-f9483f3ab7e3>

TensorFlow Lite는 다음의 두 가지 주요 컴포넌트로 구성되어 잇다:

1. TF Lite interpreter - 최적화된 모델을 다양한 하드웨어에서 돌아갈 수 있도록 함

   모바일 폰, 임베디드 리눅스 디바이스, 마이크로 컨트롤러 등...

2. TF Lite converter - 텐서플로우 모델을 인터프리터가 사용할 수 있는 효율적인 형태로 바꿔주고, 모델 용량을 줄이고 성능은 유지할 수 있도록 최적화 기능을 제공함

 

최근에는 두 컴퍼넌트에 있어 기능 서포트, 추론 속도 향상, 최적화 툴킷 제공, API 사용 가능한 언어 확장, GPU, DSP에 대한 지원 확장 등 대규모 업데이트를 진행하였고, 지난 3월 11일 TensorFlow Dev Summit에서 주요 내용을 발표하였다.

 

본 포스팅은 발표 중 <TensorFlow Lite: ML for mobile and IoT devices> 를 정리한 것.

영상 바로 가기 >> https://www.youtube.com/watch?v=27Zx-4GOQA8

 


개발자 지원: TF Lite Support Library

개발자들이 (심지어 머신러닝에 대한 전문 지식이 없더라도) TFLite를 이용해 쉽게 개발을 할 수 있는 라이브러리 제공

TF World에서는 TF Lite Support Library를 제공하고 있었는데, 이번 업데이트에서 그 기능을 강화함.

support library의 도움으로 모델을 로드하고, 인풋을 세팅하면 쉽게 분류 결과를 얻어낼 수가 있음

 

개발자 편의 증가

- API 업데이트 : 지원하는 이미지, 언어 API 확장

- Android Studio Integration : 안드로이드 스튜디오에 이미그레이션 할 수 있는 툴 개발 중

   > Canary 안에서 드래그 & 드롭으로 Android Studio에 TF Lite 모델을 심을 수 있음

   > 이 기능은 몇 주 안에 업데이트 예정

- CodeGen : Android Studio에 들어온 TF Lite 모델을 위함 자바 클래스 코드를 클릭으로 생성

   > 이 기능으로 모델 인풋/ 아웃풋을 쉽게 다룰 수 있어 개발자의 시간을 크게 절감해줄 것으로 예상

   > 특히 모델의 메타데이터를 읽어서 Java Wrapper을 자동으로 생성해주고, 모델마다 필요한 API와 코드 스니펫을 제공함

   > 이로 인해 ML 전문가 없이도 TF Lite 모델을 쉽게 개발할 수 있음.

   > 현재는 이미지 모델에 대해서만 해당 기능을 제공중이지만, 추후 다른 모델들로 확장할 예정

- Model Metadata 확장

   > 모델 스펙을 저장해 유저들이 모델의 작동 플로우를 이해하고, 프로덕션 씬을 그릴 수 있도록 도움

   > 모델의 인풋 형태나 아웃풋 결과에 대한 해석 등 다양한 정보가 메타데이터에 저장되어 있음

- Full Example App release : 개발자를 위한 예제와 튜토리얼 제공 확대

   > 모델을 사용하는 방법 뿐만 아니라 개발자가 TFLite를 E2E로 개발하는 데에 있어 필요한 코드 전반 제공

   > 안드로이드, iOS, 라즈베리파이, 엣지 TPU까지, 다양한 플랫폼에 대한 예제 있음

   > 홈페이지에서 예제 확인: https://www.tensorflow.org/lite/examples

- Model optimization toolkit

   > 모델 압축과 최적화를 한 방에 할 수 있음

   > 이로써 post training quantization은 넘나 쉽다

 

Pretrained Model 제공 확대

- More Pretrained Models: 사전학습된 모델 제공

   > 기존의 EfficientNet Lite에서 추가됨

   > NLU에서는 BERT, MobileBERT, ALBERT를 온디바이스 자연어 처리 용으로 제공하고 있음

   > 사전학습된 모델은 다음 링크에서 확인 가능 : https://www.tensorflow.org/lite/models

      . 비전 모델: 이미지 분류, 객체 감지, 이미지 세분화, 자세 추정, style transfer

      . 언어 모델: 답변 생성, 텍스트 분류, QA

 

TFLite Model Maker (얘는 좀 자세히 봐야겠다)

- TFLite Model Maker: Transfer learning을 지원하는 라이브러리

   > 새로운 데이터가 생길 때마다 매번 모델을 업데이트해야 한다는 니즈 존재

   > 따라서 Transfer learning으로 모델을 커스터마이즈하기 쉽도록 해당 기능을 지원함

   > 꽤나 복잡할 수 있는 TL을 코드 4줄로 가능하게 함 

      . 데이터셋을 지정하고, 어떤 모델 스펙을 사용할 지 지정하면  

      . 성능을 체크하면서 모델 전이학습 진행

      . 최종적으로 TF Lite 모델이 저장됨

   > 이 기능은 텍스트, 이미지 분류 모델에 적용되어 있고, 객체 탐지와 QA는 커밍 쑨

 

Graph delegation

GPU, DSP, Android P의 NNAPI, up 등 TF Lite에서 모델을 delegate 하는 방법은 다양함. 이들에 대해 업데이트.

- OpenGL/ OpenCL 등을 통해 cross platform GPU delegation (2-7배 속도 향상)

- 퀄컴 Hexagon DSP를 이용해 DSP delegation을 달성 (3-25배 속도 향상)

- DSP, GPU, NPU에서 Android NNAPI의 ops 추가 (Android P 30+개, Androind Q 90+개) 

 

게다가 이번 업데이트에서는 애플 디바이스에 core ML delegate를 적용할 수 있게 됨

- 최신 아이폰, 아이패드에서는 TF Lite를 이용해 부동소수점 연산을 하는 모델을 가속할 수 있음

- 이 delegate는 iOS 11 이상에서 지원

 

하지만 TF Lite의 장점을 살리기 위해서는 on device로 apple neural engine으로 사용할 것을 권장함

- 뉴럴 엔진은 에플 프로세서에서 기계학습 연산을 가속할 수 있는 특별한 하드웨어임

- 현재는 아이폰 10s (iOS 12+) 등 A12 SoC 이상 기기에서 작동함

- 이 엔진을 사용하면 CPU 대비 4~14배의 가속이 가능함


Performance

TF Lite의 목적은 CPU, GPU, DSP 등 다양한 가속기에서 모델이 가능한 한 빠르게 돌도록 하는 것이기 때문에, 이러한 프런트 개발에 집중 투자하였고, 그 결과 CPU, GPU 등의 속도 향상에 큰 진전이 있었다. 요약하자면...

 

- Arm, x86 CPU 성능 30-300% 향상

- OpenCL 서포트를 추가해 GPU 가속

- Android Q NNAPI ops 와 features 추가

- low/ mid-end 디바이스를 위한 퀄컴 DSP delegate -> 몇 주 안에 커밍 쑨

- 개발자들이 최적의 디플로이 config를 찾을 수 있도록 도와주는 성능 툴을 벤치마크함

 

CPU performance

1년 전 구글 IO에서 발표했던 MobileNet v1에 대한 레이턴시를 보면 CPU 퍼포먼스가 눈에 띄게 개선된 것을 볼 수 있음.

이 결과는 low level부터 high level까지, 광범위한 모델과 디바이스에 대해 기대되는 성능 향상으로, 최신 버전의 TF Lite를 앱에 적용하면, 추가적으로 바꿀 것 없이 이러한 성능 향상을 누릴 수 있다.

<자료: TF Dev Summit 2020>

수치적으로 더 자세히 보자면

- floating point CPU 실행을 baseline으로 삼을 때 (37ms)

- quantization으로 인해 속도 약 3배 향상 (13ms)

   > 특히 post-training quantization tooling으로 인해 퀀타이제이션이 쉬워짐!

- CPU 대신 GPU를 사용하면 더 드라마틱한 속도 향상이 있음 - 7x faster vs CPU (5ms)

- 여기에 더해 NNAPI를 통해 사용할 수 있는 Pixel 4's neural core를 쓰면 속도는 2ms까지 감축

   > 이러한 특별한 가속기를 사용하면 그동안은 모바일에서 불가능했던 use case를 상용화할 수 있을 것으로 기대함

   > 최신 폰에는 EdgeTPU 등 특별한 가속기를 장착한 기기가 늘어나는 추세이기 때문에 이 점을 활용할 수 있음.

 

뿐만 아니라 CPU 최적화가 커밍 쑨!

- TFLite 2.3에서는 더 많은 성능 개선할 거임

- Model optimization 툴로 인해 더 작고 퀀타이즈된 모델을 제공할 것이고

- 특히 최근에는 dynamic rangge quantization strategy를 이용해서 성능을 향상할 수 있기 때문에 이 점 활용

물론 source에서부터 이런 기능들을 개발할 수도 있지만, 2.3 버전에서 이런 기능이 탑재될 거니 기다리라오

<자료: TF Dev Summit 2020>

 


Profiling

이제 TF Lite에서는 Perfetto를 통합함! (Perfetto는 android 10을 위한 새로운 표준 프로파일러)

이를 통해 TF Lite inference 전반뿐만 아니라 CPU, GPU delegation에서 발생하는 op level 이벤트 등을 볼 수 있다.

뿐만 아니라 heap allocation도 프로파일링 할 수 있어 이를 통해 메모리 이슈를 트레킹 가능해진다.

 

 


TF Lite converter 관련: Model Convergence

- 직관적인 메시지: 새로운 컨버터는 ground up으로 빌드하였고, 이제 컨버전이 실패했을 때 더 직관적인 에러 메시지를 띄움.

- control flow operation 서포트

   > 이를 통해 NLP에서 BERT, deep speech v2 / 이미지 세분화에서 Mask R-CNN과 같은 모델을 디플로이할 수 있게 됨

   > 일단은 베타 버전

- 언어 지원 확대

   > 어떠한 앱 개발자도 TF Lite를 쓸 수 있었으면 좋겠다..!

   > 그를 위해 기존에 존재하던 C++, Java, Python 바인딩에 더해 Swift, Obj-C, C#  for unity 바인딩 배포

   > 뿐만 아니라 커뮤니티의 도움으로 Rust, Go, Dart와 같은 언어와도 바인딩할 수 있게 됨

 

 


TF Lite for microcontrollers

핸드폰뿐만 아니라 모든 임베디드 디바이스 & 마이크로 컨트롤러들에서 머신러닝을 사용할 수 있도록 노력해왔고, TF Lite for microcontrollers가 그 노력의 산물! TF Lite for microcontrollers는  TF Lite와 같은 모델 포맷, 컨버터 파이프라인, 커널을 사용한다.

 

마이크로 컨트롤러란?

전자레인지, 화재감지기, 장난감, 센서 등 생활에서 사용되는 기기들에 사용되는 저 전력, all-in-one 컴퓨터

사실 임베디드 ML은 이미 우리 일상생활 많은 기기에서 이루어지고 있다. 예를 들어 'ok google'이라는 키워드는 DSP에서 저전력으로 인식하고, 이러한 hot word detection이 이루어지면 나머지 전체 기기가 깨어나는 식.

 

 

이제 TF Lite를 이용해 마이크로컨트롤러에서 ML을 사용할 수 있게 되었다. 특히 하드웨어에서 최적의 성능을 발휘하기 위해 TF Lite는 많은 인더스트리 리더들과 파트너십을 맺고 개발하고 있음.

특히 embedded market의 리더인 arm은 TF를 arm microcontroller의 AI에서 TF를 공식 솔루션으로 지정하였다. 이에 따라 둘은 협업하여 embedded arm hardware에서 큰 성능 향상을 이룩하였다.

<자료: TF Dev Summit 2020>

 

뿐만 아니라 최근에는 아두이노(Arduino)와도 파트너십을 맺고,  official arduino tensorflow library를 공개하였다. 

이로 인해 아두이노 하드웨어에서 5분 안에 speech detection을 하는 것이 가능해졌다. TensorFlow Lite를 이용해 머신러닝 모델을 만들고, 아두이노 IDE를 이용해서 보드에 모델을 업로드하는 식.

 

향후에도 TF Lite는 온디바이스 훈련과 개인화(personalization) 쪽으로 연구를 계속할 예정이라고 한다.