تقيس أدوات قياس الأداء في LiteRT وتحسب إحصاءات لمقاييس الأداء المهمة التالية:
- وقت الإعداد
- وقت الاستنتاج في حالة الإحماء
- وقت الاستنتاج في الحالة الثابتة
- استخدام الذاكرة أثناء وقت الإعداد
- الاستخدام العام للذاكرة
تتوفّر أدوات قياس الأداء كالتطبيقات المرجعية لنظامَي التشغيل Android وiOS، وكملفات ثنائية مُنشأة مسبقًا لسطر الأوامر، وتتشارك جميعها منطق قياس الأداء الأساسي نفسه. يُرجى العِلم أنّ الخيارات المتاحة وتنسيقات الإخراج تختلف قليلاً بسبب الاختلافات في بيئة وقت التشغيل.
تطبيق قياس الأداء على Android
يتم أيضًا توفير تطبيق قياس أداء Android استنادًا إلى الإصدار 1 من Interpreter API. ويُعدّ هذا مقياسًا أفضل للأداء الذي سيحقّقه النموذج في تطبيق Android، مع العلم أنّ الأرقام التي تقدّمها أداة قياس الأداء ستظل تختلف قليلاً عن الأرقام التي يتم الحصول عليها عند تنفيذ الاستدلال باستخدام النموذج في التطبيق الفعلي.
لا يحتوي تطبيق قياس الأداء على Android هذا على واجهة مستخدم. ثبِّت الأداة وشغِّلها باستخدام الأمر adb
واستردّ النتائج باستخدام الأمر adb logcat.
تنزيل التطبيق أو إنشاؤه
يمكنك تنزيل تطبيقات قياس الأداء المسبقة الإنشاء لنظام Android باستخدام الروابط التالية:
بالنسبة إلى تطبيقات قياس الأداء على Android التي تتوافق مع عمليات TensorFlow من خلال Flex delegate، استخدِم الروابط أدناه:
يمكنك أيضًا إنشاء التطبيق من المصدر باتّباع هذه التعليمات.
إعداد مقياس الأداء
قبل تشغيل تطبيق قياس الأداء، ثبِّت التطبيق وادفع ملف النموذج إلى الجهاز على النحو التالي:
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(القيمة التلقائية=1)
عدد سلاسل المحادثات التي سيتم استخدامها لتشغيل مترجم TFLite.use_gpu:bool(القيمة التلقائية هي false)
يتم استخدام مفوّض وحدة معالجة الرسومات.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 عند تشغيل نماذج معروفة على بعض أجهزة Android وiOS.
مقاييس أداء Android
تم إنشاء أرقام مقياس الأداء هذه باستخدام برنامج المقارنة المعيارية الأصلي الثنائي.
بالنسبة إلى مقاييس الأداء على Android، يتم ضبط تقارب وحدة المعالجة المركزية لاستخدام النوى الكبيرة على الجهاز للحد من التباين (راجِع التفاصيل).
يفترض هذا البرنامج النصي أنّه تم تنزيل النماذج وفك ضغطها في الدليل /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
للتشغيل باستخدام وحدة معالجة الرسومات، اضبط --use_gpu=true.
يتم قياس قيم الأداء أدناه على نظام التشغيل Android 10.
| اسم النموذج | الجهاز | وحدة معالجة مركزية (CPU) بها 4 سلاسل محادثات | وحدة معالجة الرسومات |
|---|---|---|---|
| Mobilenet_1.0_224(float) | Pixel 3 | 23.9 ملي ثانية | 6.45 ملي ثانية |
| Pixel 4 | 14.0 ملي ثانية | 9.0 ملي ثانية | |
| Mobilenet_1.0_224 (quant) | Pixel 3 | 13.4 ملي ثانية | --- |
| Pixel 4 | 5.0 ملي ثانية | --- | |
| NASNet mobile | Pixel 3 | 56 ملي ثانية | --- |
| Pixel 4 | 34.5 ملي ثانية | --- | |
| SqueezeNet | Pixel 3 | 35.8 ملي ثانية | 9.5 ملي ثانية |
| Pixel 4 | 23.9 ملي ثانية | 11.1 ملي ثانية | |
| Inception_ResNet_V2 | Pixel 3 | 422 ملي ثانية | 99.8 ملي ثانية |
| Pixel 4 | 272.6 ملي ثانية | 87.2 ملي ثانية | |
| Inception_V4 | Pixel 3 | 486 ملي ثانية | 93 ملي ثانية |
| Pixel 4 | 324.1 ملي ثانية | 97.6 ملي ثانية |
مقاييس الأداء على أجهزة iOS
تم إنشاء أرقام مقياس الأداء هذه باستخدام تطبيق مقياس الأداء على iOS.
لتنفيذ اختبارات الأداء على أجهزة iOS، تم تعديل تطبيق اختبار الأداء ليشمل الطراز المناسب، وتم تعديل benchmark_params.json لضبط num_threads على 2. لاستخدام المفوّض الخاص بوحدة معالجة الرسومات، تمت إضافة الخيارَين "use_gpu" : "1" و"gpu_wait_type" : "aggressive" إلى benchmark_params.json أيضًا.
| اسم النموذج | الجهاز | وحدة معالجة مركزية (CPU) بها سلسلتا محادثات | وحدة معالجة الرسومات |
|---|---|---|---|
| Mobilenet_1.0_224(float) | iPhone XS | 14.8 ملي ثانية | 3.4 ملي ثانية |
| Mobilenet_1.0_224 (quant) | iPhone XS | 11 ملي ثانية | --- |
| NASNet mobile | iPhone XS | 30.4 ملي ثانية | --- |
| SqueezeNet | iPhone XS | 21.1 ملي ثانية | 15.5 ملي ثانية |
| Inception_ResNet_V2 | iPhone XS | 261.1 ملي ثانية | 45.7 ملي ثانية |
| Inception_V4 | iPhone XS | 309 ملي ثانية | 54.4 ملي ثانية |
التفاصيل الداخلية لـ Trace LiteRT
تتبُّع الأجزاء الداخلية من LiteRT في Android
يمكن لأدوات تتبُّع Android تسجيل الأحداث الداخلية من مفسّر LiteRT لتطبيق Android. وهي الأحداث نفسها التي يتم تسجيلها باستخدام واجهة برمجة التطبيقات Trace في Android، لذا تظهر الأحداث التي تم تسجيلها من رمز Java/Kotlin معًا مع الأحداث الداخلية في LiteRT.
في ما يلي بعض الأمثلة على الأحداث:
- استدعاء المشغّل
- تعديل الرسم البياني من قِبل مستخدم مفوَّض
- تخصيص المتّجه
من بين الخيارات المختلفة لتسجيل عمليات التتبُّع، يغطّي هذا الدليل أداة "محلّل استخدام وحدة المعالجة المركزية" في Android Studio وتطبيق "تتبُّع النظام". يُرجى الرجوع إلى أداة Perfetto لسطر الأوامر أو أداة Systrace لسطر الأوامر للاطّلاع على خيارات أخرى.
إضافة أحداث التتبُّع في رمز Java
هذا مقتطف رمز من تطبيق
تصنيف الصور
المثالي. يتم تشغيل مترجم 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، اضبط سمة نظام Android
debug.tflite.trace على 1 قبل بدء تطبيق Android.
adb shell setprop debug.tflite.trace 1
إذا تم ضبط هذه السمة عند تهيئة برنامج LiteRT، سيتم تتبُّع الأحداث الرئيسية (مثل استدعاء المشغّل) من البرنامج.
بعد تسجيل جميع عمليات التتبُّع، أوقِف التتبُّع من خلال ضبط قيمة السمة على 0.
adb shell setprop debug.tflite.trace 0
محلّل وحدة المعالجة المركزية (CPU) في "استوديو Android"
يمكنك تسجيل عمليات التتبُّع باستخدام أداة تحليل وحدة المعالجة المركزية في "استوديو Android" من خلال اتّباع الخطوات التالية:
انقر على تشغيل (Run) > إنشاء ملف شخصي للتطبيق (Profile 'app') من القوائم العلوية.
انقر في أي مكان في المخطط الزمني لوحدة المعالجة المركزية (CPU) عند ظهور نافذة Profiler.
اختَر "تتبُّع طلبات النظام" من بين أوضاع "تحليل أداء وحدة المعالجة المركزية".

