أفضل الممارسات المتعلّقة بالأداء

تتوفّر موارد حوسبة محدودة في الأجهزة الجوّالة والأجهزة المدمجة، لذا من المهم أن تكون موارد تطبيقك فعّالة. لقد جمعنا قائمة بأفضل الممارسات والاستراتيجيات التي يمكنك استخدامها لتحسين أداء نموذج TensorFlow Lite.

اختيار النموذج الأنسب للمَهمة

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

رسم بياني لحجم النموذج مقابل الدقة

الرسم البياني للدقة مقابل وقت الاستجابة

من الأمثلة على النماذج المحسّنة للأجهزة الجوّالة MobileNets، وهي نماذج محسّنة لتطبيقات الرؤية على الأجهزة الجوّالة. تدرج Kaggle Models العديد من النماذج الأخرى التي تم تحسينها خصيصًا للأجهزة الجوّالة والأجهزة المضمّنة.

يمكنك إعادة تدريب النماذج المدرَجة على مجموعة البيانات الخاصة بك باستخدام ميزة "نقل التعلّم".

إنشاء ملف تعريف للنموذج

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

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

تحديد المشغّلين وتحسينهم في الرسم البياني

إذا كان عامل تشغيل معيّن يظهر بشكل متكرّر في النموذج، وتبيّن لك من خلال تحديد السمات أن عامل التشغيل هذا يستهلك أكبر قدر من الوقت، يمكنك محاولة تحسينه. من المفترض أن يكون هذا السيناريو نادرًا لأنّ TensorFlow Lite يتضمّن إصدارات محسّنة لمعظم العمليات. ومع ذلك، قد تتمكّن من كتابة نسخة أسرع من عملية مخصّصة إذا كنت تعرف القيود التي يتم تنفيذ العملية ضمنها. راجِع دليل عوامل التشغيل المخصّصة.

تحسين النموذج

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

لمزيد من التفاصيل، يُرجى الاطّلاع على مستندات تحسين النماذج.

تعديل عدد سلاسل المحادثات

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

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

إزالة النُسخ المكرّرة

إذا لم يتم تصميم تطبيقك بعناية، قد تكون هناك نُسخ مكرّرة عند إدخال البيانات إلى النموذج وقراءة النتائج منه. احرص على إزالة النُسخ المكرّرة. إذا كنت تستخدم واجهات برمجة تطبيقات ذات مستوى أعلى، مثل Java، احرص على مراجعة المستندات بعناية للتعرّف على التحذيرات المتعلقة بالأداء. على سبيل المثال، تكون واجهة برمجة تطبيقات Java أسرع بكثير إذا تم استخدام ByteBuffers كـ مدخلات.

إنشاء ملف تعريف لتطبيقك باستخدام أدوات خاصة بالنظام الأساسي

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

تقييم ما إذا كان نموذجك يستفيد من استخدام أدوات تسريع الأجهزة المتاحة على الجهاز

أضافت LiteRT طرقًا جديدة لتسريع النماذج باستخدام أجهزة أسرع، مثل وحدات معالجة الرسومات (GPU) ومعالجات الإشارات الرقمية (DSP) ومسرّعات الشبكات العصبية. عادةً، يتم عرض أدوات التسريع هذه من خلال وحدات فرعية delegate تتولى أجزاءً من تنفيذ المترجم. يمكن أن تستخدم LiteRT المستخدمين المفوَّضين من خلال:

  • تتوفّر أداة تفويض وحدة معالجة الرسومات على نظامَي التشغيل Android وiOS، وذلك باستخدام OpenGL/OpenCL وMetal على التوالي. لتجربتها، اطّلِع على مفوّض وحدة معالجة الرسومات.
  • يمكنك إنشاء وكيلك الخاص إذا كان لديك إذن الوصول إلى أجهزة غير عادية. يمكنك الاطّلاع على عناصر LiteRT للحصول على مزيد من المعلومات.

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