غالبًا ما يكون للأجهزة الطرفية ذاكرة محدودة أو قوة حسابية. يمكن تطبيق تحسينات مختلفة على النماذج بحيث يمكن تشغيلها ضمن هذه القيود. بالإضافة إلى ذلك ، تسمح بعض التحسينات باستخدام أجهزة متخصصة للاستدلال السريع.
يوفر TensorFlow Lite ومجموعة أدوات تحسين نموذج TensorFlow أدوات لتقليل تعقيد تحسين الاستدلال.
من المستحسن أن تفكر في تحسين النموذج أثناء عملية تطوير التطبيق. يوضح هذا المستند بعض أفضل الممارسات لتحسين نماذج TensorFlow للنشر على الأجهزة المتطورة.
لماذا يجب تحسين النماذج
هناك عدة طرق رئيسية يمكن أن يساعد بها تحسين النموذج في تطوير التطبيق.
تخفيض حجم
يمكن استخدام بعض أشكال التحسين لتقليل حجم النموذج. تتمتع الموديلات الأصغر بالمزايا التالية:
- حجم تخزين أصغر: تشغل الطرز الأصغر مساحة تخزين أقل على أجهزة المستخدمين لديك. على سبيل المثال ، سيشغل تطبيق Android الذي يستخدم نموذجًا أصغر مساحة تخزين أقل على جهاز المستخدم المحمول.
- حجم تنزيل أصغر: تتطلب النماذج الأصغر وقتًا وعرض نطاق ترددي أقل للتنزيل على أجهزة المستخدمين.
- استخدام أقل للذاكرة: تستخدم الطرز الأصغر حجمًا أقل من ذاكرة الوصول العشوائي عند تشغيلها ، مما يحرر الذاكرة لأجزاء أخرى من تطبيقك لاستخدامها ، ويمكن أن يترجم إلى أداء واستقرار أفضل.
يمكن أن يؤدي التكميم إلى تقليل حجم النموذج في كل هذه الحالات ، على حساب بعض الدقة على الأرجح. يمكن أن يؤدي التقليم والتجميع إلى تقليل حجم النموذج الذي يتم تنزيله عن طريق جعله أكثر قابلية للضغط.
تقليل الكمون
الكمون هو مقدار الوقت المستغرق لتشغيل استنتاج واحد باستخدام نموذج معين. يمكن لبعض أشكال التحسين تقليل مقدار الحساب المطلوب لتشغيل الاستدلال باستخدام نموذج ، مما يؤدي إلى تقليل زمن الوصول. يمكن أن يكون للكمون أيضًا تأثير على استهلاك الطاقة.
حاليًا ، يمكن استخدام التكميم لتقليل الكمون من خلال تبسيط العمليات الحسابية التي تحدث أثناء الاستدلال ، وربما على حساب بعض الدقة.
التوافق مع المسرع
يمكن لبعض مسرعات الأجهزة ، مثل Edge TPU ، تشغيل الاستدلال بسرعة كبيرة مع الطرز التي تم تحسينها بشكل صحيح.
بشكل عام ، تتطلب هذه الأنواع من الأجهزة نماذج يتم تحديدها كميًا بطريقة معينة. راجع وثائق كل مسرع للأجهزة لمعرفة المزيد حول متطلباتهم.
المفاضلات
من المحتمل أن تؤدي التحسينات إلى تغييرات في دقة النموذج ، والتي يجب أخذها في الاعتبار أثناء عملية تطوير التطبيق.
تعتمد تغييرات الدقة على النموذج الفردي الذي يتم تحسينه ، ويصعب التنبؤ به مسبقًا. بشكل عام ، ستفقد النماذج التي تم تحسينها للحجم أو زمن الانتقال قدرًا صغيرًا من الدقة. اعتمادًا على التطبيق الخاص بك ، قد يؤثر هذا وقد لا يؤثر على تجربة المستخدمين لديك. في حالات نادرة ، قد تكتسب بعض النماذج بعض الدقة نتيجة لعملية التحسين.
أنواع التحسين
يدعم TensorFlow Lite حاليًا التحسين من خلال التكميم والتقليم والتكتل.
هذه جزء من مجموعة أدوات تحسين نموذج TensorFlow ، والتي توفر موارد لتقنيات تحسين النموذج المتوافقة مع TensorFlow Lite.
توضيح
يعمل التكميم عن طريق تقليل دقة الأرقام المستخدمة لتمثيل معلمات النموذج ، والتي تكون افتراضيًا أرقام فاصلة عائمة 32 بت. ينتج عن هذا حجم نموذج أصغر وحساب أسرع.
الأنواع التالية من التكميم متوفرة في TensorFlow Lite:
تقنية | متطلبات البيانات | تخفيض حجم | دقة | الأجهزة المدعومة |
---|---|---|---|---|
تكميم float16 بعد التدريب | لايوجد بيانات | حتى 50٪ | ضياع ضئيل في الدقة | وحدة المعالجة المركزية ، وحدة معالجة الرسومات |
تكميم النطاق الديناميكي بعد التدريب | لايوجد بيانات | حتى 75٪ | أصغر خسارة في الدقة | وحدة المعالجة المركزية ، GPU (Android) |
تكميم صحيح بعد التدريب | عينة تمثيلية غير موسومة | حتى 75٪ | فقدان دقة صغيرة | وحدة المعالجة المركزية ، GPU (Android) ، EdgeTPU ، Hexagon DSP |
التدريب على الوعي الكمي | بيانات التدريب المسمى | حتى 75٪ | أصغر خسارة في الدقة | وحدة المعالجة المركزية ، GPU (Android) ، EdgeTPU ، Hexagon DSP |
تساعدك شجرة القرار التالية على تحديد مخططات التقسيم التي قد ترغب في استخدامها لنموذجك ، بناءً على حجم النموذج ودقته المتوقعة.
فيما يلي نتائج الكمون والدقة لتقدير ما بعد التدريب والتدريب الواعي بالتكميم على بعض النماذج. يتم قياس جميع أرقام وقت الاستجابة على أجهزة Pixel 2 باستخدام وحدة معالجة مركزية كبيرة واحدة. كلما تحسنت مجموعة الأدوات ، ستتحسن الأرقام هنا:
نموذج | دقة أعلى 1 (أصلي) | دقة أعلى 1 (بعد التدريب الكمي) | أعلى 1 دقة (التدريب على الوعي الكمي) | الكمون (الأصلي) (مللي ثانية) | الكمون (الكمي بعد التدريب) (مللي ثانية) | الكمون (التدريب على وعي الكمي) (مللي ثانية) | الحجم (الأصلي) (ميغا بايت) | الحجم (الأمثل) (ميغا بايت) |
---|---|---|---|---|---|---|---|---|
Mobilenet-v1-1-224 | 0.709 | 0.657 | 0.70 | 124 | 112 | 64 | 16.9 | 4.3 |
Mobilenet-v2-1-224 | 0.719 | 0.637 | 0.709 | 89 | 98 | 54 | 14 | 3.6 |
Inception_v3 | 0.78 | 0.772 | 0.775 | 1130 | 845 | 543 | 95.7 | 23.9 |
Resnet_v2_101 | 0.770 | 0.768 | غير متاح | 3973 | 2868 | غير متاح | 178.3 | 44.9 |
تكميم عدد صحيح كامل مع تنشيطات int16 وأوزان int8
التكميم مع عمليات التنشيط int16 هو مخطط تكميم صحيح كامل مع التنشيطات في int16 والأوزان في int8. يمكن لهذا الوضع تحسين دقة النموذج الكمي بالمقارنة مع مخطط تكميم العدد الصحيح الكامل مع كل من التنشيطات والأوزان في int8 مع الحفاظ على حجم نموذج مماثل. يوصى به عندما تكون عمليات التنشيط حساسة لعملية التكميم.
ملاحظة: تتوفر حاليًا تطبيقات kernel المرجعية غير المحسّنة فقط في TFLite لمخطط التقسيم هذا ، لذلك سيكون الأداء بطيئًا بشكل افتراضي مقارنة بنواة int8. يمكن حاليًا الوصول إلى المزايا الكاملة لهذا الوضع عبر أجهزة متخصصة أو برامج مخصصة.
فيما يلي نتائج الدقة لبعض الطرز التي تستفيد من هذا الوضع. نموذج نوع مقياس الدقة الدقة (تنشيطات float32) الدقة (عمليات تنشيط int8) الدقة (عمليات تنشيط int16) Wav2 حرف WER 6.7٪ 7.7٪ 7.2٪ DeepSpeech 0.5.1 (غير مسجل) CER 6.13٪ 43.67٪ 6.52٪ YoloV3 خريطة (IOU = 0.5) 0.577 0.563 0.574 MobileNetV1 دقة أعلى 1 0.7062 0.694 0.6936 MobileNetV2 دقة أعلى 1 0.718 0.7126 0.7137 موبايلبيرت F1 (تطابق تام) 88.81 (81.23) 2.08 (0) 88.73 (81.15)
تشذيب
يعمل التقليم عن طريق إزالة المعلمات داخل النموذج التي لها تأثير طفيف فقط على تنبؤاته. النماذج المشذبة لها نفس الحجم على القرص ، ولها نفس زمن انتقال وقت التشغيل ، ولكن يمكن ضغطها بشكل أكثر فاعلية. هذا يجعل التقليم تقنية مفيدة لتقليل حجم تنزيل النموذج.
في المستقبل ، سيوفر TensorFlow Lite تقليل زمن الوصول للنماذج المشذبة.
تجمع
يعمل التجميع عن طريق تجميع أوزان كل طبقة في نموذج في عدد محدد مسبقًا من المجموعات ، ثم مشاركة قيم النقطه الوسطى للأوزان التي تنتمي إلى كل مجموعة على حدة. هذا يقلل من عدد قيم الوزن الفريدة في النموذج ، وبالتالي يقلل من تعقيده.
نتيجة لذلك ، يمكن ضغط النماذج العنقودية بشكل أكثر فاعلية ، مما يوفر مزايا نشر مشابهة للتقليم.
سير عمل التطوير
كنقطة بداية ، تحقق مما إذا كانت النماذج في النماذج المستضافة يمكن أن تعمل مع تطبيقك. إذا لم يكن الأمر كذلك ، فإننا نوصي بأن يبدأ المستخدمون بأداة تكميم ما بعد التدريب لأن هذا قابل للتطبيق على نطاق واسع ولا يتطلب بيانات تدريب.
بالنسبة للحالات التي لا تتحقق فيها أهداف الدقة ووقت الاستجابة ، أو يكون دعم مسرع الأجهزة مهمًا ، فإن التدريب المدرك للتكميم هو الخيار الأفضل. راجع تقنيات التحسين الإضافية ضمن مجموعة أدوات تحسين نموذج TensorFlow .
إذا كنت ترغب في تقليل حجم النموذج بشكل أكبر ، فيمكنك تجربة التقليم و / أو التجميع قبل تحديد النماذج الخاصة بك.