Keras 모델 양자화 (LiteRT)
요약
본 글은 Keras 모델을 LiteRT를 사용하여 양자화하는 과정을 다루며, 이를 통해 파일 크기와 추론 속도를 크게 개선할 수 있음을 보여줍니다. 특히 LiteRT로 변환 시 파일 크기가 약 1/3 수준으로 줄고, CPU 및 GPU 환경 모두에서 Keras 대비 수백 배 빠른 처리 속도를 얻을 수 있습니다.
핵심 포인트
- LiteRT를 사용한 양자화는 모델의 파일 크기를 크게 줄여줍니다.
- Keras 모델을 LiteRT로 변환하면 추론 속도가 획기적으로 빨라집니다.
- 양자화 과정에서 성능 저하가 발생할 수 있으므로 오차 비교가 중요합니다.
성도 나기사입니다.
이번에는 Keras 모델의 양자화에 대해 정리해 보았습니다.
환경
-
google colaboratory
-
Python : 3.13.15
-
keras:3.13.2
-
tensorflow:2.21.0
-
ai-edge-litert:2.2.0
-
Python : 3.13.15
1. 준비
1.1 라이브러리 로드
2026년 10월 6일 현재, google colaboratory에는 ai-edge-litert 라이브러리가 없었기 때문에 다음 명령어로 도입합니다.
!pip install ai_edge_litert
필요한 라이브러리 임포트는 다음과 같습니다.
from os import environ
env[
파일 크기(file size)를 가져오는 데는 `os.path.getsize`를 사용했습니다.
```python
from os.path import getsize
3.1 측정 프로그램
model_path_list = [
"0_no_quantized_model.tflite",
"1_dynamic_range_quantization.tflite",
...
3.2 출력 결과
표로 정리하면 다음과 같습니다.
Keras에서 LiteRT로 변환하는 것만으로 파일 크기가 약 1/3 수준이 됩니다.
| 모델 | 파일 크기(byte) | Keras 대비 파일 크기 비율 |
|---|---|---|
| keras | 2866757 | 1 |
| ... |
4. 측정: 추론 속도
다소 거칠지만, 간이적인 속도 비교를 해보겠습니다.
time.perf_counter로 처리 전후의 차이를 가져와 비교합니다.
from time import perf_counter
4.1 처리 속도 측정용 함수
입력 데이터에 대해서만 int8 양자화를 수행했습니다.
def measure_processing_time(X, model_path, type_=None, N=100):
"""
LiteRT 모델의 추론 속도를 측정하는 함수
...
4.2 실측용 프로그램
# Keras에서의 속도
X = np.array(x_train[0].reshape(1, 28, 28, 1), dtype=np.float32)
# WarmUp 실행
...
4.3 처리 속도 측정 결과
실행할 때 편차가 크므로 참고용으로 부탁드립니다.
Keras에서 LiteRT로 변환하는 것만으로 수백 배 빨라집니다.
런타임: CPU
| 모델 | 처리 속도(s) | Keras 대비 속도 비율 (몇 배 빠른가?) |
|---|---|---|
| keras(CPU) | 0.1126945 | 1 |
| ... |
런타임: T4 GPU
| 모델 | 처리 속도(s) | Keras 대비 속도 비율 (몇 배 빠른가?) |
|---|---|---|
| keras(GPU) | 0.0745409 | 1 |
| ... |
5. 성능 비교
양자화 오차로 인한 성능 저하를 비교해 보겠습니다.
일단 Confusion Matrix와 classification report를 출력해 보았습니다.
5.1 측정용 프로그램
from sklearn.metrics import ConfusionMatrixDisplay, classification_report
import matplotlib.pyplot as plt
def make_cm_and_report(y_true, y_pred, model_name, label_list):
...
5.2 실측용 프로그램
# keras 모델
print("\n=== model(keras) ===")
predict_y = keras_model.predict(x_test)
...
5.3 결과
이미 틀린 것 찾기 수준입니다.
Keras

LiteRT 변환만

동적 양자화 (Dynamic Quantization)

float16 양자화

int8 양자화

참고로, int8에서 float32로 되돌리는 역양자화를 생략해도 클래스 분류의 예측 결과는 전혀 변하지 않습니다 (선형 변환이므로 argmax 결과가 바뀌지 않기 때문입니다).
6. 요약
- Keras 모델을 LiteRT 형식으로 변환하여 사용하는 프로그램을 작성했습니다.
- LiteRT 형식으로 변환하는 것만으로 파일 크기가 1/3, 추론 속도는 약 400배가 되었으며, 예측 성능의 저하가 없었습니다 (강함).
- 제조 현장 등에서는 처리 속도가 요구사항으로 요청되는 경우가 많으므로, 그러한 경우에는 LiteRT 형식으로 사용하는 것이 좋을 것 같습니다.
참고 URL
- Post-training quantization_Google AI Edge_Google for Developers
토론 (Discussion)

AI 자동 생성 콘텐츠
본 콘텐츠는 Zenn ML의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기