مفوَّضو TensorFlow Lite

يعمل المفوَّضون على تفعيل تسريع الأجهزة لنماذج TensorFlow Lite من خلال الاستفادة من مسرِّعات الأعمال على الجهاز مثل وحدة معالجة الرسومات ومعالج الإشارات الرقمية (DSP).

يستخدم TensorFlow Lite تلقائيًا نواة وحدة المعالجة المركزية (CPU) التي تم تحسينها لمجموعة تعليمات ARM Neon. ومع ذلك، فإنّ وحدة المعالجة المركزية (CPU) هي معالج متعدد الأغراض غير محسَّن بالضرورة للعمليات الحسابية الثقيلة التي تحدث عادةً في نماذج التعلّم الآلي (على سبيل المثال، حسابات المصفوفة التي تنطوي على الالتفاف والطبقات الكثيفة).

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

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

وقت التشغيل مع المفوَّضين

اختيار المفوَّض

يدعم TensorFlow Lite العديد من المفوَّضين، ويتم تحسين كل واحد منهم ليناسب منصّات معيّنة وأنواعًا معيّنة من النماذج. سيكون هناك عادةً العديد من المفوَّضين الذين ينطبق عليهم هذا الشرط، بناءً على معيارَين رئيسيَّين: النظام الأساسي (Android أو iOS؟) الذي تستهدفه، ونوع النموذج (النقطة العائمة أو الكمية؟) الذي تحاول تسريعه.

المفوِّضون حسب النظام الأساسي

على عدّة أنظمة أساسية (Android وiOS)

  • تفويض وحدة معالجة الرسومات: يمكن استخدام تفويض وحدة معالجة الرسومات على كل من نظامَي التشغيل Android وiOS. وتم تحسينها لتشغيل نماذج عائمة بنظام 32 بت و16 بت حيث تتوفّر وحدة معالجة رسومات. وتتوافق أيضًا مع النماذج الكَمية بنظام 8 بت وتوفر أداء وحدة معالجة الرسومات على قدم المساواة مع إصداراتها العائمة. لمزيد من التفاصيل حول تفويض وحدة معالجة الرسومات، يُرجى الاطّلاع على TensorFlow Lite على وحدة معالجة الرسومات.

iOS

  • أداة التفويض الأساسية لتعلُّم الآلة لأجهزة iPhone وiPad الأحدث: بالنسبة إلى أجهزة iPhone وiPad الأحدث التي يتوفر فيها المحرك العصبي الأساسي، يمكنك استخدام تفويض Core ML لتسريع الاستنتاج لنماذج النقاط العائمة بسرعة 32 بت أو 16 بت. يتوفر المحرك العصبوني على أجهزة Apple الجوّالة التي تعمل بالمنظومة على الرقاقة A12 أو إصدار أحدث. للحصول على نظرة عامة حول المفوَّض الأساسي لتعلُّم الآلة والتعليمات المفصّلة، يُرجى الاطّلاع على TensorFlow Lite Core ML المفوَّض.

المفوَّضون حسب نوع النموذج

يتم تصميم كل مسرِّع مع وضع عرض بت معين من البيانات في الاعتبار. إذا وفرت نموذج نقطة عائمة لأحد المفوَّضين يتوافق مع عمليات كمية 8 بت فقط، سيتم رفض جميع عملياته وسيتم تشغيل النموذج بالكامل على وحدة المعالجة المركزية (CPU). لتجنب هذه المفاجآت، يقدم الجدول أدناه نظرة عامة على الدعم المفوَّض استنادًا إلى نوع النموذج:

نوع الطراز وحدة معالجة الرسومات CoreML
النقطة العائمة (32 بت) نعم نعم
الكمّية float16 بعد التدريب نعم نعم
قياس النطاق الديناميكي بعد التدريب نعم لا
قياس الأعداد الصحيحة بعد التدريب نعم لا
تدريب مستند إلى الكميات نعم لا

التحقّق من الأداء

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

يتميز TensorFlow Lite بأدوات شاملة لتقييم الأداء وأداءً وتقييم الدقة يمكن أن يمكّن المطوّرين من الشعور بالثقة في استخدام المفوَّضين في تطبيقاتهم. وتتم مناقشة هذه الأدوات في القسم التالي.

أدوات التقييم

وقت الاستجابة وبصمة الذاكرة

يمكن استخدام أداة قياس الأداء في TensorFlow Lite مع المَعلَمات المناسبة لتقدير أداء النموذج، بما في ذلك متوسط وقت الاستجابة الاستنتاجي والأعباء المترتّبة على الإعداد وحجم الذاكرة وغير ذلك. وتتوافق هذه الأداة مع العديد من العلامات لتحديد أفضل إعدادات تفويض لنموذجك. على سبيل المثال، يمكن تحديد --gpu_backend=gl باستخدام --use_gpu لقياس تنفيذ وحدة معالجة الرسومات باستخدام OpenGL. يمكن الاطّلاع على القائمة الكاملة لمعلَمات التفويض المتوافقة في المستندات التفصيلية.

في ما يلي مثال على تشغيل نموذج كمي باستخدام وحدة معالجة رسومات من خلال adb:

adb shell /data/local/tmp/benchmark_model \
  --graph=/data/local/tmp/mobilenet_v1_224_quant.tflite \
  --use_gpu=true

يمكنك تنزيل إصدار مصمّم مسبقًا من هذه الأداة لنظام التشغيل Android، بنية ARM بالإصدار 64 بت هنا (مزيد من التفاصيل).

الدقة والدقة

