LiteRT برای اندروید

LiteRT به شما امکان می‌دهد مدل‌های TensorFlow، PyTorch و JAX را در برنامه‌های اندروید خود اجرا کنید. سیستم LiteRT محیط‌های اجرایی از پیش ساخته شده و قابل تنظیم را برای اجرای سریع و کارآمد مدل‌ها در اندروید، از جمله گزینه‌هایی برای شتاب‌دهی سخت‌افزاری، فراهم می‌کند.

برای مثال، برنامه‌های اندرویدی که از LiteRT استفاده می‌کنند، به مخزن نمونه‌های LiteRT مراجعه کنید.

مدل‌های یادگیری ماشین

LiteRT از مدل‌های TensorFlow، PyTorch و JAX استفاده می‌کند که به فرمت مدل یادگیری ماشین کوچک‌تر، قابل حمل‌تر و کارآمدتر تبدیل می‌شوند. می‌توانید از مدل‌های از پیش ساخته شده با LiteRT در اندروید استفاده کنید، یا مدل‌های خودتان را بسازید و آنها را به فرمت LiteRT تبدیل کنید.

این صفحه در مورد استفاده از مدل‌های یادگیری ماشین از پیش ساخته شده بحث می‌کند و ساخت، آموزش، آزمایش یا تبدیل مدل‌ها را پوشش نمی‌دهد. برای کسب اطلاعات بیشتر در مورد انتخاب، اصلاح، ساخت و تبدیل مدل‌های یادگیری ماشین برای LiteRT به صفحه مدل‌ها مراجعه کنید.

اجرای مدل‌ها در اندروید

یک مدل LiteRT که درون یک برنامه اندروید اجرا می‌شود، داده‌ها را دریافت، پردازش و بر اساس منطق مدل، پیش‌بینی تولید می‌کند. یک مدل LiteRT برای اجرا به یک محیط زمان اجرای خاص نیاز دارد و داده‌هایی که به مدل منتقل می‌شوند باید در قالب داده خاصی به نام تنسور باشند. هنگامی که یک مدل داده‌ها را پردازش می‌کند، که به عنوان اجرای استنتاج شناخته می‌شود، نتایج پیش‌بینی را به صورت تنسورهای جدید تولید می‌کند و آنها را به برنامه اندروید منتقل می‌کند تا بتواند اقداماتی مانند نمایش نتیجه به کاربر یا اجرای منطق تجاری اضافی انجام دهد.

جریان اجرای تابعی برای مدل‌های LiteRT در برنامه‌های اندروید

شکل 1. جریان اجرای تابعی برای مدل‌های LiteRT در برنامه‌های اندروید.

در سطح طراحی عملکردی، برنامه اندروید شما برای اجرای یک مدل LiteRT به عناصر زیر نیاز دارد:

  • محیط زمان اجرای LiteRT برای اجرای مدل
  • مدل‌سازی ورودی برای تبدیل داده‌ها به تانسورها
  • کنترل‌کننده خروجی مدل برای دریافت تانسورهای نتیجه خروجی و تفسیر آنها به عنوان نتایج پیش‌بینی

بخش‌های بعدی توضیح می‌دهند که چگونه کتابخانه‌ها و ابزارهای LiteRT این عناصر کاربردی را ارائه می‌دهند.

ساخت اپلیکیشن با LiteRT

این بخش، رایج‌ترین و توصیه‌شده‌ترین مسیر برای پیاده‌سازی LiteRT در برنامه اندروید شما را شرح می‌دهد. شما باید بیشترین توجه را به بخش‌های محیط زمان اجرا و کتابخانه‌های توسعه داشته باشید. اگر یک مدل سفارشی توسعه داده‌اید، حتماً بخش مسیرهای توسعه پیشرفته را مرور کنید.

گزینه‌های محیط اجرا

چندین روش برای فعال کردن محیط زمان اجرا برای اجرای مدل‌ها در برنامه اندروید شما وجود دارد. اینها گزینه‌های ترجیحی هستند:

