TF Lite Interpreter مؤلفه کلیدی TensorFlow Lite است که مسئول اجرای مدلهای با فرمت .tflite در دستگاههای موبایل و تعبیهشده میباشد. Interpreter نمایش FlatBuffers مدل را بارگذاری میکند، تنسورهایی برای دادههای ورودی و خروجی اختصاص میدهد، گراف محاسبات را اجرا کرده و نتیجه را برمیگرداند. بر اساس TensorFlow Lite API Reference, 2025، Interpreter برای Android به زبان Java و C++، برای iOS به زبان Swift و Objective-C و همچنین از طریق اتصالات Python برای تست در دسترس است. TF Lite Interpreter از نمایندگان (delegate) برای شتاب سختافزاری از طریق GPU، NNAPI و Core ML پشتیبانی میکند.
نکات اصلی
TF Lite Interpreter یک محیط زمان اجرا مینیمال است که مدل یادگیری ماشین را روی دستگاه بدون زیرساخت سرور اجرا میکند. Interpreter از یادگیری پشتیبانی نمیکند — فقط استنتاج. این امر آن را سبک میسازد: اندازه باینری مفسر پایه در Android حدود ۳۰۰ کیلوبایت است.
Interpreter با مدل با فرمت .tflite مبتنی بر FlatBuffers کار میکند. در زمان ایجاد، Interpreter مدل را از طریق mmap در حافظه بارگذاری میکند که دسترسی مستقیم به دادهها بدون کپی را فراهم میکند. سپس Interpreter تنسورها را بر اساس توضیحات مدل اختصاص میدهد و برای اجرا آماده میشود.
هر نمونه Interpreter نسبت به نخ ایمن نیست. برای اجرای موازی یک مدل در چندین نخ، نمونههای جداگانه Interpreter با کپیهایی از مدل ایجاد کنید. برای فراخوانیهای ترتیبی در یک نخ، میتوان از یک نمونه Interpreter مجدداً استفاده کرد.
در Android، Interpreter از طریق Java API در بسته org.tensorflow.lite.Interpreter در دسترس است. متد اصلی — run(Object input, Object output) — آرایههای چندبعدی یا ByteBuffer را میپذیرد. برای کنترل دقیقتر از متدهای runForMultipleInputsOutputs() و resizeInput() استفاده کنید.
در iOS، Interpreter از طریق Swift API در ماژول TensorFlowLite در دسترس است. رابط پایه مشابه Android است: مقداردهی اولیه از طریق Interpreter.init(modelPath:)، تخصیص تنسورها از طریق allocateTensors()، اجرا از طریق invoke(). Swift API از Data و MLMultiTensor به عنوان انواع داده ورودی پشتیبانی میکند.
| پلتفرم | زبان | کلاس | متد استنتاج |
|---|---|---|---|
| Android | Java / Kotlin | Interpreter | run(), runForMultipleInputsOutputs() |
| Android (بومی) | C++ | Interpreter | Invoke() |
| iOS | Swift / Obj-C | Interpreter | invoke() |
| Linux / Python | Python | Interpreter | get_tensor(), invoke() |
نمایندگان (delegate) مؤلفههایی هستند که اجرای عملیات را به سختافزار تخصصی منتقل میکنند. GPU Delegate از OpenGL ES (Android) و Metal (iOS) برای شتاب عملیات گرافیکی استفاده میکند. NNAPI Delegate اجرا را از طریق Android Neural Networks API به NPU، DSP یا GPU منتقل میکند.
Core ML Delegate در iOS در دسترس است و عملیات TFLite را به فرمت Core ML ترجمه میکند. بر اساس Apple ML Benchmarking، استفاده از Core ML Delegate در iPhone 15 Pro استنتاج را تا ۴ برابر در مقایسه با CPU شتاب میبخشد. Delegate از عملیات FP32 و FP16 پشتیبانی میکند.
XNNPACK Delegate یک راهحل جهانی برای ARM CPU است که برای پردازندههای موبایل بهینه شده است. نیاز به سختافزار خاصی ندارد و از INT8، FP16 و FP32 پشتیبانی میکند. به عنوان نماینده پایه (baseline) توصیه میشود که در همه دستگاهها فعال میشود.
Interpreter تنسورها را از طریق استخر حافظه مدیریت میکند که در فراخوانی allocateTensors() اختصاص مییابد. اندازه استخر بر اساس توضیحات مدل در فایل .tflite تعیین میشود. پس از تخصیص، مفسر در طول استنتاج حافظه اضافی اختصاص نمیدهد.
برای مدلهای با اندازههای ورودی پویا از resizeInput() استفاده کنید. این روش حافظه را برای تنسورهای ورودی با در نظر گرفتن اندازه جدید توزیع مجدد میکند. پس از تغییر اندازه تنسور ورودی، ممکن است تخصیص مجدد از طریق allocateTensors() لازم باشد.
هنگام کار با چندین مدل، آزادسازی منابع از طریق close() مهم است. مفسرهای آزاد نشده میتوانند منجر به نشت حافظه شوند، به ویژه در دستگاههایی با RAM محدود. برای iOS از شمارش خودکار مرجع ARC استفاده کنید، برای Android از try-with-resources یا فراخوانی صریح close().
رایجترین خطاها هنگام کار با Interpreter — عدم تطابق ابعاد تنسورها. اگر دادههای ورودی با شکل مورد انتظار مطابقت نداشته باشند، Interpreter در Android IllegalArgumentException یا در iOS خطای زمان اجرا ایجاد میکند. ابعاد را از طریق inputTensorAt() و outputTensorAt() بررسی کنید.
دومین مشکل رایج — عملگرهای پشتیبانی نشده هنگام استفاده از نماینده. اگر نماینده از عملگر پشتیبانی نکند، Interpreter به طور خودکار برای آن عملگر به CPU بازمیگردد. برای شناسایی چنین موقعیتهایی، ثبت رویداد را از طریق setCancelled() فعال کنید یا لاگهای TFLite را بررسی کنید.
TFLite Benchmark Tool را برای پروفایلگیری فراهم میکند: اندازهگیری زمان هر عملگر، مصرف حافظه، مقایسه نمایندگان. Benchmark Tool در ترکیب TFLite Support Library در دسترس است و میتواند مستقیماً روی دستگاه اجرا شود.
مثال اجرای مدل در Android با Java API با استفاده از GPU Delegate. Interpreter با گزینههایی شامل نماینده GPU ایجاد میشود. پس از اجرای استنتاج، نتیجه از تنسور خروجی خوانده میشود:
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", "کلاس بالایی: " + bestClass);
gpu.close();
interpreter.close();
مثال اجرا در Python برای آزمایش قبل از استقرار. Python API TFLite امکان بارگذاری .tflite، اجرای استنتاج و نمایش نتیجه را فراهم میکند. برای اشکالزدایی و بررسی دقت مدل استفاده میشود:
import tensorflow as tf
import numpy as np
# بارگذاری مدل TFLite از فایل
interpreter = tf.lite.Interpreter(model_path="model.tflite")
interpreter.allocate_tensors()
# دریافت جزئیات تنسور ورودی و خروجی
input_details = interpreter.get_input_details()
output_details = interpreter.get_output_details()
# آمادهسازی دادههای ورودی تصادفی برای آزمایش
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("شکل خروجی:", output_data.shape)
سؤالات متداول
Interpreter پایه برای Android حدود ۳۰۰ کیلوبایت اشغال میکند. حافظه اضافی برای تنسورهای مدل اختصاص مییابد و به اندازه دادههای ورودی، تعداد عملگرها و حالت کوانتیزاسیون بستگی دارد.
یک نمونه Interpreter نسبت به نخ ایمن نیست. برای اجرای موازی، چندین نمونه با کپیهای جداگانه از مدل ایجاد کنید. هر نمونه از حافظه مخصوص خود برای تنسورها استفاده میکند.
از TFLite Support Library — کلاس DelegatesApi استفاده کنید. برای دریافت لیست نمایندگان موجود در یک دستگاه خاص، DelegatesApi.getAvailableDelegates() را فراخوانی کنید.
یکپارچگی فایل .tflite را از طریق tf.lite.experimental.Analyzer بررسی کنید. اطمینان حاصل کنید که مدل برای نسخه صحیح TFLite تبدیل شده و از عملیات موجود در دستگاه هدف پشتیبانی میکند.
از متد resizeInput(int idx, int[] dims) در Java API یا resizeInput(at:to:) در Swift استفاده کنید. پس از تغییر اندازه، برای توزیع مجدد حافظه، allocateTensors() را فراخوانی کنید.
خلاصه
ما یک اپلیکیشن موبایل به صورت کلید در دست توسعه خواهیم داد
IT Sectr از سال 2017 برنامههای iOS و Android را برای استارتاپها و کسبوکارها ایجاد میکند. ما به شما مشاوره میدهیم و بهترین راهحل را پیشنهاد خواهیم کرد.
همچنین بخوانید