قياس الأداء

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

تقيس أدوات قياس أداء TensorFlow Lite حاليًا الإحصاءات وتحسبها لمقاييس الأداء المهمة التالية:

  • وقت الإعداد
  • استنتاج وقت حالة الإحماء
  • وقت الاستنتاج للحالة الثابتة
  • استخدام الذاكرة أثناء وقت الإعداد
  • الاستخدام الإجمالي للذاكرة

تتوفّر أدوات قياس الأداء كتطبيقات قياس أداء لنظامَي التشغيل Android وiOS وكبرامج ثنائية أصلية لسطر الأوامر، وتتشارك جميعها في منطق قياس الأداء الأساسي نفسه. يُرجى العلم أنّ الخيارات المتاحة وتنسيقات الإخراج تختلف قليلاً بسبب الاختلافات في بيئة وقت التشغيل.

تطبيق Android المعياري

هناك خياران لاستخدام أداة قياس الأداء مع نظام التشغيل Android. أحدهما هو برنامج ثنائي لمقياس الأداء الثنائي والآخر تطبيق Android لقياس الأداء، وهو مقياس أفضل لمستوى أداء النموذج في التطبيق. وفي كلتا الحالتين، ستظل الأرقام التي يتم الحصول عليها من أداة قياس الأداء مختلفة قليلاً عنها عند إجراء استنتاج باستخدام النموذج في التطبيق الفعلي.

لا يحتوي تطبيق قياس أداء Android هذا على واجهة مستخدم. يمكنك تثبيته وتشغيله باستخدام الأمر adb واسترداد النتائج باستخدام الأمر adb logcat.

تنزيل التطبيق أو إنشاؤه

يمكنك تنزيل تطبيقات "قياس أداء Android" المُنشأة مسبقًا بسهولة من خلال الروابط أدناه:

بالنسبة إلى تطبيقات Android المعيارية التي تتوافق مع عمليات TF عبر Flex delegate، استخدِم الروابط أدناه:

يمكنك أيضًا إنشاء التطبيق من المصدر باتّباع هذه instructions.

إعداد مقياس الأداء

قبل تشغيل تطبيق قياس الأداء، ثبِّت التطبيق وادفع ملف النموذج إلى الجهاز على النحو التالي:

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 ثنائي أصلي. يمكنك تنفيذ هذه الأداة من سطر أوامر Shell على Linux وMac والأجهزة المضمَّنة وأجهزة Android.

تنزيل البرنامج الثنائي أو إنشاؤه

يمكنك تنزيل البرامج الثنائية الأصلية التي تم إنشاؤها مسبقًا لسطر الأوامر من خلال اتباع الروابط أدناه:

بالنسبة إلى البرامج الثنائية التي تم إنشاؤها مسبقًا ليلاً وتتوافق مع عمليات TF عبر Flex delegate، استخدِم الروابط أدناه:

يمكنك أيضًا إنشاء البرنامج الثنائي الأصلي للمقاييس من المصدر على الكمبيوتر.

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++ لقياس أداء خيارات الأداء المتعددة في عملية تشغيل واحدة. تم إنشاء هذا البرنامج الثنائي بناءً على أداة قياس الأداء التي سبق ذكرها، والتي يمكنها قياس خيار أداء واحد فقط في كل مرة. ويتشاركان عملية الإنشاء/التثبيت/التشغيل نفسها، غير أنّ اسم هدف BUILD لهذا البرنامج الثنائي هو benchmark_model_performance_options وتتطلّب بعض المَعلمات الإضافية. معلمة مهمة لهذا البرنامج الثنائي هي:

perf_options_list: string (default='all')
قائمة مفصولة بفواصل تتضمّن خيارات أداء TFLite لقياس الأداء.

يمكنك الحصول على برامج ثنائية مسبقة الإنشاء لهذه الأداة كما هو موضح أدناه:

تطبيق مقاييس أداء iOS

لتنفيذ مقاييس الأداء على جهاز iOS، عليك إنشاء التطبيق من المصدر. ضَع ملف نموذج TensorFlow Lite في دليل benchmark_data لشجرة المصدر وعدِّل ملف benchmark_params.json. يتم تجميع هذه الملفات في التطبيق ويقرأ التطبيق البيانات من الدليل. انتقِل إلى تطبيق مقاييس أداء iOS للحصول على تعليمات تفصيلية.

