ابزارهای بنچمارک LiteRT آمار مربوط به معیارهای عملکرد مهم زیر را اندازهگیری و محاسبه میکنند:
- زمان اولیه سازی
- زمان استنتاج حالت گرم شدن
- زمان استنتاج حالت پایدار
- استفاده از حافظه در زمان مقداردهی اولیه
- استفاده کلی از حافظه
ابزارهای بنچمارک به صورت برنامههای بنچمارک برای اندروید و iOS و همچنین به صورت فایلهای باینری خط فرمان از پیش ساخته شده در دسترس هستند و همه آنها منطق اندازهگیری عملکرد اصلی یکسانی را به اشتراک میگذارند. توجه داشته باشید که گزینههای موجود و فرمتهای خروجی به دلیل تفاوت در محیط زمان اجرا، کمی متفاوت هستند.
برنامه بنچمارک اندروید
یک برنامهی بنچمارک اندروید مبتنی بر API مفسر نسخه ۱ نیز ارائه شده است. این ابزار، معیار بهتری برای سنجش عملکرد مدل در یک برنامهی اندروید است. اعداد حاصل از ابزار بنچمارک، همچنان کمی با زمانی که استنتاج با مدل در برنامهی واقعی اجرا میشود، متفاوت خواهند بود.
این برنامه بنچمارک اندروید هیچ رابط کاربری ندارد. آن را با استفاده از دستور adb نصب و اجرا کنید و با استفاده از دستور adb logcat نتایج را بازیابی کنید.
برنامه را دانلود یا بسازید
برنامههای بنچمارک اندروید از پیش ساخته شده Nightly را با استفاده از لینکهای زیر دانلود کنید:
برای برنامههای بنچمارک اندروید که از عملیات TF از طریق Flex delegate پشتیبانی میکنند، از لینکهای زیر استفاده کنید:
همچنین میتوانید با دنبال کردن این دستورالعملها، برنامه را از منبع (source) بسازید.
تهیه بنچمارک
قبل از اجرای برنامه بنچمارک، برنامه را نصب کنید و فایل مدل را به صورت زیر به دستگاه منتقل کنید:
adb install -r -d -g android_aarch64_benchmark_model.apk
adb push your_model.tflite /data/local/tmp
اجرای بنچمارک
adb shell am start -S \
-n org.tensorflow.lite.benchmark/.BenchmarkModelActivity \
--es args '"--graph=/data/local/tmp/your_model.tflite \
--num_threads=4"'
graph یک پارامتر الزامی است.
-
graph:string
مسیر فایل مدل TFLite.
شما میتوانید پارامترهای اختیاری بیشتری را برای اجرای بنچمارک مشخص کنید.
-
num_threads:int(پیشفرض=۱)
تعداد نخهایی که برای اجرای مفسر TFLite استفاده میشوند. -
use_gpu:boolپیشفرض (bool)
از نماینده GPU استفاده کنید. -
use_xnnpack:bool(پیشفرض =false)
از نماینده XNNPACK استفاده کنید.
بسته به دستگاهی که استفاده میکنید، ممکن است برخی از این گزینهها در دسترس نباشند یا هیچ تاثیری نداشته باشند. برای پارامترهای عملکردی بیشتری که میتوانید با برنامه بنچمارک اجرا کنید، به پارامترها مراجعه کنید.
نتایج را با استفاده از دستور logcat مشاهده کنید:
adb logcat | grep "Inference timings"
نتایج بنچمارک به شرح زیر گزارش شده است:
... tflite : Inference timings in us: Init: 5685, First inference: 18535, Warmup (avg): 14462.3, Inference (avg): 14575.2
برنامه بنچمارک iOS
برای اجرای بنچمارکها روی دستگاه iOS، باید برنامه را از منبع بسازید. فایل مدل LiteRT را در دایرکتوری benchmark_data از درخت منبع قرار دهید و فایل benchmark_params.json را تغییر دهید. این فایلها در برنامه بستهبندی میشوند و برنامه دادهها را از دایرکتوری میخواند. برای دستورالعملهای دقیق، به برنامه بنچمارک iOS مراجعه کنید.
معیارهای عملکرد برای مدلهای شناختهشده
این بخش، معیارهای عملکرد LiteRT را هنگام اجرای مدلهای شناختهشده در برخی از دستگاههای اندروید و iOS فهرست میکند.
بنچمارکهای عملکرد اندروید
این اعداد معیار عملکرد با استفاده از فایل باینری معیار بومی تولید شدهاند.
برای بنچمارکهای اندروید، میزان وابستگی پردازنده به گونهای تنظیم شده است که از هستههای بزرگ روی دستگاه استفاده کند تا واریانس کاهش یابد ( جزئیات را ببینید).
فرض بر این است که مدلها دانلود و در دایرکتوری /data/local/tmp/tflite_models از حالت فشرده خارج شدهاند. فایل باینری معیار با استفاده از این دستورالعملها ساخته شده و فرض بر این است که در دایرکتوری /data/local/tmp قرار دارد.
برای اجرای بنچمارک:
adb shell /data/local/tmp/benchmark_model \
--num_threads=4 \
--graph=/data/local/tmp/tflite_models/${GRAPH} \
--warmup_runs=1 \
--num_runs=50
برای اجرا با نماینده GPU، --use_gpu=true را تنظیم کنید.
مقادیر عملکرد زیر در اندروید ۱۰ اندازهگیری شدهاند.
| نام مدل | دستگاه | پردازنده، ۴ رشته | پردازنده گرافیکی |
|---|---|---|---|
| Mobilenet_1.0_224 (شناور) | پیکسل ۳ | ۲۳.۹ میلیثانیه | ۶.۴۵ میلیثانیه |
| پیکسل ۴ | ۱۴.۰ میلیثانیه | ۹.۰ میلیثانیه | |
| Mobilenet_1.0_224 (کمی) | پیکسل ۳ | ۱۳.۴ میلیثانیه | --- |
| پیکسل ۴ | ۵.۰ میلیثانیه | --- | |
| موبایل NASNet | پیکسل ۳ | ۵۶ میلیثانیه | --- |
| پیکسل ۴ | ۳۴.۵ میلیثانیه | --- | |
| اسکوئیزنت | پیکسل ۳ | ۳۵.۸ میلیثانیه | ۹.۵ میلیثانیه |
| پیکسل ۴ | ۲۳.۹ میلیثانیه | ۱۱.۱ میلیثانیه | |
| Inception_ResNet_V2 | پیکسل ۳ | ۴۲۲ میلیثانیه | ۹۹.۸ میلیثانیه |
| پیکسل ۴ | ۲۷۲.۶ میلیثانیه | ۸۷.۲ میلیثانیه | |
| اینسپشن_وی۴ | پیکسل ۳ | ۴۸۶ میلیثانیه | ۹۳ میلیثانیه |
| پیکسل ۴ | ۳۲۴.۱ میلیثانیه | ۹۷.۶ میلیثانیه |
بنچمارکهای عملکرد iOS
این اعداد بنچمارک عملکرد با برنامه بنچمارک iOS تولید شدهاند.
برای اجرای بنچمارکهای iOS، برنامه بنچمارک اصلاح شد تا مدل مناسب را در بر بگیرد و benchmark_params.json طوری اصلاح شد که num_threads روی ۲ تنظیم کند. برای استفاده از نماینده GPU، گزینههای "use_gpu" : "1" و "gpu_wait_type" : "aggressive" نیز به benchmark_params.json اضافه شدند.
| نام مدل | دستگاه | پردازنده، ۲ رشته پردازشی | پردازنده گرافیکی |
|---|---|---|---|
| Mobilenet_1.0_224 (شناور) | آیفون ایکس اس | ۱۴.۸ میلیثانیه | ۳.۴ میلیثانیه |
| Mobilenet_1.0_224 (کمی) | آیفون ایکس اس | ۱۱ میلیثانیه | --- |
| موبایل NASNet | آیفون ایکس اس | ۳۰.۴ میلیثانیه | --- |
| اسکوئیزنت | آیفون ایکس اس | ۲۱.۱ میلیثانیه | ۱۵.۵ میلیثانیه |
| Inception_ResNet_V2 | آیفون ایکس اس | ۲۶۱.۱ میلیثانیه | ۴۵.۷ میلیثانیه |
| اینسپشن_وی۴ | آیفون ایکس اس | ۳۰۹ میلیثانیه | ۵۴.۴ میلیثانیه |
قطعات داخلی Trace LiteRT
ردیابی داخلی LiteRT در اندروید
رویدادهای داخلی از مفسر LiteRT یک برنامه اندروید میتوانند توسط ابزارهای ردیابی اندروید ثبت شوند. این رویدادها همان رویدادهایی هستند که در Android Trace API نیز وجود دارند، بنابراین رویدادهای ثبت شده از کد جاوا/کاتلین همراه با رویدادهای داخلی LiteRT مشاهده میشوند.
چند نمونه از رویدادها عبارتند از:
- فراخوانی عملگر
- اصلاح گراف توسط نماینده
- تخصیص تانسوری
در میان گزینههای مختلف برای ثبت ردپاها، این راهنما به Android Studio CPU Profiler و برنامه System Tracing میپردازد. برای گزینههای دیگر به ابزار خط فرمان Perfetto یا ابزار خط فرمان Systrace مراجعه کنید.
افزودن رویدادهای ردیابی در کد جاوا
این یک قطعه کد از برنامه نمونه طبقهبندی تصویر است. مفسر LiteRT در بخش recognizeImage/runInference اجرا میشود. این مرحله اختیاری است، اما برای کمک به تشخیص محل فراخوانی استنتاج مفید است.
Trace.beginSection("recognizeImage");
...
// Runs the inference call.
Trace.beginSection("runInference");
tflite.run(inputImageBuffer.getBuffer(), outputProbabilityBuffer.getBuffer().rewind());
Trace.endSection();
...
Trace.endSection();
فعال کردن ردیابی LiteRT
برای فعال کردن ردیابی LiteRT، قبل از شروع برنامه اندروید، ویژگی سیستمی اندروید debug.tflite.trace روی ۱ تنظیم کنید.
adb shell setprop debug.tflite.trace 1
اگر این ویژگی هنگام مقداردهی اولیه مفسر LiteRT تنظیم شده باشد، رویدادهای کلیدی (مثلاً فراخوانی عملگر) از مفسر ردیابی میشوند.
پس از اینکه تمام ردپاها را ثبت کردید، با تنظیم مقدار ویژگی روی ۰، ردیابی را غیرفعال کنید.
adb shell setprop debug.tflite.trace 0
ابزار پروفایل پردازنده اندروید استودیو
با دنبال کردن مراحل زیر، ردپاها را با استفاده از Android Studio CPU Profiler ضبط کنید:
از منوی بالا، گزینهی «اجرا» > «برنامهی پروفایل» را انتخاب کنید.
وقتی پنجره Profiler ظاهر شد، روی هر قسمتی از جدول زمانی CPU کلیک کنید.
از بین حالتهای پروفایلینگ CPU، گزینه «ردیابی تماسهای سیستمی» را انتخاب کنید.

