.tflite — це бінарний формат файлу моделі TensorFlow Lite, заснований на технології FlatBuffers від Google. Формат оптимізовано для ефективного виконання інференсу на мобільних, вбудованих та edge-пристроях з обмеженими ресурсами. На відміну від інших форматів серіалізації, FlatBuffers забезпечує прямий доступ до даних без етапу парсингу та копіювання, що критично важливо для швидкого запуску моделі. Згідно з TensorFlow Lite Converter Guide, 2025, файл .tflite містить граф обчислень, квантовані або повноточні ваги та метадані для інтерпретатора. .tflite є стандартним форматом для on-device ML в екосистемі Google.
Головне
.tflite — це серіалізоване представлення моделі машинного навчання, оптимізоване для інференсу на пристроях з обмеженою пам'яттю та обчислювальною потужністю. На відміну від формату SavedModel, який зберігає граф у protobuf та потребує значних ресурсів для завантаження, .tflite використовує FlatBuffers — бібліотеку серіалізації з доступом до даних без копіювання.
Формат .tflite розроблено з урахуванням особливостей мобільних платформ: мінімальне споживання пам'яті при завантаженні, швидкий старт, підтримка квантованих ваг. Файл .tflite не підтримує навчання — лише інференс. Це принципова відмінність від форматів повного TensorFlow, що дозволяє значно зменшити розмір рантайму.
За даними Google Research, 2024, моделі у форматі .tflite з квантуванням INT8 завантажуються на 60% швидше, ніж аналогічні моделі у форматі FP32, та споживають на 40% менше оперативної пам'яті під час інференсу.
Файл .tflite складається з декількох секцій, організованих за схемою FlatBuffers. Основна секція — Model, яка містить граф обчислень (SubGraph), список операторів (OperatorCodes) та буфери з вагами. Кожен SubGraph містить тензори, оператори, вхідні та вихідні індекси.
Секція OperatorCodes містить ідентифікатори всіх операторів, що використовуються в моделі — Conv2D, DepthwiseConv2D, FullyConnected, Softmax та інші. Кожен оператор має код із попередньо визначеного списку BuiltinOperator. Якщо модель містить операції, відсутні в списку, вони позначаються як Custom та потребують реалізації через делегат або користувацький оператор.
Секція Buffers містить бінарні дані ваг моделі. Залежно від режиму квантування ваги можуть зберігатися у FP32, FP16, INT8 або у квантованому форматі з параметрами масштабування. Буфери відображаються в пам'ять безпосередньо через механізм mmap, що виключає додаткове копіювання.
| Секція | Призначення |
|---|---|
| Model | Коренева структура, версія, опис |
| SubGraph | Граф обчислень: тензори, оператори, входи/виходи |
| OperatorCodes | Список використовуваних операторів |
| Buffers | Бінарні дані ваг моделі |
| Metadata | Метадані: версія, автор, опис |
| SignatureDef | Іменовані входи та виходи для API |
.tflite підтримує три режими квантування. Повне цілочисельне квантування INT8 — ваги та активації представляються 8-бітними цілими числами. Для конвертації потрібен репрезентативний набір даних для калібрування діапазонів активацій. Розмір моделі зменшується в 4 рази.
Квантування FP16 — ваги перетворюються на 16-бітні числа з плаваючою точкою. Цей режим не потребує калібрування та дає мінімальну втрату точності. Активації залишаються у FP32. Розмір моделі зменшується в 2 рази. Рекомендується для пристроїв з підтримкою FP16 на GPU та NPU.
Динамічне квантування — ваги конвертуються в INT8, але активації обчислюються у FP32. Розмір моделі зменшується в 4 рази, але точність зберігається вищою, ніж при повному INT8. За даними Google ML Performance Benchmarks, цей режим оптимальний для NLP-моделей та моделей з високою чутливістю до точності.
Для конвертації моделі в .tflite використовується TFLite Converter — компонент TensorFlow, доступний через Python API tf.lite.TFLiteConverter. Конвертер підтримує три джерела: SavedModel, Keras H5 та ConcreteFunction. Мінімальний приклад конвертації моделі Keras:
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 для визначення діапазонів активацій:
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()
Google надає набір інструментів для аналізу та оптимізації .tflite моделей. TFLite Benchmark Tool вимірює час інференсу на пристрої та виводить статистику по кожному оператору. TFLite Model Inspector візуалізує граф обчислень та показує розміри тензорів.
Netron — кроссплатформний візуалізатор моделей, що підтримує .tflite нарівні з ONNX, Core ML та PyTorch. Netron відображає структуру графа, параметри кожного оператора та зв'язки між тензорами. Корисний для налагодження при конвертації.
TFLite Metadata API дозволяє додавати в .tflite файл метадані: опис моделі, формат вхідних даних, одиниці вимірювання, інформацію про автора. Метадані використовуються Task Library для автоматичного налаштування препроцесингу та постпроцесингу.
Приклад завантаження .tflite моделі на iOS з Swift API. TFLite Swift API надає Interpreter для завантаження моделі з бандла та виконання інференсу. Вкажіть делегат для апаратного прискорення через Core ML Delegate:
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 має бінарний формат FlatBuffers і не читається в текстовому редакторі. Для перегляду використовуйте Netron або TFLite Model Inspector, які візуалізують структуру моделі.
Використовуйте tf.lite.experimental.Analyzer.analyze(model_path) у Python або TFLite Benchmark Tool з прапорцем --print_model_details. Інструменти виводять повний список операторів з параметрами.
.tflite оптимізований для інференсу на мобільних пристроях і використовує FlatBuffers. ONNX — універсальний формат для обміну моделями між фреймворками з серіалізацією в protobuf. TFLite має вбудовану підтримку квантування.
Ні, зворотної конвертації не існує через втрату інформації при квантуванні та оптимізації. Вихідну модель TensorFlow слід зберігати окремо для подальшого навчання або змін.
Використовуйте TFLite Metadata Writer API на Python. API дозволяє додати опис, формат входів/виходів, одиниці вимірювання та приклади даних для Task Library.
Підсумки
Ми розробимо мобільний застосунок під ключ
IT Sectr створює застосунки для iOS та Android для стартапів і бізнесу з 2017 року. Ми проконсультуємо вас і запропонуємо найкраще рішення.
Читайте також