به طور کلی، شما باید از محیط زمان اجرای ارائه شده توسط سرویس‌های گوگل پلی استفاده کنید زیرا از نظر فضا نسبت به محیط استاندارد کارآمدتر است زیرا به صورت پویا بارگیری می‌شود و اندازه برنامه شما را کوچکتر نگه می‌دارد. سرویس‌های گوگل پلی همچنین به طور خودکار از جدیدترین و پایدارترین نسخه زمان اجرای LiteRT استفاده می‌کنند و به شما ویژگی‌های اضافی و عملکرد بهبود یافته را در طول زمان ارائه می‌دهند. اگر برنامه خود را در دستگاه‌هایی ارائه می‌دهید که شامل سرویس‌های گوگل پلی نیستند یا نیاز دارید که محیط زمان اجرای ML خود را از نزدیک مدیریت کنید، باید از زمان اجرای استاندارد LiteRT استفاده کنید. این گزینه کد اضافی را در برنامه شما قرار می‌دهد و به شما امکان می‌دهد کنترل بیشتری بر زمان اجرای ML در برنامه خود داشته باشید، البته با هزینه افزایش حجم دانلود برنامه.

شما با اضافه کردن کتابخانه‌های توسعه LiteRT به محیط توسعه برنامه خود، به این محیط‌های زمان اجرا در برنامه اندروید خود دسترسی پیدا می‌کنید. برای اطلاعات بیشتر در مورد نحوه استفاده از محیط‌های زمان اجرای استاندارد در برنامه خود، به بخش بعدی مراجعه کنید.

کتابخانه‌ها

شما می‌توانید با استفاده از سرویس‌های گوگل پلی به رابط برنامه‌نویسی کاربردی مفسر (Interpreter API) دسترسی پیدا کنید. می‌توانید از هسته و کتابخانه‌های پشتیبانی LiteRT در برنامه اندروید خود استفاده کنید. برای جزئیات برنامه‌نویسی در مورد استفاده از کتابخانه‌ها و محیط‌های زمان اجرا LiteRT، به ابزارهای توسعه برای اندروید مراجعه کنید.

دریافت مدل‌ها

اجرای یک مدل در یک برنامه اندروید نیاز به یک مدل با فرمت LiteRT دارد. می‌توانید از مدل‌های از پیش ساخته شده استفاده کنید یا یکی بسازید و آن را به فرمت Lite تبدیل کنید. برای اطلاعات بیشتر در مورد دریافت مدل‌ها برای برنامه اندروید خود، به صفحه مدل‌های LiteRT مراجعه کنید.

مدیریت داده‌های ورودی

هر داده‌ای که به یک مدل یادگیری ماشینی ارسال می‌کنید، باید یک تانسور با ساختار داده‌ای خاص باشد که اغلب به آن شکل تانسور می‌گویند. برای پردازش داده‌ها با یک مدل، کد برنامه شما باید داده‌ها را از قالب بومی خود، مانند تصویر، متن یا داده‌های صوتی، به یک تانسور با شکل مورد نیاز برای مدل شما تبدیل کند.

اجرای استنتاج‌ها

پردازش داده‌ها از طریق یک مدل برای تولید نتیجه پیش‌بینی، به عنوان اجرای استنتاج شناخته می‌شود. اجرای استنتاج در یک برنامه اندروید نیاز به یک محیط زمان اجرای LiteRT، یک مدل و داده‌های ورودی دارد.

سرعتی که یک مدل می‌تواند در یک دستگاه خاص استنتاج ایجاد کند، به اندازه داده‌های پردازش‌شده، پیچیدگی مدل و منابع محاسباتی موجود مانند حافظه و CPU یا پردازنده‌های تخصصی به نام شتاب‌دهنده‌ها بستگی دارد. مدل‌های یادگیری ماشین می‌توانند با استفاده از درایورهای سخت‌افزاری LiteRT به نام نمایندگان ، روی این پردازنده‌های تخصصی مانند واحدهای پردازش گرافیکی (GPU) و واحدهای پردازش تنسور (TPU) سریع‌تر اجرا شوند. برای اطلاعات بیشتر در مورد نمایندگان و شتاب سخت‌افزاری پردازش مدل، به نمای کلی شتاب سخت‌افزاری مراجعه کنید.

مدیریت نتایج خروجی

