يتيح مندوب TensorFlow Lite Core ML تشغيل نماذج TensorFlow Lite على إطار عمل Core ML ، مما يؤدي إلى استنتاج أسرع للنموذج على أجهزة iOS.
إصدارات وأجهزة iOS المدعومة:
- iOS 12 والإصدارات الأحدث. في إصدارات iOS الأقدم، سيعود مندوب Core ML تلقائيًا إلى وحدة المعالجة المركزية.
- افتراضيًا، سيتم تمكين مندوب Core ML فقط على الأجهزة التي تحتوي على شريحة A12 SoC والإصدارات الأحدث (iPhone Xs والإصدارات الأحدث) لاستخدام Neural Engine لاستدلال أسرع. إذا كنت تريد استخدام مندوب Core ML أيضًا على الأجهزة القديمة، فيرجى الاطلاع على أفضل الممارسات
النماذج المدعومة
يدعم مندوب Core ML حاليًا النماذج العائمة (FP32 وFP16).
تجربة مندوب Core ML على النموذج الخاص بك
تم تضمين مندوب Core ML بالفعل في الإصدار الليلي من TensorFlow lite CocoaPods. لاستخدام مندوب Core ML، قم بتغيير حافظة TensorFlow lite الخاصة بك لتضمين CoreML
محدد المواصفات في Podfile
الخاص بك.
target 'YourProjectName'
pod 'TensorFlowLiteSwift/CoreML', '~> 2.4.0' # Or TensorFlowLiteObjC/CoreML
أو
# Particularily useful when you also want to include 'Metal' subspec.
target 'YourProjectName'
pod 'TensorFlowLiteSwift', '~> 2.4.0', :subspecs => ['CoreML']
سويفت
let coreMLDelegate = CoreMLDelegate() var interpreter: Interpreter // Core ML delegate will only be created for devices with Neural Engine if coreMLDelegate != nil { interpreter = try Interpreter(modelPath: modelPath, delegates: [coreMLDelegate!]) } else { interpreter = try Interpreter(modelPath: modelPath) }
ج موضوعية
// Import module when using CocoaPods with module support @import TFLTensorFlowLite; // Or import following headers manually # import "tensorflow/lite/objc/apis/TFLCoreMLDelegate.h" # import "tensorflow/lite/objc/apis/TFLTensorFlowLite.h" // Initialize Core ML delegate TFLCoreMLDelegate* coreMLDelegate = [[TFLCoreMLDelegate alloc] init]; // Initialize interpreter with model path and Core ML delegate TFLInterpreterOptions* options = [[TFLInterpreterOptions alloc] init]; NSError* error = nil; TFLInterpreter* interpreter = [[TFLInterpreter alloc] initWithModelPath:modelPath options:options delegates:@[ coreMLDelegate ] error:&error]; if (error != nil) { /* Error handling... */ } if (![interpreter allocateTensorsWithError:&error]) { /* Error handling... */ } if (error != nil) { /* Error handling... */ } // Run inference ...
ج (حتى 2.3.0)
#include "tensorflow/lite/delegates/coreml/coreml_delegate.h" // Initialize interpreter with model TfLiteModel* model = TfLiteModelCreateFromFile(model_path); // Initialize interpreter with Core ML delegate TfLiteInterpreterOptions* options = TfLiteInterpreterOptionsCreate(); TfLiteDelegate* delegate = TfLiteCoreMlDelegateCreate(NULL); // default config TfLiteInterpreterOptionsAddDelegate(options, delegate); TfLiteInterpreterOptionsDelete(options); TfLiteInterpreter* interpreter = TfLiteInterpreterCreate(model, options); TfLiteInterpreterAllocateTensors(interpreter); // Run inference ... /* ... */ // Dispose resources when it is no longer used. // Add following code to the section where you dispose of the delegate // (e.g. `dealloc` of class). TfLiteInterpreterDelete(interpreter); TfLiteCoreMlDelegateDelete(delegate); TfLiteModelDelete(model);
أفضل الممارسات
استخدام مندوب Core ML على الأجهزة التي لا تحتوي على المحرك العصبي
افتراضيًا، لن يتم إنشاء مفوض Core ML إلا إذا كان الجهاز يحتوي على محرك عصبي، وسيعود null
إذا لم يتم إنشاء المفوض. إذا كنت تريد تشغيل مندوب Core ML في بيئات أخرى (على سبيل المثال، جهاز محاكاة)، فقم بتمرير .all
كخيار أثناء إنشاء المفوض في Swift. في لغة C++ (و Objective-C)، يمكنك تمرير TfLiteCoreMlDelegateAllDevices
. يوضح المثال التالي كيفية القيام بذلك:
سويفت
var options = CoreMLDelegate.Options() options.enabledDevices = .all let coreMLDelegate = CoreMLDelegate(options: options)! let interpreter = try Interpreter(modelPath: modelPath, delegates: [coreMLDelegate])
ج موضوعية
TFLCoreMLDelegateOptions* coreMLOptions = [[TFLCoreMLDelegateOptions alloc] init]; coreMLOptions.enabledDevices = TFLCoreMLDelegateEnabledDevicesAll; TFLCoreMLDelegate* coreMLDelegate = [[TFLCoreMLDelegate alloc] initWithOptions:coreMLOptions]; // Initialize interpreter with delegate
ج
TfLiteCoreMlDelegateOptions options; options.enabled_devices = TfLiteCoreMlDelegateAllDevices; TfLiteDelegate* delegate = TfLiteCoreMlDelegateCreate(&options); // Initialize interpreter with delegate
استخدام مندوب Metal(GPU) كبديل.
عندما لا يتم إنشاء مندوب Core ML، بدلاً من ذلك، لا يزال بإمكانك استخدام مندوب Metal للحصول على فوائد الأداء. يوضح المثال التالي كيفية القيام بذلك:
سويفت
var delegate = CoreMLDelegate() if delegate == nil { delegate = MetalDelegate() // Add Metal delegate options if necessary. } let interpreter = try Interpreter(modelPath: modelPath, delegates: [delegate!])
ج موضوعية
TFLDelegate* delegate = [[TFLCoreMLDelegate alloc] init]; if (!delegate) { // Add Metal delegate options if necessary delegate = [[TFLMetalDelegate alloc] init]; } // Initialize interpreter with delegate
ج
TfLiteCoreMlDelegateOptions options = {}; delegate = TfLiteCoreMlDelegateCreate(&options); if (delegate == NULL) { // Add Metal delegate options if necessary delegate = TFLGpuDelegateCreate(NULL); } // Initialize interpreter with delegate
يقرأ منطق إنشاء المفوض معرف جهاز الجهاز (مثل iPhone11,1) لتحديد مدى توفر المحرك العصبي الخاص به. انظر الكود لمزيد من التفاصيل. وبدلاً من ذلك، يمكنك تنفيذ مجموعتك الخاصة من أجهزة قائمة الحظر باستخدام مكتبات أخرى مثل DeviceKit .
استخدام إصدار Core ML الأقدم
على الرغم من أن iOS 13 يدعم Core ML 3، إلا أن النموذج قد يعمل بشكل أفضل عند تحويله بمواصفات طراز Core ML 2. يتم تعيين إصدار التحويل المستهدف على أحدث إصدار افتراضيًا، ولكن يمكنك تغيير ذلك عن طريق تعيين coreMLVersion
(في Swift، coreml_version
في C API) في خيار التفويض إلى الإصدار الأقدم.
العمليات المدعومة
يتم دعم العمليات التالية بواسطة مندوب Core ML.
- يضيف
- أشكال معينة فقط هي القابلة للبث. في تخطيط موتر Core ML، تكون أشكال الموتر التالية قابلة للبث.
[B, C, H, W]
،[B, C, 1, 1]
،[B, 1, H, W]
،[B, 1, 1, 1]
.
- أشكال معينة فقط هي القابلة للبث. في تخطيط موتر Core ML، تكون أشكال الموتر التالية قابلة للبث.
- متوسط Pool2D
- كونكات
- وينبغي أن يتم التسلسل على طول محور القناة.
- Conv2D
- يجب أن تكون الأوزان والتحيز ثابتة.
- DepthwiseConv2D
- يجب أن تكون الأوزان والتحيز ثابتة.
- متصل بالكامل (ويُعرف أيضًا باسم Dense أو InnerProduct)
- يجب أن تكون الأوزان والتحيز (إن وجدت) ثابتة.
- يدعم فقط حالة الدفعة الواحدة. يجب أن تكون أبعاد الإدخال 1، باستثناء البعد الأخير.
- هاردويش
- لوجستية (ويعرف أيضًا باسم Sigmoid)
- MaxPool2D
- MirrorPad
- يتم دعم الإدخال 4D فقط مع وضع
REFLECT
. يجب أن تكون الحشوة ثابتة، ولا يُسمح بها إلا للأبعاد H وW.
- يتم دعم الإدخال 4D فقط مع وضع
- مول
- أشكال معينة فقط هي القابلة للبث. في تخطيط موتر Core ML، تكون أشكال الموتر التالية قابلة للبث.
[B, C, H, W]
،[B, C, 1, 1]
،[B, 1, H, W]
،[B, 1, 1, 1]
.
- أشكال معينة فقط هي القابلة للبث. في تخطيط موتر Core ML، تكون أشكال الموتر التالية قابلة للبث.
- الوسادة و PadV2
- يتم دعم الإدخال 4D فقط. يجب أن تكون الحشوة ثابتة، ولا يُسمح بها إلا للأبعاد H وW.
- ريلو
- ReluN1To1
- ريلو6
- إعادة تشكيل
- مدعوم فقط عندما يكون إصدار Core ML المستهدف هو 2، وغير مدعوم عند استهداف Core ML 3.
- تغيير الحجمBilinear
- سوفت ماكس
- تانه
- TransposeConv
- يجب أن تكون الأوزان ثابتة.
تعليق
بالنسبة للمشكلات، يرجى إنشاء مشكلة GitHub مع جميع التفاصيل اللازمة لإعادة إنتاجها.
التعليمات
- هل يقوم CoreML بتفويض الدعم الاحتياطي لوحدة المعالجة المركزية إذا كان الرسم البياني يحتوي على عمليات غير مدعومة؟
- نعم
- هل يعمل مندوب CoreML على iOS Simulator؟
- نعم. تتضمن المكتبة أهداف x86 وx86_64 بحيث يمكن تشغيلها على جهاز محاكاة، لكنك لن ترى زيادة في الأداء مقارنة بوحدة المعالجة المركزية.
- هل يدعم مندوب TensorFlow Lite وCoreML نظام التشغيل MacOS؟
- يتم اختبار TensorFlow Lite فقط على نظام التشغيل iOS وليس على نظام التشغيل MacOS.
- هل يتم دعم عمليات TF Lite المخصصة؟
- لا، لا يدعم مندوب CoreML العمليات المخصصة وسيعود إلى وحدة المعالجة المركزية (CPU).
واجهات برمجة التطبيقات
- مندوب ML الأساسي Swift API
- واجهة برمجة تطبيقات ML مندوب C الأساسية
- يمكن استخدام هذا لرموز Objective-C. ~~~