اضغط على زر "تسجيل".
اضغط على زر "إيقاف".
تحقَّق من نتيجة التتبُّع.

في هذا المثال، يمكنك الاطّلاع على التسلسل الهرمي للأحداث في سلسلة محادثات والإحصاءات الخاصة بوقت كل عملية، كما يمكنك الاطّلاع على تدفّق البيانات للتطبيق بأكمله بين سلاسل المحادثات.
تطبيق "تتبُّع النظام"
يمكنك تسجيل عمليات التتبُّع بدون "استوديو Android" باتّباع الخطوات الموضّحة بالتفصيل في تطبيق "تتبُّع النظام".
في هذا المثال، تم تسجيل أحداث TFLite نفسها وحفظها بتنسيق Perfetto أو Systrace استنادًا إلى إصدار جهاز Android. يمكن فتح ملفات التتبُّع التي تم تسجيلها في واجهة مستخدم Perfetto.

تتبُّع الأجزاء الداخلية من Trace LiteRT في iOS
يمكن تسجيل الأحداث الداخلية من برنامج LiteRT لتفسير تطبيقات iOS باستخدام أداة Instruments المضمّنة في Xcode. وهي أحداث signpost في نظام التشغيل iOS، لذا تظهر الأحداث التي تم تسجيلها من رمز Swift/Objective-C معًا مع الأحداث الداخلية في LiteRT.
في ما يلي بعض الأمثلة على الأحداث:
- استدعاء المشغّل
- تعديل الرسم البياني من قِبل مستخدم مفوَّض
- تخصيص المتّجه
تفعيل تتبُّع LiteRT
اضبط متغيّر البيئة debug.tflite.trace باتّباع الخطوات التالية:
انقر على المنتج (Product) > المخطّط (Scheme) > تعديل المخطّط… (Edit Scheme…) من القوائم العلوية في Xcode.
انقر على "الملف الشخصي" في اللوحة اليمنى.
ألغِ تحديد مربّع الاختيار "استخدام وسيطات إجراء التشغيل ومتغيّرات البيئة".
أضِف
debug.tflite.traceضمن قسم "متغيّرات البيئة".
إذا كنت تريد استبعاد أحداث LiteRT عند إنشاء ملف تعريف لتطبيق iOS، عليك إيقاف التتبُّع من خلال إزالة متغيّر البيئة.
XCode Instruments
يمكنك تسجيل عمليات التتبُّع باتّباع الخطوات التالية:
انقر على المنتج (Product) > الملف الشخصي (Profile) من القوائم العلوية في Xcode.
انقر على تسجيل البيانات ضمن نماذج إنشاء الملفات الشخصية عند تشغيل أداة Instruments.
اضغط على زر "بدء".
اضغط على زر "إيقاف".
انقر على os_signpost لتوسيع عناصر نظام التسجيل الفرعي لنظام التشغيل.
انقر على نظام التسجيل الفرعي لنظام التشغيل "org.tensorflow.lite".
تحقَّق من نتيجة التتبُّع.

