LiteRT Core ML delegesi, LiteRT modellerinin çalıştırılmasını sağlar. Temel ML çerçevesi iOS cihazlarda model çıkarımı daha hızlı olur.
Desteklenen iOS sürümleri ve cihazlar:
- iOS 12 ve sonraki sürümler. Daha eski iOS sürümlerinde Core ML delegesi şu işlemleri gerçekleştirecektir: otomatik olarak CPU'ya geri döner.
- Varsayılan olarak, Core ML yetki verilmiş olması yalnızca A12 SoC'ye sahip cihazlarda etkinleştirilir. ve sonraki sürümleri (iPhone Xs ve sonraki modeller) daha hızlı çıkarım için Nöral Engine'i kullanabilir. Core ML temsilcinizi eski cihazlarda da kullanmak istiyorsanız lütfen şu makaleye göz atın: en iyi uygulamalar
Desteklenen modeller
Temel makine öğrenimi temsilcisi şu anda kayan (FP32 ve FP16) modelleri desteklemektedir.
Core ML delegesini kendi modelinizde deneme
Temel makine öğrenimi delegesi zaten LiteRT'in gecelik sürümünde yer alıyor
CocoaPods'a gidin. Core ML yetkisini kullanmak için LiteRT kapsülünüzü şunu içerecek şekilde değiştirin:
Podfile
içindeki CoreML
alt spesifikasyonu.
target 'YourProjectName'
pod 'TensorFlowLiteSwift/CoreML', '~> 2.4.0' # Or TensorFlowLiteObjC/CoreML
VEYA
# Particularily useful when you also want to include 'Metal' subspec.
target 'YourProjectName'
pod 'TensorFlowLiteSwift', '~> 2.4.0', :subspecs => ['CoreML']
Swift
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) }
Objective-C
// 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 ...
C (2.3.0'a kadar)
#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);
En iyi uygulamalar
Nöral Engine olmayan cihazlarda Core ML yetkisini kullanma
Varsayılan olarak Core ML yetki verilmiş kişi yalnızca cihazda nöral uygulama varsa oluşturulur.
Arama motoru, yetki verilmiş kullanıcı oluşturulmazsa null
değerini döndürür. Şunu istiyorsanız:
diğer ortamlarda (ör. simülatör) Core ML delegenizi çalıştırma ve .all
ayarını geçme
seçeneğini kullanabilirsiniz. C++ (ve Objective-C) üzerinde ise
TfLiteCoreMlDelegateAllDevices
başarılı. Aşağıdaki örnekte bunun nasıl yapılacağı gösterilmektedir:
Swift
var options = CoreMLDelegate.Options() options.enabledDevices = .all let coreMLDelegate = CoreMLDelegate(options: options)! let interpreter = try Interpreter(modelPath: modelPath, delegates: [coreMLDelegate])
Objective-C
TFLCoreMLDelegateOptions* coreMLOptions = [[TFLCoreMLDelegateOptions alloc] init]; coreMLOptions.enabledDevices = TFLCoreMLDelegateEnabledDevicesAll; TFLCoreMLDelegate* coreMLDelegate = [[TFLCoreMLDelegate alloc] initWithOptions:coreMLOptions]; // Initialize interpreter with delegate
C
TfLiteCoreMlDelegateOptions options; options.enabled_devices = TfLiteCoreMlDelegateAllDevices; TfLiteDelegate* delegate = TfLiteCoreMlDelegateCreate(&options); // Initialize interpreter with delegate
Metal(GPU) yetkilendirmesini yedek olarak kullanma.
Core ML delegesi oluşturulmadığında alternatif olarak şunu da kullanabilirsiniz: Metal delegesi: avantajları ön plana çıkarırız. Aşağıdaki örnekte bunun nasıl yapılacağı gösterilmektedir:
Swift
var delegate = CoreMLDelegate() if delegate == nil { delegate = MetalDelegate() // Add Metal delegate options if necessary. } let interpreter = try Interpreter(modelPath: modelPath, delegates: [delegate!])
Objective-C
TFLDelegate* delegate = [[TFLCoreMLDelegate alloc] init]; if (!delegate) { // Add Metal delegate options if necessary delegate = [[TFLMetalDelegate alloc] init]; } // Initialize interpreter with delegate
C
TfLiteCoreMlDelegateOptions options = {}; delegate = TfLiteCoreMlDelegateCreate(&options); if (delegate == NULL) { // Add Metal delegate options if necessary delegate = TFLGpuDelegateCreate(NULL); } // Initialize interpreter with delegate
Yetki verilen oluşturma mantığı, cihazın makine kimliğini (ör.iPhone11,1) okur. kullanılabilirliğini belirleyecek. Bkz. kod inceleyebilirsiniz. Alternatif olarak kendi ret listesi grubunuzu uygulayabilirsiniz gibi diğer kitaplıkları kullanan cihazlar DeviceKit.
Eski Core ML sürümünü kullanma
iOS 13, Core ML 3'ü desteklese de
Core ML 2 model spesifikasyonuyla dönüştürülmüştür. Hedef dönüşüm sürümü:
varsayılan olarak en son sürüme ayarlanır, ancak
coreMLVersion
(Swift'te, C API'de coreml_version
)
eski sürümü kullanıyor.
Desteklenen operasyonlar
Aşağıdaki işlemler, Core ML delegesi tarafından desteklenir.
- Ekle
- Yalnızca belirli şekiller yayınlanabilir. Core ML tensörü düzeninde
tensor şekilleri
yayınlanabilir.
[B, C, H, W]
,[B, C, 1, 1]
,[B, 1, H, W]
,[B, 1, 1, 1]
.
- Yalnızca belirli şekiller yayınlanabilir. Core ML tensörü düzeninde
tensor şekilleri
yayınlanabilir.
- OrtalamaHavuz2D
- Concat
- Birleştirme işlemi kanal ekseni boyunca yapılmalıdır.
- Dönş2D
- Ağırlıklar ve ağırlık sabit olmalıdır.
- DepthwardDönş2D
- Ağırlıklar ve ağırlık sabit olmalıdır.
- FullyConnected (Yoğun veya InnerProduct olarak da bilinir)
- Ağırlıklar ve ağırlık (varsa) sabit olmalıdır.
- Yalnızca tekli toplu kılıfları destekler. Giriş boyutları 1 olmalıdır, ancak şunlar hariçtir: son boyutu seçin.
- Sert
- Lojistik (Sigmoid olarak da bilinir)
- Maks. havuz 2D
- MirrorPad
- Yalnızca
REFLECT
modunda 4D giriş desteklenir. Dolgu sabittir ve yalnızca Y ve W boyutlarında izin verilir.
- Yalnızca
- Mul
- Yalnızca belirli şekiller yayınlanabilir. Core ML tensörü düzeninde
tensor şekilleri
yayınlanabilir.
[B, C, H, W]
,[B, C, 1, 1]
,[B, 1, H, W]
,[B, 1, 1, 1]
.
- Yalnızca belirli şekiller yayınlanabilir. Core ML tensörü düzeninde
tensor şekilleri
yayınlanabilir.
- Pad ve PadV2
- Yalnızca 4D giriş desteklenir. Dolgu sabit olmalıdır ve yalnızca Y ve W boyutlarında izin verilir.
- Relu
- ReluN1To1
- Relu6
- Yeniden şekillendir
- Yalnızca hedef Core ML sürümü 2 olduğunda desteklenir, Core ML 3'ü hedefler.
- ResizeBilinear
- SoftMax
- Tanh
- TransposeConv
- Ağırlıklar sabit olmalıdır.
Geri bildirim
Sorunlar için lütfen bir GitHub gerekli tüm ayrıntıları dahil edin.
SSS
- Bir grafikte desteklenmeyen bir CPU'ya izin veriliyorsa CoreML de CPU'ya yedek uygulamayı destekliyor mu?
Peki ya?
- Evet
- CoreML delegesi iOS Simülatöründe çalışır mı?
- Evet. Kitaplıkta çalıştırılabilmesi için x86 ve x86_64 hedefleri içerir ancak CPU üzerinde performans artışı görmezsiniz.
- LiteRT ve CoreML delegesi MacOS'i destekliyor mu?
- LiteRT yalnızca iOS'te test edilir, MacOS'te test edilmez.
- Özel LiteRT işlemleri destekleniyor mu?
- Hayır, CoreML temsilcisi özel işlemleri desteklemez ve CPU.