.tflite — TFLite 모델 형식의 본질, 구조 및 응용

저자: IT Sectr 게시일: 2026-07-18 읽는 시간: 6 분

.tflite는 Google의 FlatBuffers 기술을 기반으로 하는 TensorFlow Lite 모델의 바이너리 파일 형식입니다. 이 형식은 리소스가 제한된 모바일, 임베디드 및 엣지 디바이스에서 효율적인 추론을 위해 최적화되었습니다. 다른 직렬화 형식과 달리 FlatBuffers는 파싱 및 복사 없이 데이터에 직접 액세스를 제공하므로 모델의 빠른 시작에 중요합니다. TensorFlow Lite Converter Guide, 2025에 따르면 .tflite 파일에는 계산 그래프, 양자화 또는 전체 정밀도 가중치 및 인터프리터용 메타데이터가 포함됩니다. .tflite는 Google 생태계에서 온디바이스 ML의 표준 형식입니다.

주요 내용

  • .tflite — 모바일 추론을 위한 FlatBuffers 기반 TensorFlow Lite 모델의 바이너리 형식.
  • 파일에는 단일 바이너리 컨테이너에 계산 그래프, 모델 가중치 및 메타데이터가 포함됩니다.
  • FlatBuffers는 파싱 및 메모리 할당 없이 데이터에 직접 액세스를 제공합니다.
  • INT8, FP16 양자화 및 동적 양자화를 지원합니다.
  • .tflite는 Android, iOS 및 Linux에서 TFLite Interpreter와 함께 사용됩니다.

.tflite 형식이란

.tflite는 메모리와 컴퓨팅 성능이 제한된 디바이스에서 추론에 최적화된 머신러닝 모델의 직렬화된 표현입니다. 그래프를 protobuf에 저장하고 로드하는 데 상당한 리소스가 필요한 SavedModel 형식과 달리 .tflite는 FlatBuffers(복사 없이 데이터 액세스가 가능한 직렬화 라이브러리)를 사용합니다.

.tflite 형식은 모바일 플랫폼의 특성을 고려하여 설계되었습니다: 로드 시 최소 메모리 소비, 빠른 시작, 양자화된 가중치 지원. .tflite 파일은 훈련을 지원하지 않으며 추론만 가능합니다. 이는 완전한 TensorFlow 형식과의 근본적인 차이점으로, 런타임 크기를 크게 줄일 수 있습니다.

Google Research, 2024에 따르면 INT8 양자화를 사용한 .tflite 형식의 모델은 동등한 FP32 모델보다 60% 더 빠르게 로드되고 추론 중 RAM을 40% 덜 소비합니다.

.tflite 파일의 내부 구조

.tflite 파일은 FlatBuffers 스키마에 따라 구성된 여러 섹션으로 구성됩니다. 주요 섹션은 Model로, 계산 그래프(SubGraph), 연산자 목록(OperatorCodes) 및 가중치 버퍼를 포함합니다. 각 SubGraph에는 텐서, 연산자 및 입력/출력 인덱스가 포함됩니다.

OperatorCodes 섹션에는 모델에서 사용된 모든 연산자의 식별자(Conv2D, DepthwiseConv2D, FullyConnected, Softmax 등)가 포함됩니다. 각 연산자는 미리 정의된 BuiltinOperator 목록의 코드를 가집니다. 모델에 목록에 없는 연산이 포함된 경우 Custom으로 표시되며 델리게이트 또는 사용자 정의 연산자를 통해 구현해야 합니다.

Buffers 섹션에는 모델 가중치의 바이너리 데이터가 포함됩니다. 양자화 모드에 따라 가중치는 FP32, FP16, INT8 또는 스케일링 파라미터가 있는 양자화 형식으로 저장될 수 있습니다. 버퍼는 mmap을 통해 메모리에 직접 매핑되어 추가 복사를 제거합니다.

.tflite 파일의 주요 섹션

섹션목적
Model루트 구조, 버전, 설명
SubGraph계산 그래프: 텐서, 연산자, 입력/출력
OperatorCodes사용된 연산자 목록
Buffers모델 가중치의 바이너리 데이터
Metadata메타데이터: 버전, 작성자, 설명
SignatureDefAPI를 위한 명명된 입력 및 출력

양자화 및 형식 최적화

.tflite는 세 가지 양자화 모드를 지원합니다. 완전 정수 INT8 양자화: 가중치와 활성화가 8비트 정수로 표현됩니다. 변환을 위해 활성화 범위를 보정할 대표 데이터 세트가 필요합니다. 모델 크기가 4배 줄어듭니다.

FP16 양자화: 가중치가 16비트 부동 소수점 숫자로 변환됩니다. 이 모드는 보정이 필요 없으며 정밀도 손실이 최소화됩니다. 활성화는 FP32로 유지됩니다. 모델 크기가 2배 줄어듭니다. GPU 및 NPU에서 FP16을 지원하는 디바이스에 권장됩니다.

동적 양자화: 가중치가 INT8로 변환되지만 활성화는 FP32로 계산됩니다. 모델 크기가 4배 줄어들고 정밀도는 완전 INT8보다 높게 유지됩니다. Google ML Performance Benchmarks에 따르면 이 모드는 NLP 모델 및 정밀도 민감도가 높은 모델에 최적입니다.

TensorFlow 모델에서 .tflite 만들기

모델을 .tflite로 변환하려면 TFLite Converter를 사용합니다. 이는 Python API tf.lite.TFLiteConverter를 통해 사용 가능한 TensorFlow 구성 요소입니다. 변환기는 SavedModel, Keras H5 및 ConcreteFunction의 세 가지 소스를 지원합니다. Keras 모델 변환의 최소 예제:

python
import tensorflow as tf