عادةً ما يقوم المفوَّضون بإجراء عمليات حسابية بدقة مختلفة عن نظرائهم من وحدة المعالجة المركزية. ونتيجةً لذلك، هناك مفاضلة في الدقة (عادةً ما تكون طفيفة) مرتبطة باستخدام تفويض لتسريع الأجهزة. يُرجى العِلم أنّ هذا ليس صحيحًا دائمًا، فعلى سبيل المثال، بما أنّ وحدة معالجة الرسومات تستخدم دقة النقطة العائمة لتنفيذ نماذج كَمية، قد يتم إدخال تحسُّن طفيف في الدقة (على سبيل المثال، <أفضل 5 تحسين بنسبة% 1 في تصنيف صور ILSVRC).

يشمل TensorFlow Lite نوعين من الأدوات لقياس مدى دقة سلوك المفوّض في نموذج معيّن: Task-based وTask-Agnostic. تتوافق جميع الأدوات الموضحة في هذا القسم مع معلمات التفويض المتقدمة التي تستخدمها أداة قياس الأداء من القسم السابق. تجدر الإشارة إلى أنّ الأقسام الفرعية أدناه تركّز على تقييم التفويض (هل يؤدي المفوَّض نفس مستوى أداء وحدة المعالجة المركزية (CPU)؟) بدلاً من تقييم النموذج (هل النموذج بحد ذاته جيد للمهمة؟).

التقييم المستند إلى المهمة

يتضمّن تطبيق TensorFlow Lite أدوات لتقييم صحة مهمتَين يستندان إلى الصور:

يمكن العثور على برامج ثنائية مصممة مسبقًا لهذه الأدوات (Android وبنية ARM 64 بت)، بالإضافة إلى وثائق هنا:

يوضّح المثال أدناه تقييم تصنيف الصور باستخدام وحدة معالجة الرسومات على هاتف Pixel 4:

adb shell /data/local/tmp/run_eval \
  --model_file=/data/local/tmp/mobilenet_quant_v1_224.tflite \
  --ground_truth_images_path=/data/local/tmp/ilsvrc_images \
  --ground_truth_labels=/data/local/tmp/ilsvrc_validation_labels.txt \
  --model_output_labels=/data/local/tmp/model_output_labels.txt \
  --output_file_path=/data/local/tmp/accuracy_output.txt \
  --num_images=0 # Run on all images. \
  --use_gpu=true

الناتج المتوقّع هو قائمة بالمقاييس "الأكثر رواجًا" من 1 إلى 10:

Top-1 Accuracy: 0.733333
Top-2 Accuracy: 0.826667
Top-3 Accuracy: 0.856667
Top-4 Accuracy: 0.87
Top-5 Accuracy: 0.89
Top-6 Accuracy: 0.903333
Top-7 Accuracy: 0.906667
Top-8 Accuracy: 0.913333
Top-9 Accuracy: 0.92
Top-10 Accuracy: 0.923333

تقييم اللاأدرية للمهام

بالنسبة إلى المهام التي لا تتوفّر فيها أداة تقييم على الجهاز فقط، أو إذا كنت تجرّب نماذج مخصّصة، يتضمّن تطبيق TensorFlow Lite أداة الاستنتاج. (برنامج ثنائي لنظام التشغيل Android، بنية ARM ثنائية الإصدار 64 بت هنا)

يقارن الاستنتاج بين تنفيذ TensorFlow Lite (من حيث وقت الاستجابة وانحراف قيمة الناتج) في إعدادين:

  • استنتاج وحدة المعالجة المركزية (CPU) يتضمّن سلسلة تعليمات واحدة
  • استنتاج من تحديد المستخدم - تحدّده هذه المعلمات

ولإجراء ذلك، تنشئ الأداة بيانات غاوسية عشوائية وتمررها من خلال مترجمي TFLite فوريين، أحدهما يعمل بنواة وحدة معالجة مركزية ذات سلاسل واحدة، والآخر يعمل بوسيطات من خلال وسيطات المستخدم.

فهو يقيس زمن الانتقال لكليهما، بالإضافة إلى الفرق المطلق بين تيارات إخراج الصوت لكل مترجم، على أساس كل عنصر.

بالنسبة إلى نموذج يحتوي على موتر إخراج واحد، قد يبدو الناتج على النحو التالي:

Num evaluation runs: 50
Reference run latency: avg=84364.2(us), std_dev=12525(us)
Test run latency: avg=7281.64(us), std_dev=2089(us)
OutputDiff[0]: avg_error=1.96277e-05, std_dev=6.95767e-06

وهذا يعني أنّه بالنسبة إلى مُتّزن الإخراج في الفهرس 0، تختلف العناصر من ناتج وحدة المعالجة المركزية عن الإخراج المفوَّض بمعدّل 1.96e-05.

لاحظ أن تفسير هذه الأرقام يتطلب معرفة أعمق بالنموذج، وما يشير إليه كل مقياس للمخرجات. إذا كان الانحدار البسيط يحدد نوعًا من الدرجة أو التضمين، فينبغي أن يكون الفارق منخفضًا (وإلا يكون خطأ مع المفوَّض). مع ذلك، يصعب تفسير مخرجات مثل "فئة الكشف" الناتجة عن نماذج محرك الأقراص ذي الحالة الصلبة (SSD) بشكل أكبر. على سبيل المثال، قد يظهر فرقًا في استخدام هذه الأداة، لكن ذلك لا يعني شيئًا خاطئًا حقًا مع المستخدم المفوَّض: فكّر في فئتين (مزيفتين) هما: "تلفزيون (رقم التعريف: 10)" و"مراقبة (رقم التعريف:20)" - إذا كان المُفوَّض بعيدًا قليلاً عن الحقيقة الذهبية ويعرض الشاشة بدلاً من التلفزيون، فقد يكون فرق الإخراج لهذا المتغير 0 - 0.