مدل‌ها نتایج پیش‌بینی را به صورت تانسور تولید می‌کنند که باید توسط برنامه اندروید شما با انجام اقدامات یا نمایش نتیجه به کاربر مدیریت شود. نتایج خروجی مدل می‌تواند به سادگی یک عدد مربوط به یک نتیجه واحد (0 = سگ، 1 = گربه، 2 = پرنده) برای طبقه‌بندی تصویر، تا نتایج بسیار پیچیده‌تر، مانند چندین کادر محصورکننده برای چندین شیء طبقه‌بندی شده در یک تصویر، با رتبه‌بندی اطمینان پیش‌بینی بین 0 و 1 باشد.

مسیرهای توسعه پیشرفته

هنگام استفاده از مدل‌های LiteRT پیچیده‌تر و سفارشی‌تر، ممکن است نیاز به استفاده از رویکردهای توسعه پیشرفته‌تری نسبت به آنچه در بالا توضیح داده شد، داشته باشید. بخش‌های زیر تکنیک‌های پیشرفته‌ای را برای اجرای مدل‌ها و توسعه آنها برای LiteRT در برنامه‌های اندروید شرح می‌دهند.

محیط‌های اجرایی پیشرفته

علاوه بر محیط‌های زمان اجرای استاندارد و سرویس‌های گوگل پلی برای LiteRT، محیط‌های زمان اجرای دیگری نیز وجود دارند که می‌توانید با برنامه اندروید خود از آنها استفاده کنید. محتمل‌ترین کاربرد این محیط‌ها زمانی است که یک مدل یادگیری ماشینی دارید که از عملیات یادگیری ماشینی استفاده می‌کند که توسط محیط زمان اجرای استاندارد LiteRT پشتیبانی نمی‌شوند.

زمان اجرای LiteRT Flex به شما امکان می‌دهد عملگرهای خاص مورد نیاز برای مدل خود را اضافه کنید. به عنوان یک گزینه پیشرفته برای اجرای مدل خود، می‌توانید LiteRT را برای اندروید بسازید تا عملگرها و سایر قابلیت‌های مورد نیاز برای اجرای مدل یادگیری ماشین TensorFlow شما را شامل شود. برای اطلاعات بیشتر، به Build LiteRT for Android مراجعه کنید.

رابط‌های برنامه‌نویسی کاربردی (API) زبان‌های C و C++

LiteRT همچنین یک API برای اجرای مدل‌ها با استفاده از C و C++ ارائه می‌دهد. اگر برنامه شما از Android NDK استفاده می‌کند، باید استفاده از این API را در نظر بگیرید. همچنین اگر می‌خواهید کد را بین چندین پلتفرم به اشتراک بگذارید، می‌توانید از این API استفاده کنید. برای اطلاعات بیشتر در مورد این گزینه توسعه، به صفحه ابزارهای توسعه مراجعه کنید.

اجرای مدل مبتنی بر سرور

به طور کلی، شما باید مدل‌های برنامه خود را روی یک دستگاه اندروید اجرا کنید تا از تأخیر کمتر و بهبود حریم خصوصی داده‌ها برای کاربران خود بهره‌مند شوید. با این حال، مواردی وجود دارد که اجرای یک مدل روی یک سرور ابری، خارج از دستگاه، راه حل بهتری است. به عنوان مثال، اگر یک مدل بزرگ دارید که به راحتی به اندازه‌ای که در دستگاه‌های اندروید کاربران شما جا شود، فشرده نمی‌شود یا نمی‌توان آن را با عملکرد معقولی در آن دستگاه‌ها اجرا کرد. این رویکرد همچنین می‌تواند راه حل ترجیحی شما باشد اگر عملکرد مداوم مدل در طیف وسیعی از دستگاه‌ها از اولویت بالایی برخوردار باشد.

گوگل کلود (Google Cloud) مجموعه‌ای کامل از خدمات را برای اجرای مدل‌های هوش مصنوعی ارائه می‌دهد. برای اطلاعات بیشتر، به صفحه محصولات هوش مصنوعی و یادگیری ماشینی گوگل کلود مراجعه کنید.

توسعه و بهینه‌سازی مدل سفارشی

