نماینده LiteRT Core ML اجرای مدلهای LiteRT را در چارچوب Core ML فعال میکند، که منجر به استنتاج سریعتر مدل در دستگاههای iOS میشود.
نسخه ها و دستگاه های iOS پشتیبانی شده:
iOS 12 به بعد. در نسخههای قدیمیتر iOS، Core ML به طور خودکار به CPU بازگشته است.
بهطور پیشفرض، Core ML delegate فقط در دستگاههای دارای SoC A12 و جدیدتر (iPhone Xs و جدیدتر) فعال میشود تا از موتور عصبی برای استنتاج سریعتر استفاده کند. اگر میخواهید از نماینده Core ML در دستگاههای قدیمیتر نیز استفاده کنید، لطفاً بهترین شیوهها را ببینید
مدل های پشتیبانی شده
نماینده Core ML در حال حاضر از مدل های شناور (FP32 و FP16) پشتیبانی می کند.
نماینده Core ML را در مدل خود امتحان کنید
نماینده Core ML در حال حاضر در نسخه شبانه LiteRT CocoaPods گنجانده شده است. برای استفاده از نمایندگی Core ML، غلاف LiteRT خود را تغییر دهید تا زیرمجموعه 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']
استفاده از نمایندگی Core ML در دستگاههای بدون موتور عصبی
بهطور پیشفرض، نماینده Core ML تنها در صورتی ایجاد میشود که دستگاه دارای موتور عصبی باشد، و اگر نماینده ایجاد نشود، null برمیگرداند. اگر میخواهید Core ML delegate را در محیطهای دیگر اجرا کنید (مثلاً شبیهساز)، هنگام ایجاد delegate در سوئیفت، .all به عنوان یک گزینه ارسال کنید. در C++ (و Objective-C)، می توانید TfLiteCoreMlDelegateAllDevices پاس کنید. مثال زیر نحوه انجام این کار را نشان می دهد:
هنگامی که نماینده Core ML ایجاد نمی شود، می توانید همچنان از Metal delegate برای دریافت مزایای عملکرد استفاده کنید. مثال زیر نحوه انجام این کار را نشان می دهد:
منطق ایجاد نماینده، شناسه دستگاه (به عنوان مثال iPhone11,1) را می خواند تا در دسترس بودن موتور عصبی آن را تعیین کند. برای جزئیات بیشتر کد را ببینید. از طرف دیگر، میتوانید مجموعه دستگاههای انکار خود را با استفاده از کتابخانههای دیگر مانند DeviceKit پیادهسازی کنید.
استفاده از نسخه قدیمی Core ML
اگرچه iOS 13 از Core ML 3 پشتیبانی می کند، اما زمانی که با مشخصات مدل Core ML 2 تبدیل شود، ممکن است این مدل بهتر کار کند. نسخه تبدیل هدف به طور پیشفرض روی آخرین نسخه تنظیم شده است، اما میتوانید با تنظیم coreMLVersion (در Swift، coreml_version در C API) در گزینه delegate به نسخه قدیمیتر، آن را تغییر دهید.
عملیات پشتیبانی شده
عملیات زیر توسط نماینده Core ML پشتیبانی می شود.
اضافه کنید
فقط اشکال خاصی قابل پخش هستند. در طرح تانسور Core ML، اشکال تانسور زیر قابل پخش هستند. [B, C, H, W] ، [B, C, 1, 1] ، [B, 1, H, W] ، [B, 1, 1, 1] .
میانگین پول 2D
Concat
الحاق باید در امتداد محور کانال انجام شود.
Conv2D
وزن و تعصب باید ثابت باشد.
DepthwiseConv2D
وزن و تعصب باید ثابت باشد.
کاملاً متصل (معروف به Dense یا InnerProduct)
وزن و سوگیری (در صورت وجود) باید ثابت باشد.
فقط از کیس تک دسته ای پشتیبانی می کند. ابعاد ورودی باید 1 باشد، به جز بعد آخر.
Hardswish
لجستیک (با نام مستعار Sigmoid)
MaxPool2D
آینه پد
فقط ورودی 4 بعدی با حالت REFLECT پشتیبانی می شود. بالشتک باید ثابت باشد و فقط برای ابعاد H و W مجاز است.
مول
فقط اشکال خاصی قابل پخش هستند. در طرح تانسور Core ML، اشکال تانسور زیر قابل پخش هستند. [B, C, H, W] ، [B, C, 1, 1] ، [B, 1, H, W] ، [B, 1, 1, 1] .
Pad و PadV2
فقط ورودی 4 بعدی پشتیبانی می شود. بالشتک باید ثابت باشد و فقط برای ابعاد H و W مجاز است.
Relu
ReluN1To1
Relu6
تغییر شکل دهید
فقط زمانی پشتیبانی می شود که نسخه Core ML هدف 2 باشد، در هنگام هدف قرار دادن Core ML 3 پشتیبانی نمی شود.
ResizeBilinear
سافت مکس
تنها
TransposeConv
وزن ها باید ثابت باشند.
بازخورد
برای مشکلات، لطفاً یک مشکل GitHub با تمام جزئیات لازم برای بازتولید ایجاد کنید.
سوالات متداول
اگر یک گراف حاوی عملیات پشتیبانی نشده باشد، آیا CoreML از بازگشت مجدد به CPU پشتیبانی می کند؟
بله
آیا نمایندگی CoreML در شبیه ساز iOS کار می کند؟
بله. این کتابخانه شامل اهداف x86 و x86_64 است، بنابراین میتواند بر روی یک شبیهساز اجرا شود، اما شما شاهد افزایش عملکرد در CPU نخواهید بود.
آیا نمایندگی LiteRT و CoreML از MacOS پشتیبانی می کند؟
LiteRT فقط روی iOS تست شده است اما MacOS تست نشده است.
آیا عملیات سفارشی LiteRT پشتیبانی می شود؟
خیر، نماینده CoreML از عملیات سفارشی پشتیبانی نمی کند و به CPU بازگشته است.
تاریخ آخرین بهروزرسانی 2025-07-28 بهوقت ساعت هماهنگ جهانی.
[[["درک آسان","easyToUnderstand","thumb-up"],["مشکلم را برطرف کرد","solvedMyProblem","thumb-up"],["غیره","otherUp","thumb-up"]],[["اطلاعاتی که نیاز دارم وجود ندارد","missingTheInformationINeed","thumb-down"],["بیشازحد پیچیده/ مراحل بسیار زیاد","tooComplicatedTooManySteps","thumb-down"],["قدیمی","outOfDate","thumb-down"],["مشکل ترجمه","translationIssue","thumb-down"],["مشکل کد / نمونهها","samplesCodeIssue","thumb-down"],["غیره","otherDown","thumb-down"]],["تاریخ آخرین بهروزرسانی 2025-07-28 بهوقت ساعت هماهنگ جهانی."],[],[],null,["# LiteRT Core ML delegate\n\nThe 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---------------------------------------------\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\n### Swift\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\n### Objective-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\n### C (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--------------\n\n### Using 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\n### Swift\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\n### Objective-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\n### C\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\n### Using 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\n### Swift\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\n### Objective-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\n### C\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\n### Using 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-------------\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--------\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\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\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)"]]