TF Lite Interpreter — مفاهیم کلیدی، رابط و اجرای مدل‌ها

نویسنده: IT Sectr منتشر شده: 2026-07-18 زمان مطالعه: 6 دقیقه

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 — محیط زمان اجرا برای اجرای مدل‌های .tflite در دستگاه‌های موبایل و تعبیه‌شده.
  • Interpreter مدل را بارگذاری می‌کند، تنسورها را اختصاص می‌دهد و گراف محاسبات را اپراتور به اپراتور اجرا می‌کند.
  • API برای پلتفرم‌های مختلف به زبان‌های Java, C++, Swift, Objective-C و Python در دسترس است.
  • نمایندگان GPU، NNAPI و Core ML استنتاج را تا ۵ برابر در مقایسه با CPU شتاب می‌بخشند.
  • مفسرهای متعدد امکان اجرای چندین مدل به صورت موازی در یک برنامه را فراهم می‌کنند.

مفاهیم کلیدی TF Lite Interpreter

TF Lite Interpreter یک محیط زمان اجرا مینیمال است که مدل یادگیری ماشین را روی دستگاه بدون زیرساخت سرور اجرا می‌کند. Interpreter از یادگیری پشتیبانی نمی‌کند — فقط استنتاج. این امر آن را سبک می‌سازد: اندازه باینری مفسر پایه در Android حدود ۳۰۰ کیلوبایت است.

Interpreter با مدل با فرمت .tflite مبتنی بر FlatBuffers کار می‌کند. در زمان ایجاد، Interpreter مدل را از طریق mmap در حافظه بارگذاری می‌کند که دسترسی مستقیم به داده‌ها بدون کپی را فراهم می‌کند. سپس Interpreter تنسورها را بر اساس توضیحات مدل اختصاص می‌دهد و برای اجرا آماده می‌شود.

هر نمونه Interpreter نسبت به نخ ایمن نیست. برای اجرای موازی یک مدل در چندین نخ، نمونه‌های جداگانه Interpreter با کپی‌هایی از مدل ایجاد کنید. برای فراخوانی‌های ترتیبی در یک نخ، می‌توان از یک نمونه Interpreter مجدداً استفاده کرد.

API مفسر در Android و iOS

در 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 به عنوان انواع داده ورودی پشتیبانی می‌کند.

مقایسه API بر اساس پلتفرم

پلتفرمزبانکلاسمتد استنتاج
AndroidJava / KotlinInterpreterrun(), runForMultipleInputsOutputs()
Android (بومی)C++InterpreterInvoke()
iOSSwift / Obj-CInterpreterinvoke()
Linux / PythonPythonInterpreterget_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 در دسترس است و می‌تواند مستقیماً روی دستگاه اجرا شود.

مثال‌های استنتاج از طریق Interpreter

مثال اجرای مدل در Android با Java API با استفاده از GPU Delegate. Interpreter با گزینه‌هایی شامل نماینده GPU ایجاد می‌شود. پس از اجرای استنتاج، نتیجه از تنسور خروجی خوانده می‌شود:

java
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، اجرای استنتاج و نمایش نتیجه را فراهم می‌کند. برای اشکال‌زدایی و بررسی دقت مدل استفاده می‌شود:

python
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)

سؤالات متداول

TF Lite Interpreter چقدر حافظه مصرف می‌کند؟

Interpreter پایه برای Android حدود ۳۰۰ کیلوبایت اشغال می‌کند. حافظه اضافی برای تنسورهای مدل اختصاص می‌یابد و به اندازه داده‌های ورودی، تعداد عملگرها و حالت کوانتیزاسیون بستگی دارد.

آیا می‌توان از Interpreter در چندین نخ استفاده کرد؟

یک نمونه Interpreter نسبت به نخ ایمن نیست. برای اجرای موازی، چندین نمونه با کپی‌های جداگانه از مدل ایجاد کنید. هر نمونه از حافظه مخصوص خود برای تنسورها استفاده می‌کند.

چگونه بررسی کنیم کدام نمایندگان در دستگاه در دسترس هستند؟

از TFLite Support Library — کلاس DelegatesApi استفاده کنید. برای دریافت لیست نمایندگان موجود در یک دستگاه خاص، DelegatesApi.getAvailableDelegates() را فراخوانی کنید.

اگر Interpreter هنگام بارگذاری مدل خطا ایجاد کند چه باید کرد؟

یکپارچگی فایل .tflite را از طریق tf.lite.experimental.Analyzer بررسی کنید. اطمینان حاصل کنید که مدل برای نسخه صحیح TFLite تبدیل شده و از عملیات موجود در دستگاه هدف پشتیبانی می‌کند.

چگونه اندازه تنسور ورودی را پس از ایجاد Interpreter تغییر دهیم؟

از متد resizeInput(int idx, int[] dims) در Java API یا resizeInput(at:to:) در Swift استفاده کنید. پس از تغییر اندازه، برای توزیع مجدد حافظه، allocateTensors() را فراخوانی کنید.

خلاصه

  • TF Lite Interpreter — محیط زمان اجرا مینیمال برای اجرای مدل‌های .tflite در دستگاه‌های موبایل.
  • Interpreter مدل را از طریق mmap بارگذاری می‌کند، تنسورها را اختصاص می‌دهد و گراف محاسبات را اجرا می‌کند.
  • API به زبان‌های Java, C++, Swift, Objective-C و Python با یک رابط واحد در دسترس است.
  • نمایندگان GPU، NNAPI و Core ML استنتاج را تا ۵ برابر در مقایسه با CPU شتاب می‌بخشند.
  • برای مدل‌های با اندازه‌های ورودی پویا از resizeInput() استفاده کنید.
  • برای جلوگیری از نشت حافظه، Interpreter را از طریق close() ببندید.
  • Benchmark Tool به پروفایل‌گیری عملکرد در دستگاه واقعی کمک می‌کند.

ما یک اپلیکیشن موبایل به صورت کلید در دست توسعه خواهیم داد

IT Sectr از سال 2017 برنامه‌های iOS و Android را برای استارتاپ‌ها و کسب‌وکارها ایجاد می‌کند. ما به شما مشاوره می‌دهیم و بهترین راه‌حل را پیشنهاد خواهیم کرد.

بحث درباره پروژه

همچنین بخوانید