مسیرهای توسعه پیشرفته‌تر احتمالاً شامل توسعه مدل‌های یادگیری ماشین سفارشی و بهینه‌سازی آن مدل‌ها برای استفاده در دستگاه‌های اندروید خواهد بود. اگر قصد ساخت مدل‌های سفارشی را دارید، حتماً اعمال تکنیک‌های کوانتیزاسیون را در مدل‌ها برای کاهش هزینه‌های حافظه و پردازش در نظر بگیرید. برای اطلاعات بیشتر در مورد نحوه ساخت مدل‌های با کارایی بالا برای استفاده با LiteRT، به بهترین شیوه‌های عملکرد در بخش مدل‌ها مراجعه کنید.

نسخه‌های اندروید پشتیبانی‌شده

نسخه LiteRT وضعیت حداقل سطح SDK حداقل نسخه NDK (در صورت استفاده) تاریخ انتشار
v1.2.0 ⚠️ منسوخ شده 21 (اندروید ۵ لالی‌پاپ) r26a ۲۰۲۵-۰۳-۱۳
v1.3.0 ⚠️ منسوخ شده 21 (اندروید ۵ لالی‌پاپ) r26a ۲۰۲۵-۰۵-۱۹
v1.4.0 ⚠️ منسوخ شده 26 (اندروید ۸ اوریو) r26a ۲۰۲۵-۰۶-۲۵
v1.4.1 ✅ فعال 21 (اندروید ۵ لالی‌پاپ) r26a ۲۰۲۵-۱۱-۰۷
v2.0.3 ✅ فعال 26 (اندروید ۸ اوریو) r26a ۲۰۲۵-۱۱-۰۸
v2.1.0 آینده 23 (اندروید ۶ مارشمالو) r26a هنوز منتشر نشده

مهم: وابستگی‌های خود را به‌روز نگه دارید تا از سازگاری با جدیدترین ویژگی‌ها و به‌روزرسانی‌های امنیتی اطمینان حاصل شود.

API مدل کامپایل‌شده در مقابل API مفسر

  • API مدل کامپایل‌شده - اجرای کامپایل‌شده AOT/JIT با اولویت شتاب‌دهنده و بافر یکپارچه و خطوط لوله ناهمزمان.
  • رابط برنامه‌نویسی کاربردی مفسر - سازگار با کدهای موجود به سبک TensorFlow Lite.

شما می‌توانید در زمان اجرا هر یک از APIها را انتخاب کنید؛ اکثر ویژگی‌های جدید عملکرد و شتاب‌دهنده در API مدل کامپایل‌شده قرار می‌گیرند.

برای مثال پیاده‌سازی‌ها، ببینید:

مشترک و پردازنده

ویژگی زمان اجرا رابط برنامه‌نویسی مفسر API مدل کامپایل شده
پروفایل سازی
خبرنگار خطا
تعامل بافر ورودی/خروجی (TensorBuffer/Environment) --
انتخاب شتاب‌دهنده آماده تحویل --
همگام‌سازی اجرایی
عملیات سفارشی
پیکربندی XNNPACK
شکل پویا

پردازنده گرافیکی

ویژگی زمان اجرا رابط برنامه‌نویسی مفسر API مدل کامپایل شده
همگام‌سازی اجرایی
ذخیره سازی حافظه
جایگزینی CPU
اجرای ناهمگام --
بافر بدون کپی (AHWB/GLBuffer/Texture) --
بک‌اند MLD OpenCL
بک‌اند MLD WebGPU (جدید) --
پایه فلزی MLD (جدید) --

ان پی یو

ویژگی زمان اجرا رابط برنامه‌نویسی مفسر API مدل کامپایل شده
همگام‌سازی اجرایی
اجرای ناهمگام (پیکسل) --
جایگزینی CPU
جایگزینی برای پردازنده گرافیکی --
کپی صفر بافر (AHWB) --
کنترل کیفیت/MTK AOT --
پیکسل AOT --
کنترل کیفیت/MTK/پیکسل JIT --

شروع سریع (API مدل کامپایل شده)

اجرای استنتاج با رابط برنامه‌نویسی کاربردی مدل کامپایل‌شده شامل مراحل کلیدی زیر است:

  1. یک مدل سازگار را بارگذاری کنید.
  2. بافرهای تانسور ورودی و خروجی را اختصاص دهید.
  3. مدل کامپایل شده را فراخوانی کنید.
  4. استنتاج‌ها را در یک بافر خروجی بخوانید.