دکمه «ضبط» را فشار دهید.
دکمه «توقف» را فشار دهید.
نتیجه ردیابی را بررسی کنید.

در این مثال، میتوانید سلسله مراتب رویدادها در یک نخ و آمار مربوط به هر زمان اپراتور و همچنین جریان داده کل برنامه را بین نخها مشاهده کنید.
برنامه ردیابی سیستم
با دنبال کردن مراحل شرح داده شده در برنامه System Tracing، بدون نیاز به اندروید استودیو، ردپاها را ثبت کنید.
در این مثال، رویدادهای TFLite یکسانی ضبط و بسته به نسخه دستگاه اندروید، با فرمت Perfetto یا Systrace ذخیره شدند. فایلهای ردیابی ضبطشده را میتوان در رابط کاربری Perfetto باز کرد.

ردیابی داخلی LiteRT در iOS
رویدادهای داخلی از مفسر LiteRT یک برنامه iOS را میتوان توسط ابزار Instruments که در Xcode موجود است، ثبت کرد. این رویدادها، رویدادهای راهنمای iOS هستند، بنابراین رویدادهای ثبت شده از کد Swift/Objective-C همراه با رویدادهای داخلی LiteRT دیده میشوند.
چند نمونه از رویدادها عبارتند از:
- فراخوانی عملگر
- اصلاح گراف توسط نماینده
- تخصیص تانسوری
فعال کردن ردیابی LiteRT
متغیر محیطی debug.tflite.trace با دنبال کردن مراحل زیر تنظیم کنید:
از منوی بالای Xcode، مسیر Product > Scheme > Edit Scheme... را انتخاب کنید.
در پنل سمت چپ، روی «پروفایل» کلیک کنید.
کادر انتخاب «استفاده از آرگومانها و متغیرهای محیطیِ اجرای اکشن» را از حالت انتخاب خارج کنید.
debug.tflite.traceدر بخش «متغیرهای محیطی» اضافه کنید.
اگر میخواهید رویدادهای LiteRT را هنگام پروفایل کردن برنامه iOS حذف کنید، ردیابی را با حذف متغیر محیطی غیرفعال کنید.
ابزارهای XCode
با دنبال کردن مراحل زیر، ردپاها را ثبت کنید:
از منوی بالای Xcode، گزینه Product > Profile را انتخاب کنید.
هنگام اجرای ابزار Instruments، از میان الگوهای پروفایلینگ ، روی Logging کلیک کنید.
دکمه «شروع» را فشار دهید.
دکمه «توقف» را فشار دهید.
برای گسترش موارد زیرسیستم ثبت وقایع سیستم عامل، روی «os_signpost» کلیک کنید.
روی زیرسیستم ثبت وقایع سیستم عامل «org.tensorflow.lite» کلیک کنید.
نتیجه ردیابی را بررسی کنید.

در این مثال، میتوانید سلسله مراتب رویدادها و آمار را برای هر زمان اپراتور مشاهده کنید.
استفاده از دادههای ردیابی
دادههای ردیابی به شما امکان میدهد تنگناهای عملکرد را شناسایی کنید.
در اینجا چند نمونه از بینشهایی که میتوانید از پروفایلر و راهحلهای بالقوه برای بهبود عملکرد دریافت کنید، آورده شده است:
- اگر تعداد هستههای CPU موجود کمتر از تعداد رشتههای استنتاج باشد، سربار زمانبندی CPU میتواند منجر به عملکرد پایینتر از حد متوسط شود. میتوانید سایر وظایف فشرده CPU را در برنامه خود مجدداً زمانبندی کنید تا از همپوشانی با استنتاج مدل خود جلوگیری کنید یا تعداد رشتههای مفسر را تنظیم کنید.
- اگر عملگرها به طور کامل واگذار نشده باشند، برخی از بخشهای نمودار مدل به جای شتابدهنده سختافزاری مورد انتظار، روی CPU اجرا میشوند. میتوانید عملگرهای پشتیبانی نشده را با عملگرهای پشتیبانی شده مشابه جایگزین کنید.