احفظ التاريخ! يعود مؤتمر Google I / O من 18 إلى 20 مايو. سجل الآن
ترجمت واجهة Cloud Translation API‏ هذه الصفحة.
Switch to English

مقياس الاداء

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

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

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

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

تطبيق Android القياسي

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

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

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

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

بالنسبة إلى تطبيقات قياس أداء Android التي تدعم عمليات TF عبر مندوب 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 "Average inference"

يتم الإبلاغ عن النتائج المعيارية على النحو التالي:

... tflite  : Average inference timings in us: Warmup: 91471, Init: 4108, Inference: 80660.1

ثنائي معياري أصلي

يتم توفير أداة Benchmark أيضًا كنموذج benchmark_model ثنائي أصلي. يمكنك تنفيذ هذه الأداة من سطر أوامر shell على Linux و Mac والأجهزة المضمنة وأجهزة Android.

قم بتنزيل أو إنشاء الملف الثنائي

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

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

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

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

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

bazel build -c opt --config=android_arm64 \
  //tensorflow/lite/tools/benchmark:benchmark_model

قم بتشغيل المعيار

لتشغيل المعايير على جهاز الكمبيوتر الخاص بك ، قم بتنفيذ الثنائي من shell.

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

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

تطبيق قياس iOS

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

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

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

معايير أداء Android

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

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

يفترض أنه تم تنزيل النماذج /data/local/tmp/tflite_models الدليل /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 NNAPI
Mobilenet_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 مللي ثانية
NASNet المحمول بكسل 3 56 مللي ثانية - 102 مللي ثانية
بكسل 4 34.5 مللي ثانية - 99.0 مللي ثانية
SqueezeNet بكسل 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 مللي ثانية
التأسيس_V4 بكسل 3 486 مللي ثانية 93 مللي ثانية 292 مللي ثانية
بكسل 4 324.1 مللي ثانية 97.6 مللي ثانية 186.9 مللي ثانية

معايير أداء iOS

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

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

اسم النموذج جهاز وحدة المعالجة المركزية ، 2 خيوط GPU
Mobilenet_1.0_224 (عائم) آيفون XS 14.8 مللي ثانية 3.4 مللي ثانية
Mobilenet_1.0_224 (كمية) iPhone XS 11 مللي ثانية -
NASNet المحمول آيفون XS 30.4 مللي ثانية -
SqueezeNet آيفون XS 21.1 مللي ثانية 15.5 مللي ثانية
Inception_ResNet_V2 آيفون XS 261.1 مللي ثانية 45.7 مللي ثانية
التأسيس_V4 iPhone XS 309 مللي ثانية 54.4 مللي ثانية

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

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

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

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

من بين الخيارات المختلفة لالتقاط الآثار ، يغطي هذا الدليل ملف تعريف وحدة المعالجة المركزية Android Studio وتطبيق System Tracing. راجع أداة سطر الأوامر 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 ، قم بتعيين debug.tflite.tracing لخاصية نظام Android على 1 قبل بدء تطبيق Android.

adb shell setprop debug.tflite.trace 1

إذا تم تعيين هذه الخاصية عند تهيئة مترجم TensorFlow Lite ، فسيتم تتبع الأحداث الرئيسية (مثل استدعاء المشغل) من المترجم الفوري.

بعد التقاط جميع عمليات التتبع ، قم بتعطيل التتبع عن طريق تعيين قيمة الخاصية على 0.

adb shell setprop debug.tflite.trace 0

Android Studio CPU Profiler

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

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

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

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

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

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

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

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

    تتبع Android Studio

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

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

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

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

تتبع بيرفيتو

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

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

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

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