본문 바로가기
DNN with Keras/TensorFlow

TensorFlow Lite (2)

by goatlab 2022. 8. 23.
728x90
반응형
SMALL

What are the quantization possibilities?

 

TFLite가 모델 양자화를 위해 제공하는 두 가지 옵션이 있다.

 

(i) 훈련 후 양자화 (post-training quantization) : 단순히 모델이 훈련된 후 매개변수의 양자화를 수반한다.

(ii) 양자화 인식 훈련 (quantization-aware training) : 훈련 시간 동안 모델을 양자화하는 것을 수반한다. 초기 훈련 전에 네트워크 수정이 필요하고 (가짜 양자화 노드 사용) 나중에 변환이 아닌 훈련을 통해 8비트 가중치를 학습한다. 현재로서는 CNN 아키텍처의 하위 집합에 대해서만 사용할 수 있다.

 

Post-training quantization

 

훈련 후 양자화는 네트워크를 수정할 필요가 없으므로 이전에 훈련된 네트워크를 양자화된 모델 (ex : 32비트 FP에서 16비트 FP 또는 8비트 INT로)로 변환할 수 있다. 이 훈련 후 양자화는 (i) 양자화가 수행되지 않는 경우에 따라 세 부분으로 더 나눌 수 있다. 이는 단순히 TensorFlow 모델을 ".tflite" 파일 형식으로 변환하는 것을 의미한다. (ii) 모델의 가중치만 양자화되는 경우에 하이브리드 양자화라고도 하며 (iii) 가중치와 함께 활성화도 양자화되는 경우이다. 이를 완전 양자화라고 합니다. 양자화된 모델의 정확도를 확인하고 저하가 허용 가능한지 확인하기 위해 아래에 언급된 모든 방법에 대해 매우 중요하다.

 

모바일 또는 edge 장치에서 추론 목적으로 선택한 다양한 하드웨어에 따라 다음과 같이 적용할 수 있는 다양한 종류의 양자화가 있다.

 

  • CPU (ex: ARM 프로세서)에서 모델을 실행하는 경우 8비트 INT 또는 양자화 없음 (32비트 FP)이 작동할 수 있다. 16비트 FP로 변환된 모델은 여전히 ​​CPU에서 실행할 수 있지만, 부동 소수점 16 가중치는 추론 전에 부동 소수점 32로 업샘플링된다.
  • GPU (ex : ARM Mali, Qualcomm Adreno 등)의 경우 GPU가 16비트 또는 32비트 FP로 계산할 수 있으므로 양자화가 전혀 요구되지 않음을 의미하는 축소된 16비트가 좋은 선택이다. TFLite GPU 대리자는 float 16 데이터를 실행하도록 구성해야 한다.
  • edge TPU (ex : Google Coral)에 대한 추론을 위해서는 가중치와 활성화 모두의 정수 (8비트 INT)가 필요하다. 모델 학습에 사용되는 Cloud TPU와 다르다.

 

다음 그림은 훈련 후 양자화를 다룰 때 고려해야 할 가능성 목록을 보여준다.

 

선택할 훈련 후 양자화 전략 결정

 

양자화 없음 (No quantization)

 

여기서 훈련된 모델은 전혀 양자화되지 않고, TensorFlow 모델 (.pb 또는 .h5)은 단순히 TFLite(.tflite) 파일로 변환된다. TFLite로의 변환은 그 후에야 인터프리터가 실행할 수 있도록 장치에 모델을 배포할 수 있기 때문에 중요하다. 예를 들어, 사용자 지정 네트워크의 매우 가벼운 버전을 사용하거나 상대적으로 작은 사전 훈련된 MobileNet을 사용하는 경우 양자화가 필요하지 않을 수 있다. 양자화는 모델의 정확도를 감소시키는 비용과 함께 올 수 있음을 기억해야 한다. 그런 다음 성능 저하가 없는 경우 모델을 TFLite 모델로 변환한 다음 장치 자체에서 실행되는 TFLite 인터프리터에서 가져와서 해석할 수 있다. TFLite 모델의 크기는 원래 TensorFlow 모델보다 약간 작다. 이것은 TFLite 모델을 생성하기 위해 FlatBuffers를 사용하기 때문이다 (프로토콜 버퍼 및 FlatBuffers의 차이점을 확인).

 

양자화 없이 TF.Keras 모델을 TFLite 모델로 변환

 

가중치 / 하이브리드 양자화 (Weights / hybrid quantization)

 

