إنشاء نماذج وتحويلها

تتضمّن وحدات التحكّم الدقيقة ذاكرة وصول عشوائي ومساحة تخزين محدودة، ما يفرض قيودًا على أحجام نماذج تعلُّم الآلة. بالإضافة إلى ذلك، لا تتوافق LiteRT for Microcontrollers حاليًا إلا مع مجموعة فرعية محدودة من العمليات، لذا لا يمكن استخدام جميع بنى النماذج.

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

للحصول على مثال شامل وقابل للتنفيذ حول إنشاء نموذج وتحويله، يمكنك الاطّلاع على مثال Hello World.

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

لتحويل نموذج TensorFlow مدرَّب ليعمل على وحدات التحكّم الدقيقة، عليك استخدام واجهة برمجة التطبيقات LiteRT converter Python. سيؤدي ذلك إلى تحويل النموذج إلى FlatBuffer، ما يقلّل من حجم النموذج ويعدّله لاستخدام عمليات LiteRT.

للحصول على أصغر حجم ممكن للنموذج، ننصحك باستخدام التكميم بعد التدريب.

التحويل إلى مصفوفة C

لا تتوافق العديد من منصات وحدات التحكّم الدقيقة مع نظام الملفات الأصلي. أسهل طريقة لاستخدام نموذج من برنامجك هي تضمينه كمصفوفة C وتجميعه في برنامجك.

سينشئ أمر Unix التالي ملف مصدر C يحتوي على نموذج LiteRT كصفيف char:

xxd -i converted_model.tflite > model_data.cc

ستبدو النتيجة مشابهة لما يلي:

unsigned char converted_model_tflite[] = {
  0x18, 0x00, 0x00, 0x00, 0x54, 0x46, 0x4c, 0x33, 0x00, 0x00, 0x0e, 0x00,
  // <Lines omitted>
};
unsigned int converted_model_tflite_len = 18200;

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

للاطّلاع على مثال حول كيفية تضمين نموذج واستخدامه في برنامجك، راجِع hello_world_test.cc في المثال Hello World.

بنية النموذج وتدريبه

عند تصميم نموذج لاستخدامه على وحدات التحكّم الدقيقة، من المهم مراعاة حجم النموذج وعبء العمل والعمليات المستخدَمة.

حجم النموذج

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

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

وحدة العمل

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

دعم العمليات

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

يمكن الاطّلاع على العمليات المتوافقة في الملف micro_mutable_ops_resolver.h