# 파일에서 훈련된 Keras 모델 로드
model = tf.keras.models.load_model("my_model.h5")

# 동적 양자화로 .tflite로 변환
converter = tf.lite.TFLiteConverter.from_keras_model(model)
converter.optimizations = [tf.lite.Optimize.DEFAULT]
tflite_model = converter.convert()

# 변환된 모델을 .tflite 파일에 쓰기
with open("model.tflite", "wb") as f:
    f.write(tflite_model)

완전한 INT8 양자화로 변환하려면 보정 데이터 세트가 필요합니다. 활성화 범위를 결정하기 위해 representative_dataset을 제공하세요:

python
converter = tf.lite.TFLiteConverter.from_saved_model("saved_model")
converter.optimizations = [tf.lite.Optimize.DEFAULT]
converter.representative_dataset = representative_dataset
converter.target_spec.supported_ops = [
    tf.lite.OpsSet.TFLITE_BUILTINS_INT8
]
converter.inference_input_type = tf.uint8
converter.inference_output_type = tf.uint8
tflite_quant_model = converter.convert()

.tflite 작업 도구

Google은 .tflite 모델 분석 및 최적화를 위한 도구 세트를 제공합니다. TFLite Benchmark Tool은 디바이스에서 추론 시간을 측정하고 각 연산자의 통계를 표시합니다. TFLite Model Inspector는 계산 그래프를 시각화하고 텐서 크기를 보여줍니다.

Netron은 ONNX, Core ML 및 PyTorch와 함께 .tflite를 지원하는 크로스 플랫폼 모델 시각화 도구입니다. Netron은 그래프 구조, 각 연산자의 매개변수 및 텐서 간 연결을 표시합니다. 변환 중 디버깅에 유용합니다.

TFLite Metadata API를 사용하면 .tflite 파일에 메타데이터(모델 설명, 입력 데이터 형식, 측정 단위, 작성자 정보)를 추가할 수 있습니다. 메타데이터는 Task Library에서 자동 전처리 및 후처리 구성에 사용됩니다.

.tflite 로드 및 실행 예제

iOS에서 Swift API로 .tflite 모델을 로드하는 예제입니다. TFLite Swift API는 번들에서 모델을 로드하고 추론을 실행하기 위한 Interpreter를 제공합니다. Core ML Delegate를 통해 하드웨어 가속을 위한 델리게이트를 지정하세요:

swift
import TensorFlowLite

guard let modelPath = Bundle.main.path(
    forResource: "model", ofType: "tflite"
) else { return }

let interpreter = try Interpreter.init(modelPath: modelPath)
try interpreter.allocateTensors()

// 모델의 입력 데이터 준비
let inputData = Data.init(count: 1 * 224 * 224 * 3)
try interpreter.copy(inputData, toInputAt: 0)

// 모델 추론 실행
try interpreter.invoke()

// 출력 텐서 데이터 읽기
let outputTensor = try interpreter.output(at: 0)
let results = outputTensor.data.withUnsafeBytes {
    Array($0.bindMemory(to: Float32.self))
}

자주 묻는 질문

.tflite 파일을 텍스트 편집기에서 열 수 있나요?

.tflite 파일은 바이너리 FlatBuffers 형식이므로 텍스트 편집기에서 읽을 수 없습니다. 모델 구조를 시각화하는 Netron 또는 TFLite Model Inspector를 사용하세요.

.tflite에서 어떤 연산자가 사용되는지 확인하는 방법은?

Python에서 tf.lite.experimental.Analyzer.analyze(model_path)를 사용하거나 --print_model_details 플래그와 함께 TFLite Benchmark Tool을 사용하세요. 이러한 도구는 매개변수와 함께 연산자의 전체 목록을 표시합니다.

.tflite와 ONNX의 차이점은?

.tflite는 모바일 디바이스에서 추론에 최적화되어 있으며 FlatBuffers를 사용합니다. ONNX는 protobuf 직렬화를 사용하여 프레임워크 간 모델 교환을 위한 범용 형식입니다. TFLite에는 내장 양자화 지원이 있습니다.

.tflite를 다시 TensorFlow로 변환할 수 있나요?

아니요, 양자화 및 최적화 중 정보 손실로 인해 역변환이 존재하지 않습니다. 원본 TensorFlow 모델은 향후 훈련 또는 수정을 위해 별도로 저장해야 합니다.

.tflite 파일에 메타데이터를 추가하는 방법은?

Python에서 TFLite Metadata Writer API를 사용하세요. API를 통해 Task Library에 대한 설명, 입출력 형식, 측정 단위 및 예제 데이터를 추가할 수 있습니다.

요약

  • .tflite — 모바일 추론을 위한 FlatBuffers 기반 TensorFlow Lite 모델의 바이너리 형식.
  • 파일에는 단일 컨테이너에 계산 그래프, 가중치, 메타데이터 및 SignatureDef가 포함됩니다.
  • FlatBuffers는 파싱 또는 추가 할당 없이 데이터에 대한 mmap 액세스를 제공합니다.
  • INT8, FP16 및 동적 양자화는 크기를 최대 4배까지 줄입니다.
  • 변환을 위해 SavedModel, Keras 또는 ConcreteFunction에서 TFLite Converter를 사용하세요.
  • 시각화 및 디버깅은 Netron, TFLite Inspector 및 Benchmark Tool을 통해 가능합니다.
  • Task Library 통합을 위해 메타데이터는 Metadata Writer API를 통해 추가됩니다.

턴키 방식의 모바일 애플리케이션을 개발해 드립니다

IT Sectr는 2017년부터 스타트업과 기업을 위한 iOS 및 Android 애플리케이션을 만듭니다. 저희가 상담해 드리고 최적의 솔루션을 제안하겠습니다.

프로젝트 논의

더 읽어보기