TensorFlow Lite

Chaeeun Jeong·2022년 1월 13일
0

TensroFlow Lite?

  • Edge device (모바일 또는 임베디드 장치)에 최적화된 온디바이스 '추론용' 텐서플로 솔루션이다.
    결론적으로 말하면, Edge device에 최적화된 Interpreter API를 제공한다.
    Interpreter API는 on-prem 에서 학습 및 .tflite 모델로 변환된 모델을 빠르게 추론할 수 있는 것이다.

TensorFlow Lite가 필요한 이유

Core TensorFlow

  • DNN 모델은 계산 집약적 (compute-intensive process)이다. 높은 정확도가 목표였기 때문에 고성능의 on-prem 또는 cloud PC에서 모델을 학습하고 추론하였고, core TensorFlow는 고성능의 기기에 초점이 맞춰져있다.
    따라서, 기존의 모델 추론 과정을 모바일 기기에서 진행한다면, latency (결과를 도출해내는데 걸리는 시간)이 길어지거나 accuracy (정확도)가 떨어지는 문제가 있다.

Cloud AI / Computation offloading

  • Cloud에서 추론을 진행하는 cloud AI 방식과 Edge device에서 추론을 진행하고 동시에 계산이 큰 부분은 cloud에게 오프로딩시키는 방법으로 사용된다.
    하지만 이러한 방법은 Latency, Connectivity, Power consumption, Privacy 문제가 발생한다.

이러한 문제를 해결하기 위해 Edge device에 맞는 경량화된 연산, 모델, 추론 API가 필요하고, TF Lite가 설계되었다.

TensorFlow Lite의 특징

다양한 언어 및 플랫폼 지원

  • Android, iOS, Linux (Linux 기반의 다양한 플랫폼에 cross-compile을 통해 배포가능하다.)
  • Java, Swift, Objective-C, C++, Python 등

경량화 및 속도 개선

  • Flatbuffers 기반 모델 포맷
  • 경량화된 Interpreter API 및 operator
  • 하드웨어 가속 지원
  • 모델 최적화 지원

Flatbuffers 기반 모델

  • TF Lite 모델은 Flatbuffers로 직렬화된 모델 포맷을 사용함으로써 경량화 및 속도 향상에 대한 이점이 있다.

TensorFlow Model 구조

  • TensorFlow 모델의 구조는 Computation Graph이다.
    Python으로 tensorflow 모델 학습 코드를 짜면, Tensorflow API는 상수, 변수, 연산자들을 그래프 객체로 만든다.

  • Core TensorFlow 모델은 protocol buffer 포맷을 사용한다.
    tf.Graph 객체 (Python)은 그래프 연산 수행 Session API (C++ runtime)으로 전달하기 위해 protocol buffer 파일 (.pb)로 직렬화 된다.
    protocol buffer 파일은 전체 그래프 (변수, 가중치, 모델 구조)를 기술한 바이너리 파일로써, 가중치가 고정된 freezed model이다. 따라서 재학습이 불가능하다.

  • 직렬화 (Serialization): TensorFlow Graph 객체가 컴퓨터 메모리, 디스크, 또는 다른 언어 및 플랫폼에서 읽고 쓸 수 있는 형태 (protocol buffer, flat buffer)로 바꾸는 과정

TensorFlow Lite: Flatbuffers 기반 모델

  • Flatbuffer는 구글에서 게임용으로 만든 것
  • 전체 오브젝트 (전체 그래프)를 파싱하지 않고 일부 데이터만 바로 접근이 가능하다.
    -> 저성능 디바이스에서 CPU 소비 시간, 모델 로드 시간을 절감할 수 있다.
  • Flatbuffer 사용의 이점
    1) 데이터 송/수신 시 parsing/unpacking이 불필요
    2) code footprint 크기가 작음
    3) 메모리 효율성이 높고, 빠른 속도를 보장
    4) 사용하는 데이터타입에 대한 유연성 보장, 크로스 플랫폼 종속성 없이 사용이 가능
    protocol buffer 보다 성능이 좋음.
    이때 그럼 왜 tensorflow도 flatbuffer쓰지 왜 protocol buffer를 써야하냐? 궁금증이 생겨서 검색해 봄. flatbuffer 구글 개발자가 tensorflow가 이미 만들어진 후 에 flatbuffer가 만들어져서 그런 것 같다라고 한다.ㅎㅎ

Converter

.pb -> .tflite

Interpreter

  • 경량 바이너리
    operation을 포함하지 않으면 120kb 이하, mobileNet과 같은 모델에 필수적인 Operation 120개를 포함해도 1Mb가 넘지 않는 경량화된 interpreter이다.
  • 최적화된 operator 제공
    Core TensorFlow에서 제공되는 operator들을 TFLite interpreter에 맞게 변환한 operator들을 제공한다.
    pre-fused operators
  • Few dependencies
  • Static memory / Static execution plan을 통해 로드, 초기화, 실행 시간을 최소화

호환성 Issue

  • operator compatibility
    TF Lite용 operator를 따로 제공해준다. 기존 core TF에서 사용하던 operator들이 지원되지 않는 경우가 있다. RNN, LSTM 같은 경우도 처음엔 지원하지 않다가 TF Lite가 계속 업데이트 되면서 지원되었다.
  • delegate compatibility
    TF Lite용 operator와 GPU/TPU 가속기가 호환되지 않는 경우가 있다.

TF Lite는 Authorizing tool API (experimental) 를 제공하여 호환성 이슈가 발생했는지 체크해준다.

profile
갈팡질팡

0개의 댓글