본문 바로가기

Deep learning/On-device

내가 보려고 정리하는 TF Lite [1]

TF Lite


  • TF Lite는 mobile, embeded, IoT devce와 같은 디바이스에서 on-device ML을 할 수 있도록 도와주는 툴이다.
  • 일단 TF Lite에 대해서, 그리고 이를 가속하는 방법인 delegate에 대해 알아보려 한다.

Key feature

  • TF Lite는 on-device learning에 최적화 되어 latency, privacy, connectivity (no internet connection), size (model size), power consumption. 이 5가지를 최적화 해준다.
  • Android, iOS, embeded linux, microcontroller 와 같은 multi-platform 지원한다.
  • Java, Swift, Objective-C, C++, and Python 와 같은 여러 언어 지원한다.
  • Hardware acceleration, model optimization을 통한 high performance.
  • 공식 문서에 여러 예제들이 있음ㅎ

Development workflow

  • TF Lite는 크게 다음의 2가지 과정으로 나뉜다.
  • TF Lite model을 만드는 (혹은 converting 하는) 과정과 이를 이용하여 inference 하는 과정.

1. Generate a TensorFlow Lite model (TF model을 TF Lite model로 convert 하는 과정)

  • TFLite model은매우 효율적이고 유연한 (휴대성이 있는) cross platform serialization library인 FlatBuffer (.tflite)로 이루어져 있다.
    • FlatBuffer는 TF의 protocol buffer보다 크기도 작고, latency도 줄여 빠른 inference를 할 수 있게 해준다.
    • 작은 크기는 Flatbuffer가 protocol buffer에 비해 small code footprint를 가지기 때문
    • 빠른 inference는 별도의 parsing, unpacking 과정 없이 데이터에 직접적으로 접근하기 때문
  • TFLite는 모델 설명을 위한 human-readable metadata와 on-devide inference시 전, 후처리를 위한 machine-readable metadata를 가진다. (link)
  • 다음의 여러가지 방법으로 TF Lite model로 converting 할 수 있다.
    1. 이미 잘 만들어진 TF Lite model을 가져다 쓴다. (link)
    2. TF Lite model maker를 통해 직접 만든다. 이 경우 metadata가 포함된다. (link)
    3. TF model을 TF Lite model로 converting 한다. (link) 이 경우 accuracy (혹은 설정한 별도의 metric)의 손실없이 혹은 최소한의 손실로 model size를 줄이고 latency를 줄이기 위한 optimization, quantization option을 적용 할 수있다.

2. Run Inference

  • Inference를 한다는것은 TF Lite model이 device에서 별도의 입력을 받아 추론을 하는것을 말한다.
  • 두가지 방법으로 inference 할 수 있다.
    1. Model without metadata TF metadata 없이 TF Lite interpreter를 이용하여 inference 한다.
    2. Model with metadata TF Lite task library 를 이용해서 기본 내장 API를 이용하거나, TF Lite Support Library 를 이용해서 custom lnference pipeline을 만든다. Android의 경우 android studio ML model binding 이나 TF Lite code generator 를 이용해서 자동으로 code wrapper를 만들 수 있다. 나머지 언어는 아직이다. 역시 구글이라 그런지 안드로이드 먼저다.
  • Android, iOS와 같은 mobile device는 delegate를 이용하여 hardware acceleration을 할 수 있다.

TF Lite delegate


  • Delegate. 대리자라는 뜻으로 TF Lite delegate는 tensor graph 연산의 일부분 혹은 전체를 다른 executor (GPU, DSP)에 위임하여 대리연산을 시킨다.
  • TF Lite를 이용하지 않고 저 다른 executor (GPU, DSP)를 이용하기 위해서는 low-level SDK에 접근이 필요한데 이는 굉장히 어렵다. 따라서 TF Lite delegate를 사용하여 여러 executor에 접근하고, 연산을 가속화 한다.
  • TF delegate는 TF Lite가 모바일과 같은 적은 리소스를 가진 디바이스에서 빠르게 연산을 할 수 있게 만들어준다.
  • Delegates enable hardware acceleration of TensorFlow Lite models by leveraging on-device accelerators such as the GPU and Digital Signal Processor (DSP).
    • 가령, 우리는 GPU를 사용하게 되면 행렬 연산을 가속화 할 수 있는것을 알 수 있다. GPU delegate를 통하여 GPU에 접근하고, 연산을 가속화 시킨다.
  • By default, TensorFlow Lite utilizes CPU kernels that are optimized for the ARM Neon instruction set.
    • ARM Neon은 한번에 여러 연산을 하기 위한 SIMD (Single Insturction Multiple Data) 을 사용하기 위함이다. ARM Neon delegate라고 볼 수 있겠다.
    • 기본적으로 TF Lite는 ARM Neon 명령어에 최적화된 CPU kernel을 이용한다. (ARM Neon 아니면 ML에 적합하지는 않다...)
  • 대부분의 mobile phone은 arm architecuture의 cpu chip을 이용하고 있고, 때문에 ARM Neon을 사용 할 수 있다.
  • GPUs can provide upto a 5x speedup in latency, while the Qualcomm® Hexagon DSP has shown to reduce power consumption upto 75% in our experiments.
    • mobile폰은 ML을 가속화 하기 위한 것들을 가지고 있는 경우가 많은데 대표적으로 GPU와 DSP moduel 이다.
  • 이러한 GPU, DSP를 이용하기 위해서 low level SDK인 OpenCL과 OpenGL이 사용된다.
  • TensorflowLite Delegate API는 TFLite runtime과 이러한 low level SDK(openCL, openGL) 사이의 bridge 역할을 하여 acceration을 지원하게 된다.
  • 밑의 그림은 ARM Neon 이용을 위한 CPU kernel과 다른 HW를 이용하기 위한 Delegation을 보여준다.

https://www.tensorflow.org/lite/performance/delegates

Choosing a Delegate

  • TF Lite는 기본적으로 여러가지 delegate를 지원한다.
  • 타겟으로 하는 플랫폼 (보통 android 아니면 iOS) 과 모델 타입 (float type or quantization) 에 따라 여러delegate가 적용되게 된다.

Delegates by Platform

Cross-platform (Android & iOS)

  • GPU delegate Android, iOS 두 플랫폼 모두 GPU delegate 지원한다. GPU delegate는 GPU가 지원 가능한 32-bit 혹은 16-bit의 float based model로 최적화를 해준다. 또한 float based model과 동일한 성능을 가지는 8-bit quantize model도 지원한다. 자세한건 link 참조

Android

  • NNAPI delegate for newer Android devices (NPU)
  • Hexagon delegate for older Android devices (퀄컴 헥사곤 DSP)

iOS

  • Core ML delegate for newer iPhones and iPads (if Neural Engine is available) Core ML delegate to accelerate inference for 32-bit or 16-bit floating-point models.

Delegates by model type

  • 각 delegate마다 지원하는 data type이 다르다.

https://www.tensorflow.org/lite/performance/delegates

Reference