قطعه کدهای زیر پیاده‌سازی اولیه‌ی کل فرآیند را در کاتلین و سی‌پلاس‌پلاس نشان می‌دهند.

سی++

// Load model and initialize runtime
LITERT_ASSIGN_OR_RETURN(auto model, Model::CreateFromFile("mymodel.tflite"));
LITERT_ASSIGN_OR_RETURN(auto env, Environment::Create({}));
LITERT_ASSIGN_OR_RETURN(auto compiled_model,
    CompiledModel::Create(env, model, kLiteRtHwAcceleratorCpu));

// Preallocate input/output buffers
LITERT_ASSIGN_OR_RETURN(auto input_buffers, compiled_model.CreateInputBuffers());
LITERT_ASSIGN_OR_RETURN(auto output_buffers, compiled_model.CreateOutputBuffers());

// Fill the first input
float input_values[] = { /* your data */ };
input_buffers[0].Write<float>(absl::MakeConstSpan(input_values, /*size*/));

// Invoke
compiled_model.Run(input_buffers, output_buffers);

// Read the output
std::vector<float> data(output_data_size);
output_buffers[0].Read<float>(absl::MakeSpan(data));

کاتلین

// Load model and initialize runtime
val  model =
    CompiledModel.create(
        context.assets,
        "mymodel.tflite",
        CompiledModel.Options(Accelerator.CPU)
    )

// Preallocate input/output buffers
val inputBuffers = model.createInputBuffers()
val outputBuffers = model.createOutputBuffers()

// Fill the first input
inputBuffers[0].writeFloat(FloatArray(data_size) { data_value /* your data */ })

// Invoke
model.run(inputBuffers, outputBuffers)

// Read the output
val outputFloatArray = outputBuffers[0].readFloat()

برای اطلاعات بیشتر، به راهنماهای « شروع با کاتلین» و «شروع با سی پلاس پلاس» مراجعه کنید.

قابلیت‌های کلیدی (API مدل کامپایل‌شده)

  • انتخاب شتاب‌دهنده آماده و ناهمگام - CPU/GPU/NPU را در زمان ایجاد انتخاب کنید و بدون نیاز به تخصیص منابع، ناهمگام اجرا کنید.
  • بافرهای یکپارچه بدون کپی - بافرهای AHWB/GL/OpenCL/WebGPU/Metal را در مراحل پیش/پس پردازش و استنتاج به اشتراک بگذارید.
  • توان عملیاتی آماده برای تولید - بهینه شده برای مدل‌های بزرگ با حافظه پنهان و پشتیبانی از GPU/NPU.

رابط برنامه‌نویسی مفسر همچنان مسیر سازگاری برای کدهای موجود TensorFlow Lite است؛ از آن زمانی استفاده کنید که به رفتار نماینده پایدار یا پوشش‌دهنده‌های شخص ثالثی نیاز دارید که مفسر کلاسیک را انتظار دارند.

شتاب‌دهنده‌ها

  • پردازنده مرکزی (پیش‌فرض): بهینه‌سازی شده برای XNNPACK، پشتیبانی از اشکال پویا.
  • پردازنده گرافیکی: امروزه بک‌اند OpenCL؛ بک‌اندهای WebGPU و Metal از طریق Compiled Model API در دسترس هستند.
  • NPU: Qualcomm AI Engine Direct و MediaTek NeuroPilot برای AOT/JIT پشتیبانی می‌شوند؛ Pixel AOT نیز در دسترس است؛ پشتیبانی از NPU اپل/اینتل نیز برنامه‌ریزی شده است.

چه زمانی یک API انتخاب کنیم؟

  • وقتی می‌خواهید سریع‌ترین مسیر را به GPU/NPU، بافرهای بدون کپی یا اجرای ناهمگام داشته باشید، از رابط برنامه‌نویسی کاربردی مدل کامپایل‌شده استفاده کنید .
  • وقتی به حداکثر سازگاری با کد، ابزارها یا نمایندگان موجود TensorFlow Lite نیاز دارید، از API مفسر استفاده کنید .