أدوات قياس الأداء
تقيس أدوات قياس LiteRT حاليًا إحصاءات وتحسب مقاييس الأداء المهمة التالية:
- وقت الإعداد
- وقت استنتاج حالة الإحماء
- استنتاج وقت الحالة الثابتة
- استخدام الذاكرة أثناء وقت الإعداد
- الاستخدام العام للذاكرة
تتوفر أدوات قياس الأداء كتطبيقات لقياس الأداء لنظامَي التشغيل Android وiOS برامج ثنائية أصلية لسطر الأوامر، وتشترك جميعًا في نفس الأداء الأساسي ومنطق القياس. لاحظ أن الخيارات وتنسيقات الإخراج المتاحة مختلفة قليلاً بسبب الاختلافات في بيئة التشغيل.
تطبيق Android لقياس الأداء
هناك خياران لاستخدام أداة قياس الأداء مع Android. الأول هو برنامج الثنائي لمقياس الأداء الأصلي، والآخر عبارة عن نظام Android مقياس أداء، وهو مقياس أفضل لمستوى أداء النموذج في التطبيق. أيّ منهما اختلافًا طفيفًا في الأرقام الواردة في أداة قياس الأداء إجراء الاستنتاج باستخدام النموذج الفعلي في التطبيق.
لا يتضمّن تطبيق Android لقياس الأداء هذا واجهة مستخدم. يمكنك تثبيته وتشغيله باستخدام adb
واسترجاع النتائج باستخدام الأمر adb logcat
.
تنزيل التطبيق أو إنشائه
يمكنك تنزيل تطبيقات Android لقياس الأداء ليلائم الإنشاء باستخدام الروابط أدناه:
بالنسبة إلى تطبيقات Android المعيارية التي تتيح عمليات TF من خلال مفوضية مرنة، يُرجى استخدام الروابط أدناه:
يمكنك أيضًا إنشاء التطبيق من المصدر باتباع ما يلي: التعليمات.
إعداد مقياس الأداء
قبل تشغيل تطبيق قياس الأداء، ثبِّت التطبيق وادفع ملف النموذج إلى على النحو التالي:
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
(تلقائي=خطأ)
استخدام تفويض وحدة معالجة الرسومات.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
النظام الثنائي الأصلي لمقاييس الأداء
يتم توفير أداة قياس الأداء أيضًا كـ benchmark_model
ثنائي أصلي. يمكنك
ويمكن تنفيذ هذه الأداة من سطر أوامر واجهة الأوامر على Linux وMac والأجهزة المضمنة
أجهزة Android
تنزيل البرنامج الثنائي أو إنشاؤه
يمكنك تنزيل ثنائيات سطر الأوامر الأصلية التي تم إنشاؤها مسبقًا ليلاً من خلال اتباع الروابط أدناه:
بالنسبة إلى البرامج الثنائية التي تم إنشاؤها مسبقًا ليلاً والتي تتوافق مع عمليات TF من خلال مفوضية مرنة، يُرجى استخدام الروابط أدناه:
يمكنك أيضًا إنشاء النظام الثنائي الأصلي لمقياس الأداء من المصدر على جهاز الكمبيوتر.
bazel build -c opt //tensorflow/lite/tools/benchmark:benchmark_model
للإنشاء باستخدام سلسلة أدوات Android NDK، يجب إعداد بيئة التصميم أولاً من خلال اتباع هذا الدليل، أو استخدام صورة Docker كما هو موضّح في هذا الدليل
bazel build -c opt --config=android_arm64 \
//tensorflow/lite/tools/benchmark:benchmark_model
قياس الأداء
لتنفيذ مقاييس الأداء على جهاز الكمبيوتر، نفِّذ البرنامج الثنائي من واجهة الأوامر.
path/to/downloaded_or_built/benchmark_model \
--graph=your_model.tflite \
--num_threads=4
يمكنك استخدام نفس مجموعة المَعلمات كما ذكرنا أعلاه باستخدام البرنامج الثنائي لسطر الأوامر الأصلي.
عمليات نموذج التحليل
كما يتيح لك البرنامج الثنائي لنموذج قياس الأداء تحليل عمليات النموذج والحصول على
وأوقات التنفيذ لكل عامل تشغيل. للقيام بذلك، مرر العلامة
من --enable_op_profiling=true
إلى benchmark_model
أثناء الاستدعاء. التفاصيل هي
شرحت
هنا.
برنامج ثنائي معياري أصلي لخيارات أداء متعدّدة في تمرين واحد
كما يتم توفير برنامج ثنائي مناسب وبسيط لـ C++
خيارات أداء متعددة لقياس الأداء
في جولة واحدة. تم إنشاء هذا البرنامج الثنائي استنادًا إلى أداة قياس الأداء المذكورة أعلاه
يمكنها فقط قياس أداء خيار أداء واحد في الوقت نفسه يشاركون
نفس عملية الإنشاء/التثبيت/التشغيل، لكن اسم هدف إنشاء هذا البرنامج الثنائي هو
benchmark_model_performance_options
ويتطلّب ذلك بعض المَعلمات الإضافية.
من المعلمات المهمة لهذا البرنامج الثنائي هي:
perf_options_list
: string
(default='all')
قائمة مفصولة بفواصل لخيارات أداء TFLite لقياس الأداء.
يمكنك الحصول على برامج ثنائية تم إنشاؤها مسبقًا لهذه الأداة كما هو موضح أدناه:
تطبيق قياس الأداء على 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 (الكمية) | Pixel 3 | 13.4 ملي ثانية | --- |
Pixel 4 | 5.0 ملي ثانية | --- | |
NASNet للأجهزة الجوّالة | 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 (الكمية) | iPhone XS | 11 ملي ثانية | --- |
NASNet للأجهزة الجوّالة | 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 ملي ثانية |
تتبُّع عمليات LiteRT الداخلية
تتبُّع التفاصيل الداخلية في LiteRT في نظام Android
يمكن تنفيذ الأحداث الداخلية من مترجم LiteRT لتطبيق Android تم الالتقاط بواسطة أدوات التتبُّع في Android إنهما نفس الأحداث في Android Trace API، وبالتالي تتم رؤية الأحداث التي تم تسجيلها من رمز Java/Kotlin مع LiteRT أحداث داخلية.
في ما يلي بعض الأمثلة على الأحداث:
- استدعاء عامل التشغيل
- إنشاء رسم بياني للتعديل حسب المفوَّض
- تخصيص Tensor
يتناول هذا الدليل نظام التشغيل Android من بين الخيارات المختلفة لتسجيل بيانات آثار الأنشطة أداة تحليل وحدة المعالجة المركزية في استوديو وتطبيق System Tracing. ارجع إلى أداة سطر الأوامر 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"
التقاط الآثار باستخدام أداة تحليل وحدة المعالجة المركزية (CPU) في "استوديو Android" باتّباع الخطوات التالية:
حدد تشغيل > الملف الشخصي "تطبيق" من القوائم العليا.
انقر في أي مكان في المخطط الزمني لوحدة المعالجة المركزية (CPU) عند ظهور نافذة "المحلِّل".
اختَر "تتبُّع مكالمات النظام". بين أوضاع تحليل وحدة المعالجة المركزية (CPU).
الضغط على "تسجيل" .
اضغط على "إيقاف" .
تحقق من نتيجة التتبع.
في هذا المثال، يمكنك مشاهدة التسلسل الهرمي للأحداث في سلسلة محادثات وإحصاءات. حسب وقت كل عامل تشغيل، كما سيكون بإمكانك الاطّلاع على تدفق البيانات للتطبيق بأكمله سلاسل المحادثات.
تطبيق "تتبُّع النظام"
يمكنك تسجيل آثار الأنشطة بدون استخدام "استوديو Android" من خلال اتّباع الخطوات الموضّحة بالتفصيل في تطبيق تتبُّع النظام
في هذا المثال، تم تسجيل أحداث TFLite نفسها وحفظها في Perfetto. أو Systrace بناءً على إصدار جهاز Android. تم التقاط الصورة يمكن فتح ملفات التتبُّع في واجهة مستخدم Perfetto.
تتبُّع التفاصيل الداخلية في LiteRT في نظام التشغيل iOS
يمكن تنفيذ الأحداث الداخلية من مترجم LiteRT لتطبيق iOS تم الالتقاط بواسطة الآلات الموسيقية أداة مضمنة في Xcode. وهي تمثل نظام التشغيل iOS signpost الأحداث، وبالتالي تظهر الأحداث التي تم تسجيلها من رمز Swift/Objective-C معًا. مع أحداث LiteRT الداخلية.
في ما يلي بعض الأمثلة على الأحداث:
- استدعاء عامل التشغيل
- إنشاء رسم بياني للتعديل حسب المفوَّض
- تخصيص Tensor
تفعيل التتبع LiteRT
اضبط متغيّر البيئة debug.tflite.trace
باتّباع الخطوات التالية:
اختَر المنتج >. المخطط > تعديل المخطط... من القوائم العلوية في Xcode.
انقر على "الملف الشخصي". في الجزء الأيمن.
إلغاء اختيار "استخدام وسيطات إجراء التشغيل ومتغيرات البيئة" .
إضافة "
debug.tflite.trace
" ضمن "متغيّرات البيئة" .
إذا كنت تريد استبعاد أحداث LiteRT عند إنشاء ملفات شخصية لتطبيق iOS، لتعطيل التتبع بإزالة متغير البيئة.
آلات XCode
سجِّل آثار الأنشطة باتّباع الخطوات التالية:
اختَر المنتج >. Profile (الملف الشخصي) من قوائم Xcode العليا.
انقر على التسجيل بين نماذج التحليل عند تشغيل أداة "الآلات الموسيقية".
اضغط على "البدء" .
اضغط على "إيقاف" .
انقر على "os_signpost" لتوسيع عناصر النظام الفرعي لتسجيل نظام التشغيل.
انقر على "org.tensorflow.lite" النظام الفرعي لتسجيل نظام التشغيل.
تحقق من نتيجة التتبع.
في هذا المثال، يمكنك مشاهدة التسلسل الهرمي للأحداث والإحصاءات لكلّ وقت المشغل.
استخدام بيانات التتبع
تتيح لك بيانات التتبُّع تحديد المؤثِّرات السلبية على الأداء.
فيما يلي بعض الأمثلة على الرؤى التي يمكنك الحصول عليها من المحلل الحلول الممكنة لتحسين الأداء:
- إذا كان عدد نوى وحدة المعالجة المركزية المتاحة أقل من عدد الاستنتاج فإن النفقات العامة لجدولة وحدة المعالجة المركزية (CPU) يمكن أن تؤدي إلى انخفاض في الأداء. يمكنك إعادة جدولة المهام الأخرى الكثيفة لوحدة المعالجة المركزية في تطبيقك لتجنُّب التداخل مع استنتاج النموذج أو تعديل عدد أداة الترجمة الفورية سلاسل المحادثات.
- إذا لم يتم تفويض عوامل التشغيل بشكل كامل، فإن بعض أجزاء الرسم البياني للنموذج يتم تنفيذها على وحدة المعالجة المركزية (CPU) بدلاً من مسرِّع الأجهزة المتوقع. إِنْتَ استبدال عوامل التشغيل غير المعتمدة بعوامل تشغيل مشابهة مشابهة.