مقاييس الأداء للنماذج المعروفة جيدًا

يسرد هذا القسم مقاييس أداء TensorFlow Lite عند تشغيل طُرز معروفة على بعض أجهزة Android وiOS.

مقاييس أداء Android

تم إنشاء أرقام مقاييس الأداء هذه باستخدام البرنامج الثنائي الأصلي لمقياس الأداء.

بالنسبة إلى مقاييس Android المرجعية، تم ضبط إعدادات تقارب وحدة المعالجة المركزية (CPU) على استخدام نوى كبيرة على الجهاز للحدّ من التباين (راجِع التفاصيل).

وتفترض أنّه تم تنزيل النماذج وفك ضغطها في دليل /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. لاستخدام تفويض GPU، تمت إضافة خيارات "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 ملي ثانية

تتبُّع العناصر الداخلية لتطبيق TensorFlow Lite

تتبُّع العناصر الداخلية لتطبيق TensorFlow Lite في Android

يمكن تسجيل الأحداث الداخلية من مترجم TensorFlow Lite لتطبيق Android من خلال أدوات التتبُّع في Android. وهذه الأحداث هي نفسها الأحداث في واجهة برمجة التطبيقات Android Trace API، لذا يتم عرض الأحداث التي تم تسجيلها من رمز Java/Kotlin جنبًا إلى جنب مع أحداث TensorFlow Lite الداخلية.

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

  • استدعاء مشغِّل شبكة الجوّال
  • تعديل الرسم البياني عن طريق المفوَّض
  • تخصيص الموتّر

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

إضافة أحداث تتبُّع في رمز Java

هذا مقتطف رمز من مثال تطبيق تصنيف الصور. يتم تشغيل مترجَم TensorFlow Lite في القسم recognizeImage/runInference. هذه الخطوة اختيارية ولكنها مفيدة للمساعدة في ملاحظة مكان إجراء استدعاء الاستنتاج.

  Trace.beginSection("recognizeImage");
  ...
  // Runs the inference call.
  Trace.beginSection("runInference");
  tflite.run(inputImageBuffer.getBuffer(), outputProbabilityBuffer.getBuffer().rewind());
  Trace.endSection();
  ...
  Trace.endSection();

تفعيل تتبُّع TensorFlow Lite

لتفعيل تتبُّع TensorFlow Lite، عليك ضبط خاصية نظام Android debug.tflite.trace على 1 قبل بدء تطبيق Android.

adb shell setprop debug.tflite.trace 1

في حال ضبط هذه السمة عند إعداد الترجمة الفورية من TensorFlow، سيتم تتبُّع الأحداث الرئيسية (مثل استدعاء المشغِّل) من المترجم الفوري.

بعد تسجيل جميع آثار التتبُّع، أوقِف التتبُّع من خلال ضبط قيمة الخاصية على 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.

آثار الأنشطة

تتبُّع العناصر الداخلية لتطبيق TensorFlow Lite في نظام iOS

يمكن تسجيل الأحداث الداخلية من مترجِم TensorFlow Lite لتطبيق iOS من خلال أداة Machines المضمَّنة مع Xcode. وهي أحداث signpost على iOS، لذا يتم عرض الأحداث التي تم تسجيلها من رمز Swift/Objective-C مع أحداث TensorFlow Lite الداخلية.

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

  • استدعاء مشغِّل شبكة الجوّال
  • تعديل الرسم البياني عن طريق المفوَّض
  • تخصيص الموتّر

تفعيل تتبُّع TensorFlow Lite

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

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

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

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

  4. أضِف debug.tflite.trace ضمن قسم "متغيرات البيئة".

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

إذا أردت استبعاد أحداث TensorFlow Lite عند تحليل ملفات تطبيق iOS، يمكنك إيقاف التتبُّع عن طريق إزالة متغير البيئة.

أدوات XCode

احصَل على آثار الأنشطة باتباع الخطوات أدناه:

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

  2. انقر على تسجيل الدخول بين نماذج إنشاء المواصفات عند إطلاق أداة "الأدوات".

  3. اضغط على الزر "ابدأ".

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

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

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

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

    تتبُّع أدوات Xcode

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

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

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

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

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