مندوب Tensorflow Lite Core ML

يتيح مندوب 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] .
  • متوسط ​​Pool2D
  • كونكات
    • وينبغي أن يتم التسلسل على طول محور القناة.
  • Conv2D
    • يجب أن تكون الأوزان والتحيز ثابتة.
  • DepthwiseConv2D
    • يجب أن تكون الأوزان والتحيز ثابتة.
  • متصل بالكامل (ويُعرف أيضًا باسم Dense أو InnerProduct)
    • يجب أن تكون الأوزان والتحيز (إن وجدت) ثابتة.
    • يدعم فقط حالة الدفعة الواحدة. يجب أن تكون أبعاد الإدخال 1، باستثناء البعد الأخير.
  • هاردويش
  • لوجستية (ويعرف أيضًا باسم Sigmoid)
  • MaxPool2D
  • MirrorPad
    • يتم دعم الإدخال 4D فقط مع وضع REFLECT . يجب أن تكون الحشوة ثابتة، ولا يُسمح بها إلا للأبعاد H وW.
  • مول
    • أشكال معينة فقط هي القابلة للبث. في تخطيط موتر Core ML، تكون أشكال الموتر التالية قابلة للبث. [B, C, H, W] ، [B, C, 1, 1] ، [B, 1, H, W] ، [B, 1, 1, 1] .
  • الوسادة و 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).

واجهات برمجة التطبيقات