قياس الأداء

أدوات قياس الأداء

تقيس أدوات قياس 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.

يمكنك تحديد المزيد من المَعلمات الاختيارية لتشغيل مقياس الأداء.

واعتمادًا على الجهاز الذي تستخدمه، قد لا تتوفر متاحة أو ليس لها تأثير. ارجع إلى المَعلمات لمزيد من مَعلمات الأداء التي يمكنك تنفيذها باستخدام تطبيق قياس الأداء.

اعرض النتائج باستخدام الأمر 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" باتّباع الخطوات التالية:

  1. حدد تشغيل > الملف الشخصي "تطبيق" من القوائم العليا.

  2. انقر في أي مكان في المخطط الزمني لوحدة المعالجة المركزية (CPU) عند ظهور نافذة "المحلِّل".

  3. اختَر "تتبُّع مكالمات النظام". بين أوضاع تحليل وحدة المعالجة المركزية (CPU).

    اختَر "تتبُّع مكالمات النظام".

  4. الضغط على "تسجيل" .

  5. اضغط على "إيقاف" .

  6. تحقق من نتيجة التتبع.

    تتبُّع "استوديو Android"

في هذا المثال، يمكنك مشاهدة التسلسل الهرمي للأحداث في سلسلة محادثات وإحصاءات. حسب وقت كل عامل تشغيل، كما سيكون بإمكانك الاطّلاع على تدفق البيانات للتطبيق بأكمله سلاسل المحادثات.

تطبيق "تتبُّع النظام"

يمكنك تسجيل آثار الأنشطة بدون استخدام "استوديو Android" من خلال اتّباع الخطوات الموضّحة بالتفصيل في تطبيق تتبُّع النظام

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

تتبُّع Perfetto

تتبُّع التفاصيل الداخلية في LiteRT في نظام التشغيل iOS

يمكن تنفيذ الأحداث الداخلية من مترجم LiteRT لتطبيق iOS تم الالتقاط بواسطة الآلات الموسيقية أداة مضمنة في Xcode. وهي تمثل نظام التشغيل iOS signpost الأحداث، وبالتالي تظهر الأحداث التي تم تسجيلها من رمز Swift/Objective-C معًا. مع أحداث LiteRT الداخلية.

في ما يلي بعض الأمثلة على الأحداث:

  • استدعاء عامل التشغيل
  • إنشاء رسم بياني للتعديل حسب المفوَّض
  • تخصيص Tensor

تفعيل التتبع LiteRT

اضبط متغيّر البيئة debug.tflite.trace باتّباع الخطوات التالية:

  1. اختَر المنتج >. المخطط > تعديل المخطط... من القوائم العلوية في Xcode.

  2. انقر على "الملف الشخصي". في الجزء الأيمن.

  3. إلغاء اختيار "استخدام وسيطات إجراء التشغيل ومتغيرات البيئة" .

  4. إضافة "debug.tflite.trace" ضمن "متغيّرات البيئة" .

    ضبط متغيّر البيئة

إذا كنت تريد استبعاد أحداث LiteRT عند إنشاء ملفات شخصية لتطبيق iOS، لتعطيل التتبع بإزالة متغير البيئة.

آلات XCode

سجِّل آثار الأنشطة باتّباع الخطوات التالية:

  1. اختَر المنتج >. Profile (الملف الشخصي) من قوائم Xcode العليا.

  2. انقر على التسجيل بين نماذج التحليل عند تشغيل أداة "الآلات الموسيقية".

  3. اضغط على "البدء" .

  4. اضغط على "إيقاف" .

  5. انقر على "os_signpost" لتوسيع عناصر النظام الفرعي لتسجيل نظام التشغيل.

  6. انقر على "org.tensorflow.lite" النظام الفرعي لتسجيل نظام التشغيل.

  7. تحقق من نتيجة التتبع.

    تتبُّع آلات Xcode

في هذا المثال، يمكنك مشاهدة التسلسل الهرمي للأحداث والإحصاءات لكلّ وقت المشغل.

استخدام بيانات التتبع

تتيح لك بيانات التتبُّع تحديد المؤثِّرات السلبية على الأداء.

فيما يلي بعض الأمثلة على الرؤى التي يمكنك الحصول عليها من المحلل الحلول الممكنة لتحسين الأداء:

  • إذا كان عدد نوى وحدة المعالجة المركزية المتاحة أقل من عدد الاستنتاج فإن النفقات العامة لجدولة وحدة المعالجة المركزية (CPU) يمكن أن تؤدي إلى انخفاض في الأداء. يمكنك إعادة جدولة المهام الأخرى الكثيفة لوحدة المعالجة المركزية في تطبيقك لتجنُّب التداخل مع استنتاج النموذج أو تعديل عدد أداة الترجمة الفورية سلاسل المحادثات.
  • إذا لم يتم تفويض عوامل التشغيل بشكل كامل، فإن بعض أجزاء الرسم البياني للنموذج يتم تنفيذها على وحدة المعالجة المركزية (CPU) بدلاً من مسرِّع الأجهزة المتوقع. إِنْتَ استبدال عوامل التشغيل غير المعتمدة بعوامل تشغيل مشابهة مشابهة.