TF Lite Interpreter là thành phần chính của TensorFlow Lite chịu trách nhiệm thực thi các mô hình .tflite trên thiết bị di động và nhúng. Trình thông dịch tải biểu diễn FlatBuffers của mô hình, cấp phát tensor cho dữ liệu đầu vào và đầu ra, thực thi đồ thị tính toán và trả về kết quả. Theo Tài liệu tham khảo API TensorFlow Lite, 2025, Interpreter có sẵn bằng Java và C++ cho Android, Swift và Objective-C cho iOS, và thông qua liên kết Python để thử nghiệm. TF Lite Interpreter hỗ trợ các đại biểu để tăng tốc phần cứng qua GPU, NNAPI và Core ML.
Những điểm chính
TF Lite Interpreter là môi trường thực thi tối giản chạy mô hình học máy trên thiết bị mà không cần cơ sở hạ tầng máy chủ. Trình thông dịch không hỗ trợ huấn luyện — chỉ suy luận. Điều này làm cho nó nhẹ: kích thước nhị phân của trình thông dịch cơ bản trên Android là khoảng 300 KB.
Trình thông dịch làm việc với các mô hình ở định dạng .tflite, dựa trên FlatBuffers. Khi được tạo, trình thông dịch tải mô hình vào bộ nhớ qua mmap, cung cấp quyền truy cập trực tiếp vào dữ liệu mà không cần sao chép. Sau đó, trình thông dịch cấp phát tensor dựa trên mô tả mô hình và sẵn sàng thực thi.
Mỗi phiên bản trình thông dịch không an toàn cho luồng. Để thực thi cùng một mô hình song song trên nhiều luồng, hãy tạo các phiên bản trình thông dịch riêng biệt với các bản sao của mô hình. Đối với các lệnh gọi tuần tự trong một luồng, một phiên bản trình thông dịch có thể được tái sử dụng.
Trên Android, trình thông dịch có sẵn qua API Java trong gói org.tensorflow.lite.Interpreter. Phương thức chính là run(Object input, Object output), chấp nhận mảng đa chiều hoặc ByteBuffer. Để kiểm soát chi tiết hơn, hãy sử dụng các phương thức runForMultipleInputsOutputs() và resizeInput().
Trên iOS, trình thông dịch có sẵn qua API Swift trong mô-đun TensorFlowLite. Giao diện cơ bản tương tự Android: khởi tạo qua Interpreter.init(modelPath:), cấp phát tensor qua allocateTensors(), thực thi qua invoke(). API Swift hỗ trợ Data và MLMultiTensor làm kiểu dữ liệu đầu vào.
| Nền tảng | Ngôn ngữ | Lớp | Phương thức suy luận |
|---|---|---|---|
| Android | Java / Kotlin | Interpreter | run(), runForMultipleInputsOutputs() |
| Android (gốc) | C++ | Interpreter | Invoke() |
| iOS | Swift / Obj-C | Interpreter | invoke() |
| Linux / Python | Python | Interpreter | get_tensor(), invoke() |
Đại biểu là các thành phần chuyển việc thực thi các phép toán sang phần cứng chuyên dụng. GPU Delegate sử dụng OpenGL ES (Android) và Metal (iOS) để tăng tốc các phép toán đồ họa. NNAPI Delegate chuyển việc thực thi sang NPU, DSP hoặc GPU qua Android Neural Networks API.
Core ML Delegate có sẵn trên iOS và dịch các phép toán TFLite sang định dạng Core ML. Theo Apple ML Benchmarking, sử dụng Core ML Delegate trên iPhone 15 Pro tăng tốc suy luận lên đến 4 lần so với CPU. Đại biểu hỗ trợ các phép toán FP32 và FP16.
XNNPACK Delegate là một giải pháp phổ quát cho CPU ARM, được tối ưu hóa cho bộ xử lý di động. Nó không yêu cầu phần cứng đặc biệt và hỗ trợ INT8, FP16 và FP32. Nó được khuyến nghị làm đại biểu cơ sở kích hoạt trên tất cả các thiết bị.
Trình thông dịch quản lý tensor thông qua vùng nhớ được cấp phát khi gọi allocateTensors(). Kích thước vùng nhớ được xác định dựa trên mô tả mô hình trong tệp .tflite. Sau khi cấp phát, trình thông dịch không cấp phát thêm bộ nhớ trong quá trình suy luận.
Đối với các mô hình có kích thước đầu vào động, hãy sử dụng resizeInput(). Phương thức này cấp phát lại bộ nhớ cho các tensor đầu vào theo kích thước mới. Sau khi thay đổi kích thước tensor đầu vào, có thể cần cấp phát lại qua allocateTensors().
Khi làm việc với nhiều mô hình, điều quan trọng là giải phóng tài nguyên qua close(). Các phiên bản trình thông dịch không được giải phóng có thể gây rò rỉ bộ nhớ, đặc biệt trên các thiết bị có RAM hạn chế. Đối với iOS, sử dụng đếm tham chiếu tự động ARC; đối với Android, sử dụng try-with-resources hoặc gọi close() rõ ràng.
Các lỗi phổ biến nhất khi làm việc với trình thông dịch là không khớp kích thước tensor. Nếu dữ liệu đầu vào không khớp với hình dạng mong đợi, trình thông dịch sẽ ném IllegalArgumentException trên Android hoặc lỗi thời gian chạy trên iOS. Kiểm tra kích thước qua inputTensorAt() và outputTensorAt().
Vấn đề phổ biến thứ hai là các toán tử không được hỗ trợ khi sử dụng đại biểu. Nếu đại biểu không hỗ trợ một toán tử, trình thông dịch tự động quay lại CPU cho toán tử đó. Để xác định các tình huống này, hãy bật ghi nhật ký qua setCancelled() hoặc kiểm tra nhật ký TFLite.
TFLite cung cấp Công cụ Benchmark để phân tích: đo thời gian thực thi của mỗi toán tử, mức tiêu thụ bộ nhớ, so sánh đại biểu. Công cụ Benchmark có sẵn như một phần của Thư viện hỗ trợ TFLite và có thể chạy trực tiếp trên thiết bị.
Ví dụ chạy mô hình trên Android với API Java sử dụng GPU Delegate. Trình thông dịch được tạo với các tùy chọn bao gồm đại biểu GPU. Sau khi suy luận, kết quả được đọc từ tensor đầu ra:
import org.tensorflow.lite.Interpreter;
import org.tensorflow.lite.gpu.GpuDelegate;
import java.nio.MappedByteBuffer;
MappedByteBuffer model = loadModelFile(context);
GpuDelegate gpu = new GpuDelegate();
Interpreter.Options opts = new Interpreter.Options().addDelegate(gpu);
Interpreter interpreter = new Interpreter.create(model, opts);
float[][] input = preprocessImage(bitmap);
float[][] output = new float[1][1000];
interpreter.run(input, output);
int bestClass = argmax(output[0]);
Log.d("TFLite", "Lớp hàng đầu: " + bestClass);
gpu.close();
interpreter.close();
Ví dụ chạy trên Python để thử nghiệm trước khi triển khai. API Python TFLite cho phép tải .tflite, thực thi suy luận và xuất kết quả. Được sử dụng để gỡ lỗi và xác minh độ chính xác của mô hình:
import tensorflow as tf
import numpy as np
# Tải mô hình TFLite từ tệp
interpreter = tf.lite.Interpreter(model_path="model.tflite")
interpreter.allocate_tensors()
# Lấy thông tin chi tiết tensor đầu vào và đầu ra
input_details = interpreter.get_input_details()
output_details = interpreter.get_output_details()
# Chuẩn bị dữ liệu đầu vào ngẫu nhiên để thử nghiệm
input_data = np.random.randn(
*input_details[0]["shape"]
).astype(np.float32)
interpreter.set_tensor(input_details[0]["index"], input_data)
interpreter.invoke()
output_data = interpreter.get_tensor(output_details[0]["index"])
print("Hình dạng đầu ra:", output_data.shape)
Các câu hỏi thường gặp
Trình thông dịch cơ bản cho Android chiếm khoảng 300 KB. Bộ nhớ bổ sung được cấp phát cho các tensor mô hình và phụ thuộc vào kích thước dữ liệu đầu vào, số lượng toán tử và chế độ lượng tử hóa.
Một phiên bản trình thông dịch không an toàn cho luồng. Để thực thi song song, hãy tạo nhiều phiên bản với các bản sao mô hình riêng biệt. Mỗi phiên bản sử dụng bộ nhớ riêng cho các tensor.
Sử dụng Thư viện hỗ trợ TFLite — lớp DelegatesApi. Gọi DelegatesApi.getAvailableDelegates() để lấy danh sách các đại biểu có sẵn trên một thiết bị cụ thể.
Kiểm tra tính toàn vẹn của tệp .tflite qua tf.lite.experimental.Analyzer. Đảm bảo mô hình được chuyển đổi cho phiên bản TFLite chính xác và hỗ trợ các phép toán có sẵn trên thiết bị mục tiêu.
Sử dụng phương thức resizeInput(int idx, int[] dims) trong API Java hoặc resizeInput(at:to:) trong Swift. Sau khi thay đổi kích thước, hãy gọi allocateTensors() để cấp phát lại bộ nhớ.
Tóm tắt
Chúng tôi sẽ phát triển ứng dụng di động chìa khóa trao tay
IT Sectr tạo các ứng dụng iOS và Android cho các công ty khởi nghiệp và doanh nghiệp từ năm 2017. Chúng tôi sẽ tư vấn và đề xuất giải pháp tốt nhất cho bạn.
Đọc thêm