قياس الأداء

الأدوات المرجعية

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

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

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

تطبيق أندرويد القياسي

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

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

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

قم بتنزيل تطبيقات Android المعيارية المعدة مسبقًا ليلاً باستخدام الروابط أدناه:

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

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

إعداد المعيار

قبل تشغيل التطبيق المعياري، قم بتثبيت التطبيق وادفع ملف النموذج إلى الجهاز كما يلي:

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 (افتراضي = خطأ)
    استخدم مندوب GPU .
  • use_nnapi : bool (افتراضي=خطأ)
    استخدم مندوب NNAPI .
  • use_xnnpack : bool (افتراضي = false )
    استخدم مندوب XNNPACK .
  • use_hexagon : bool (افتراضي = false )
    استخدم مندوب السداسي .

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

عرض النتائج باستخدام الأمر 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 ، فاستخدم الروابط أدناه:

لقياس الأداء باستخدام مندوب TensorFlow Lite Hexagon ، قمنا أيضًا بإنشاء ملفات libhexagon_interface.so المطلوبة مسبقًا (انظر هنا للحصول على تفاصيل حول هذا الملف). بعد تنزيل ملف النظام الأساسي المقابل من الروابط أدناه، يرجى إعادة تسمية الملف إلى libhexagon_interface.so .

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

bazel build -c opt //tensorflow/lite/tools/benchmark:benchmark_model

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

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 (افتراضي='الكل')
قائمة مفصولة بفواصل لخيارات أداء TFLite لقياس الأداء.

يمكنك الحصول على ثنائيات معدة مسبقًا ليلاً لهذه الأداة كما هو موضح أدناه:

التطبيق المعياري لنظام iOS

لتشغيل الاختبارات المرجعية على جهاز iOS، تحتاج إلى إنشاء التطبيق من المصدر . ضع ملف نموذج TensorFlow Lite في دليل Benchmark_data للشجرة المصدر وقم بتعديل ملف benchmark_params.json . يتم تجميع هذه الملفات في التطبيق ويقوم التطبيق بقراءة البيانات من الدليل. قم بزيارة تطبيق iOS المعياري للحصول على تعليمات مفصلة.

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

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

معايير أداء أندرويد

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

بالنسبة لمعايير 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

للتشغيل مع مندوب nnapi، قم بتعيين --use_nnapi=true . للتشغيل مع مندوب GPU، قم بتعيين --use_gpu=true .

يتم قياس قيم الأداء أدناه على Android 10.

اسم النموذج جهاز وحدة المعالجة المركزية، 4 المواضيع GPU نابي
موبايل نت_1.0_224(عائم) بكسل 3 23.9 مللي ثانية 6.45 مللي ثانية 13.8 مللي ثانية
بكسل 4 14.0 مللي ثانية 9.0 مللي ثانية 14.8 مللي ثانية
Mobilenet_1.0_224 (الكمية) بكسل 3 13.4 مللي ثانية --- 6.0 مللي ثانية
بكسل 4 5.0 مللي ثانية --- 3.2 مللي ثانية
ناس نت موبايل بكسل 3 56 مللي ثانية --- 102 مللي ثانية
بكسل 4 34.5 مللي ثانية --- 99.0 مللي ثانية
سكويز نت بكسل 3 35.8 مللي ثانية 9.5 مللي ثانية 18.5 مللي ثانية
بكسل 4 23.9 مللي ثانية 11.1 مللي ثانية 19.0 مللي ثانية
Inception_ResNet_V2 بكسل 3 422 مللي ثانية 99.8 مللي ثانية 201 مللي ثانية
بكسل 4 272.6 مللي ثانية 87.2 مللي ثانية 171.1 مللي ثانية
Inception_V4 بكسل 3 486 مللي ثانية 93 مللي ثانية 292 مللي ثانية
بكسل 4 324.1 مللي ثانية 97.6 مللي ثانية 186.9 مللي ثانية

معايير أداء iOS

تم إنشاء أرقام قياس الأداء هذه باستخدام تطبيق iOS المعياري .

لتشغيل معايير iOS، تم تعديل التطبيق المعياري ليشمل النموذج المناسب وتم تعديل benchmark_params.json لتعيين num_threads على 2. لاستخدام مفوض GPU، "use_gpu" : "1" و "gpu_wait_type" : "aggressive" تمت إضافته أيضًا إلى benchmark_params.json .

اسم النموذج جهاز وحدة المعالجة المركزية، 2 المواضيع GPU
موبايل نت_1.0_224(عائم) ايفون اكس اس 14.8 مللي ثانية 3.4 مللي ثانية
Mobilenet_1.0_224 (الكمية) ايفون اكس اس 11 مللي ثانية ---
ناس نت موبايل ايفون اكس اس 30.4 مللي ثانية ---
سكويز نت ايفون اكس اس 21.1 مللي ثانية 15.5 مللي ثانية
Inception_ResNet_V2 ايفون اكس اس 261.1 مللي ثانية 45.7 مللي ثانية
Inception_V4 ايفون اكس اس 309 مللي ثانية 54.4 مللي ثانية

تتبع الأجزاء الداخلية لـ TensorFlow Lite

تتبع الأجزاء الداخلية لـ TensorFlow Lite في Android

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

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

  • استدعاء المشغل
  • تعديل الرسم البياني من قبل المندوب
  • تخصيص الموتر

من بين الخيارات المختلفة لالتقاط الآثار، يغطي هذا الدليل ملف تعريف Android Studio CPU وتطبيق System Tracing. ارجع إلى أداة سطر الأوامر Perfetto أو أداة سطر الأوامر Systrace للحصول على خيارات أخرى.

إضافة أحداث التتبع في كود جافا

هذا مقتطف رمز من تطبيق مثال تصنيف الصور . يعمل مترجم 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 Lite، فسيتم تتبع الأحداث الرئيسية (على سبيل المثال، استدعاء عامل التشغيل) من المترجم.

بعد التقاط كافة الآثار، قم بتعطيل التتبع عن طريق تعيين قيمة الخاصية إلى 0.

adb shell setprop debug.tflite.trace 0

ملف تعريف وحدة المعالجة المركزية لنظام Android Studio

التقط الآثار باستخدام Android Studio CPU Profiler باتباع الخطوات التالية:

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

  2. انقر في أي مكان في المخطط الزمني لوحدة المعالجة المركزية عندما تظهر نافذة ملف التعريف.

  3. حدد "تتبع مكالمات النظام" من بين أوضاع ملفات تعريف وحدة المعالجة المركزية.

    حدد "تتبع مكالمات النظام"

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

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

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

    تتبع أندرويد ستوديو

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

تطبيق تتبع النظام

التقط الآثار بدون Android Studio باتباع الخطوات المفصلة في تطبيق System Tracing .

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

أثر بيرفيتو

تتبع الأجزاء الداخلية لـ TensorFlow Lite في نظام التشغيل iOS

يمكن التقاط الأحداث الداخلية من مترجم TensorFlow Lite لتطبيق iOS بواسطة أداة Instruments المضمنة في Xcode. إنها أحداث إشارة 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.tensorflow.lite".

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

    تتبع أدوات Xcode

في هذا المثال، يمكنك رؤية التسلسل الهرمي للأحداث والإحصائيات لكل وقت عامل.

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

تسمح لك بيانات التتبع بتحديد اختناقات الأداء.

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

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