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

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

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

للحصول على مثال شامل وقابل للتشغيل لبناء نموذج وتحويله، راجع مثال Hello World .

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

لتحويل نموذج TensorFlow المُدرب ليعمل على وحدات التحكم الدقيقة، يجب عليك استخدام واجهة برمجة تطبيقات Python API الخاصة بمحول TensorFlow Lite . سيؤدي هذا إلى تحويل النموذج إلى FlatBuffer ، وتقليل حجم النموذج، وتعديله لاستخدام عمليات TensorFlow Lite.

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

تحويل إلى مجموعة C

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

سيقوم أمر unix التالي بإنشاء ملف مصدر C يحتوي على نموذج TensorFlow Lite كمصفوفة 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 .

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

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

حجم النموذج

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

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

عبء العمل

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

دعم عملية

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

يمكن رؤية العمليات المدعومة في الملف micro_mutable_ops_resolver.h

,

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

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

للحصول على مثال شامل وقابل للتشغيل لبناء نموذج وتحويله، راجع مثال Hello World .

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

لتحويل نموذج TensorFlow المُدرب ليعمل على وحدات التحكم الدقيقة، يجب عليك استخدام واجهة برمجة تطبيقات Python API الخاصة بمحول TensorFlow Lite . سيؤدي هذا إلى تحويل النموذج إلى FlatBuffer ، وتقليل حجم النموذج، وتعديله لاستخدام عمليات TensorFlow Lite.

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

تحويل إلى مجموعة C

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

سيقوم أمر unix التالي بإنشاء ملف مصدر C يحتوي على نموذج TensorFlow Lite كمصفوفة 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 .

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

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

حجم النموذج

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

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

عبء العمل

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

دعم عملية

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

يمكن رؤية العمليات المدعومة في الملف micro_mutable_ops_resolver.h