훈련된 모델의 가중치만 16비트 FP 또는 8비트 INT로 양자화된다. 이렇게 하면 모델 크기가 각각 2배 또는 4배 줄어든다. 16비트 FP 양자화된 가중치의 경우 현재 세대 CPU가 기본 16비트 FP 산술을 지원하지 않기 때문에 CPU에서 실행할 때 32비트 FP로 다시 변환 (또는 역양자화)된다. 그러나 16비트 FP는 부동 소수점 16 데이터에서 작동할 수 있으므로 GPU를 사용할 때 좋은 선택이 될 수 있다. 8비트 INT 양자화된 가중치의 경우 정수 데이터로도 작업할 수 있는 일부 연산자 (하이브리드 연산자라고 함)는 활성화 값을 8비트 INT로 동적으로 양자화하고 8비트 가중치 및 활성화로 계산을 수행한다. 이것은 완전 고정 소수점 추론 (ex : 완전 정수 양자화)에 가까운 대기 시간을 제공한다. 그러나 출력은 부동 소수점 정밀도로 역양자화 (또는 다시 변환)된다. 이것은 순수한 부동 소수점 계산보다 속도를 높일 수 있지만 메모리 공간은 동일하게 유지된다. 하이브리드 운영자는 네트워크에서 가장 컴퓨팅 집약적인 부분 (ex : fully_connected, conv2d 등)에 사용할 수 있다.

 

가중치를 8비트 INT로 변환
가중치를 16비트 FP로 변환

 

완전 양자화 (Full quantization)

 

여기서 훈련된 모델을 완전히 양자화한다. 즉, 가중치와 활성화 값의 양자화가 수행된다. 위에서 언급한 것처럼 가중치의 양자화는 매우 간단하지만 활성화 값의 양자화는 그렇게 간단하지 않는다. 활성화 값을 양자화한다는 것은 무엇을 의미할까? 활성화 함수의 출력은 예를 들어 [+127, -128] 부호 있는 INT 값에 매핑된다. 이것은 (부호 있는) 8비트 INT를 사용한 활성화 값의 양자화이다. 이제 부동 소수점 (32비트 FP)에서 정수로 활성화를 변환하거나 매핑하려면 스케일링 매개변수를 결정하기 위한 보정 단계가 필요하다. 이러한 매개변수는 모델을 통해 대표 데이터세트 (ex : 테스트 또는 검증 데이터세트)의 여러 예를 실행하여 계산된다. TFLite는 대표 데이터 세트에서 활성화의 MIN 및 MAX 값을 계산하고 저장한다. MIN 및 MAX 값을 사용하면 TFLite는 모든 부동 소수점 숫자를 [+127, -128]에 매핑한다. 그런 다음 활성화는 추론 시간에 즉석에서 양자화된다.

 

많은 모바일 또는 임베디드 장치 가 부동 소수점 연산을 지원하지 않는다는 점에 유의하는 것이 중요하다. 대부분의 경우 부동 소수점 단위 (FPU) 가 없거나 전력 절약을 위해 비활성화되어 있기 때문이다. 따라서, 전체 정수 양자화 (즉, 가중치와 활성화가 모두 8비트 INT로 변환됨)는 일반적으로 요구 사항이다. 이러한 정수는 더 적은 메모리를 필요로 할 뿐만 아니라 정수를 사용한 산술이 매우 빠르게 실행될 수 있으므로 짧은 대기 시간을 제공한다. 예를 들어, Google의 Coral Edge TPU는 완전히 8비트 양자화된 TFLite 모델만 지원하므로 부동 소수점 연산은 지원되지 않으며 해당 모델은 호환되지 않는다. Edge TPU에서 모든 연산자가 지원되는 것은 아니다. TFLite의 호환 가능한 연산자 목록 — 지원되는 연산자 목록은 여기 에서 찾을 수 있다.

 

반면에 정수 기반 산술이 지원되지 않는 경우 8비트 양자화 모델은 가능하면 32비트 부동 소수점으로 대체된다.

 

대표적인 데이터 생성기
가중치와 활성화 모두를 8비트 INT로 변환

 

What mobile-friendly deep learning models are available?

 

다음은 TFLite에서 완전히 지원되는 (즉, 전체 정수 양자화) 사전 훈련된 일부 모델이다. 

 

  • 이미지 분류 (image classification) : MobileNet, MobileNetv2, ResNet-50 및 Inception-V3 
  • 객체 감지 (object detection) : SSD가 있는 MobileNet V1 또는 V2
  • 의미론적 분할 (semantic segmentation) : DeepLAB V1

 

결론

 

모든 종류의 양자화를 수행하기 전에 항상 다음 사항을 염두에 두는 것이 중요하다.

 

하드웨어 (CPU 또는 GPU 또는 TPU)에서 지원(FP32 또는 FP16 또는 INT8)하고 마지막으로 TensorFlow Lite에서 지원하는 작업 종류

 

https://medium.com/sclable/model-quantization-using-tensorflow-lite-2fe6a171a90d

 

Model Quantization Using Tensorflow Lite

Deployment of deep learning models on mobile devices

medium.com

 

728x90
반응형
LIST