في هذا المثال، يمكنك الاطّلاع على التسلسل الهرمي للأحداث والإحصاءات الخاصة بكل وقت تشغيل.
استخدام بيانات التتبُّع
تتيح لك بيانات التتبُّع تحديد المؤثّرات السلبية في الأداء.
في ما يلي بعض الأمثلة على الإحصاءات التي يمكنك الحصول عليها من أداة Profiler والحلول المحتملة لتحسين الأداء:
- إذا كان عدد أنوية وحدة المعالجة المركزية المتاحة أقل من عدد سلاسل استنتاج البيانات، قد يؤدي عبء جدولة وحدة المعالجة المركزية إلى أداء دون المستوى المطلوب. يمكنك إعادة جدولة المهام الأخرى التي تستهلك الكثير من وحدة المعالجة المركزية في تطبيقك لتجنُّب تداخلها مع استنتاج النموذج أو تعديل عدد سلاسل تنفيذ المترجم.
- إذا لم يتم تفويض المشغّلين بالكامل، سيتم تنفيذ بعض أجزاء الرسم البياني للنموذج على وحدة المعالجة المركزية بدلاً من مسرّع الأجهزة المتوقّع. يمكنك استبدال عوامل التشغيل غير المتوافقة بعوامل تشغيل متوافقة مشابهة.