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']
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:
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:
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].
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.
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].
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.
[[["Anlaması kolay","easyToUnderstand","thumb-up"],["Sorunumu çözdü","solvedMyProblem","thumb-up"],["Diğer","otherUp","thumb-up"]],[["İhtiyacım olan bilgiler yok","missingTheInformationINeed","thumb-down"],["Çok karmaşık / çok fazla adım var","tooComplicatedTooManySteps","thumb-down"],["Güncel değil","outOfDate","thumb-down"],["Çeviri sorunu","translationIssue","thumb-down"],["Örnek veya kod sorunu","samplesCodeIssue","thumb-down"],["Diğer","otherDown","thumb-down"]],["Son güncelleme tarihi: 2025-07-24 UTC."],[],[],null,["The LiteRT Core ML delegate enables running LiteRT models on\n[Core ML framework](https://developer.apple.com/documentation/coreml), which\nresults in faster model inference on iOS devices.\n| **Note:** This delegate is in experimental (beta) phase. It is available from LiteRT 2.4.0 and latest nightly releases.\n| **Note:** Core ML delegate supports Core ML version 2 and later.\n\n**Supported iOS versions and devices:**\n\n- iOS 12 and later. In the older iOS versions, Core ML delegate will automatically fallback to CPU.\n- By default, Core ML delegate will only be enabled on devices with A12 SoC and later (iPhone Xs and later) to use Neural Engine for faster inference. If you want to use Core ML delegate also on the older devices, please see [best practices](#best_practices)\n\n**Supported models**\n\nThe Core ML delegate currently supports float (FP32 and FP16) models.\n\nTrying the Core ML delegate on your own model\n\nThe Core ML delegate is already included in nightly release of LiteRT\nCocoaPods. To use Core ML delegate, change your LiteRT pod to include\nsubspec `CoreML` in your `Podfile`.\n**Note:** If you want to use C API instead of Objective-C API, you can include `TensorFlowLiteC/CoreML` pod to do so. \n\n target 'YourProjectName'\n pod 'TensorFlowLiteSwift/CoreML', '~\u003e 2.4.0' # Or TensorFlowLiteObjC/CoreML\n\nOR \n\n # Particularily useful when you also want to include 'Metal' subspec.\n target 'YourProjectName'\n pod 'TensorFlowLiteSwift', '~\u003e 2.4.0', :subspecs =\u003e ['CoreML']\n\n**Note:** Core ML delegate can also use C API for Objective-C code. Prior to LiteRT 2.4.0 release, this was the only option. \n\nSwift\n\n\u003cbr /\u003e\n\n```swift\n let coreMLDelegate = CoreMLDelegate()\n var interpreter: Interpreter\n\n // Core ML delegate will only be created for devices with Neural Engine\n if coreMLDelegate != nil {\n interpreter = try Interpreter(modelPath: modelPath,\n delegates: [coreMLDelegate!])\n } else {\n interpreter = try Interpreter(modelPath: modelPath)\n }\n \n```\n\n\u003cbr /\u003e\n\nObjective-C\n\n\u003cbr /\u003e\n\n```objective-c\n // Import module when using CocoaPods with module support\n @import TFLTensorFlowLite;\n\n // Or import following headers manually\n # import \"tensorflow/lite/objc/apis/TFLCoreMLDelegate.h\"\n # import \"tensorflow/lite/objc/apis/TFLTensorFlowLite.h\"\n\n // Initialize Core ML delegate\n TFLCoreMLDelegate* coreMLDelegate = [[TFLCoreMLDelegate alloc] init];\n\n // Initialize interpreter with model path and Core ML delegate\n TFLInterpreterOptions* options = [[TFLInterpreterOptions alloc] init];\n NSError* error = nil;\n TFLInterpreter* interpreter = [[TFLInterpreter alloc]\n initWithModelPath:modelPath\n options:options\n delegates:@[ coreMLDelegate ]\n error:&error];\n if (error != nil) { /* Error handling... */ }\n\n if (![interpreter allocateTensorsWithError:&error]) { /* Error handling... */ }\n if (error != nil) { /* Error handling... */ }\n\n // Run inference ...\n \n```\n\n\u003cbr /\u003e\n\nC (Until 2.3.0)\n\n\u003cbr /\u003e\n\n```c\n #include \"tensorflow/lite/delegates/coreml/coreml_delegate.h\"\n\n // Initialize interpreter with model\n TfLiteModel* model = TfLiteModelCreateFromFile(model_path);\n\n // Initialize interpreter with Core ML delegate\n TfLiteInterpreterOptions* options = TfLiteInterpreterOptionsCreate();\n TfLiteDelegate* delegate = TfLiteCoreMlDelegateCreate(NULL); // default config\n TfLiteInterpreterOptionsAddDelegate(options, delegate);\n TfLiteInterpreterOptionsDelete(options);\n\n TfLiteInterpreter* interpreter = TfLiteInterpreterCreate(model, options);\n\n TfLiteInterpreterAllocateTensors(interpreter);\n\n // Run inference ...\n\n /* ... */\n\n // Dispose resources when it is no longer used.\n // Add following code to the section where you dispose of the delegate\n // (e.g. `dealloc` of class).\n\n TfLiteInterpreterDelete(interpreter);\n TfLiteCoreMlDelegateDelete(delegate);\n TfLiteModelDelete(model);\n \n```\n\n\u003cbr /\u003e\n\nBest practices\n\nUsing Core ML delegate on devices without Neural Engine\n\nBy default, Core ML delegate will only be created if the device has Neural\nEngine, and will return `null` if the delegate is not created. If you want to\nrun Core ML delegate on other environments (for example, simulator), pass `.all`\nas an option while creating delegate in Swift. On C++ (and Objective-C), you can\npass `TfLiteCoreMlDelegateAllDevices`. Following example shows how to do this: \n\nSwift\n\n\u003cbr /\u003e\n\n```swift\n var options = CoreMLDelegate.Options()\n options.enabledDevices = .all\n let coreMLDelegate = CoreMLDelegate(options: options)!\n let interpreter = try Interpreter(modelPath: modelPath,\n delegates: [coreMLDelegate])\n \n```\n\n\u003cbr /\u003e\n\nObjective-C\n\n\u003cbr /\u003e\n\n```objective-c\n TFLCoreMLDelegateOptions* coreMLOptions = [[TFLCoreMLDelegateOptions alloc] init];\n coreMLOptions.enabledDevices = TFLCoreMLDelegateEnabledDevicesAll;\n TFLCoreMLDelegate* coreMLDelegate = [[TFLCoreMLDelegate alloc]\n initWithOptions:coreMLOptions];\n\n // Initialize interpreter with delegate\n \n```\n\n\u003cbr /\u003e\n\nC\n\n\u003cbr /\u003e\n\n```c\n TfLiteCoreMlDelegateOptions options;\n options.enabled_devices = TfLiteCoreMlDelegateAllDevices;\n TfLiteDelegate* delegate = TfLiteCoreMlDelegateCreate(&options);\n // Initialize interpreter with delegate\n \n```\n\n\u003cbr /\u003e\n\nUsing Metal(GPU) delegate as a fallback.\n\nWhen the Core ML delegate is not created, alternatively you can still use\n[Metal delegate](../performance/gpu#ios) to get\nperformance benefits. Following example shows how to do this: \n\nSwift\n\n\u003cbr /\u003e\n\n```swift\n var delegate = CoreMLDelegate()\n if delegate == nil {\n delegate = MetalDelegate() // Add Metal delegate options if necessary.\n }\n\n let interpreter = try Interpreter(modelPath: modelPath,\n delegates: [delegate!])\n \n```\n\n\u003cbr /\u003e\n\nObjective-C\n\n\u003cbr /\u003e\n\n```objective-c\n TFLDelegate* delegate = [[TFLCoreMLDelegate alloc] init];\n if (!delegate) {\n // Add Metal delegate options if necessary\n delegate = [[TFLMetalDelegate alloc] init];\n }\n // Initialize interpreter with delegate\n \n```\n\n\u003cbr /\u003e\n\nC\n\n\u003cbr /\u003e\n\n```c\n TfLiteCoreMlDelegateOptions options = {};\n delegate = TfLiteCoreMlDelegateCreate(&options);\n if (delegate == NULL) {\n // Add Metal delegate options if necessary\n delegate = TFLGpuDelegateCreate(NULL);\n }\n // Initialize interpreter with delegate\n \n```\n\n\u003cbr /\u003e\n\nThe delegate creation logic reads device's machine id (e.g. iPhone11,1) to\ndetermine its Neural Engine availability. See the\n[code](https://github.com/tensorflow/tensorflow/blob/master/tensorflow/lite/delegates/coreml/coreml_delegate.mm)\nfor more detail. Alternatively, you can implement your own set of denylist\ndevices using other libraries such as\n[DeviceKit](https://github.com/devicekit/DeviceKit).\n\nUsing older Core ML version\n\nAlthough iOS 13 supports Core ML 3, the model might work better when it is\nconverted with Core ML 2 model specification. The target conversion version is\nset to the latest version by default, but you can change this by setting\n`coreMLVersion` (in Swift, `coreml_version` in C API) in the delegate option to\nolder version.\n\nSupported ops\n\nFollowing ops are supported by the Core ML delegate.\n\n- Add\n - Only certain shapes are broadcastable. In Core ML tensor layout, following tensor shapes are broadcastable. `[B, C, H, W]`, `[B, C, 1,\n 1]`, `[B, 1, H, W]`, `[B, 1, 1, 1]`.\n- AveragePool2D\n- Concat\n - Concatenation should be done along the channel axis.\n- Conv2D\n - Weights and bias should be constant.\n- DepthwiseConv2D\n - Weights and bias should be constant.\n- FullyConnected (aka Dense or InnerProduct)\n - Weights and bias (if present) should be constant.\n - Only supports single-batch case. Input dimensions should be 1, except the last dimension.\n- Hardswish\n- Logistic (aka Sigmoid)\n- MaxPool2D\n- MirrorPad\n - Only 4D input with `REFLECT` mode is supported. Padding should be constant, and is only allowed for H and W dimensions.\n- Mul\n - Only certain shapes are broadcastable. In Core ML tensor layout, following tensor shapes are broadcastable. `[B, C, H, W]`, `[B, C, 1,\n 1]`, `[B, 1, H, W]`, `[B, 1, 1, 1]`.\n- Pad and PadV2\n - Only 4D input is supported. Padding should be constant, and is only allowed for H and W dimensions.\n- Relu\n- ReluN1To1\n- Relu6\n- Reshape\n - Only supported when target Core ML version is 2, not supported when targeting Core ML 3.\n- ResizeBilinear\n- SoftMax\n- Tanh\n- TransposeConv\n - Weights should be constant.\n\nFeedback\n\nFor issues, please create a\n[GitHub](https://github.com/tensorflow/tensorflow/issues/new?template=50-other-issues.md)\nissue with all the necessary details to reproduce.\n\nFAQ\n\n- Does CoreML delegate support fallback to CPU if a graph contains unsupported ops?\n - Yes\n- Does CoreML delegate work on iOS Simulator?\n - Yes. The library includes x86 and x86_64 targets so it can run on a simulator, but you will not see performance boost over CPU.\n- Does LiteRT and CoreML delegate support MacOS?\n - LiteRT is only tested on iOS but not MacOS.\n- Is custom LiteRT ops supported?\n - No, CoreML delegate does not support custom ops and they will fallback to CPU.\n\nAPIs\n\n- [Core ML delegate Swift API](https://github.com/tensorflow/tensorflow/blob/master/tensorflow/lite/swift/Sources/CoreMLDelegate.swift)\n- [Core ML delegate C API](https://github.com/tensorflow/tensorflow/blob/master/tensorflow/lite/delegates/coreml/coreml_delegate.h)"]]