Bộ uỷ quyền công nghệ học máy LiteRT cho phép chạy các mô hình LiteRT trên
khung ML cốt lõi,
giúp suy luận mô hình nhanh hơn trên thiết bị iOS.
Các phiên bản và thiết bị iOS được hỗ trợ:
iOS 12 trở lên. Trong các phiên bản iOS cũ hơn, tính năng uỷ quyền Học máy Core sẽ
tự động dự phòng sang CPU.
Theo mặc định, tính năng uỷ quyền Học máy Core sẽ chỉ được bật trên các thiết bị có SoC A12
trở lên (iPhone Xs trở lên) để sử dụng Neural Engine nhằm suy luận nhanh hơn.
Nếu bạn cũng muốn sử dụng tính năng uỷ quyền Học máy Core trên các thiết bị cũ, vui lòng xem
các phương pháp hay nhất
Mô hình được hỗ trợ
Đại biểu Core ML hiện hỗ trợ các mô hình độ chính xác đơn (FP32 và FP16).
Dùng thử tính năng uỷ quyền máy học cốt lõi trên mô hình của riêng bạn
Đại biểu công nghệ Core ML đã có trong bản phát hành LiteRT hằng đêm
CocoaPods. Để sử dụng uỷ quyền học máy Core, hãy thay đổi nhóm LiteRT để đưa vào
phụ đề CoreML trong Podfile của bạn.
target 'YourProjectName'
pod 'TensorFlowLiteSwift/CoreML', '~> 2.4.0' # Or TensorFlowLiteObjC/CoreML
OR
# Particularily useful when you also want to include 'Metal' subspec.
target 'YourProjectName'
pod 'TensorFlowLiteSwift', '~> 2.4.0', :subspecs => ['CoreML']
Sử dụng tính năng uỷ quyền học máy Core trên các thiết bị không có Neural Engine
Theo mặc định, công cụ uỷ quyền cho công nghệ học máy Core sẽ chỉ được tạo nếu thiết bị có Neural
Engine và sẽ trả về null nếu không tạo uỷ quyền. Nếu bạn muốn
chạy uỷ quyền ML Core trên các môi trường khác (ví dụ: trình mô phỏng), truyền .all
làm một tuỳ chọn khi tạo uỷ quyền trong Swift. Trên C++ (và Object-C), bạn có thể
truyền TfLiteCoreMlDelegateAllDevices. Ví dụ sau cho thấy cách thực hiện việc này:
Sử dụng tính năng uỷ quyền Metal(GPU) làm phương án dự phòng.
Khi không tạo được uỷ quyền Học máy cốt lõi, bạn vẫn có thể sử dụng
Uỷ quyền bằng kim loại để nhận
các lợi ích về hiệu suất. Ví dụ sau cho thấy cách thực hiện việc này:
Logic tạo uỷ quyền sẽ đọc mã máy của thiết bị (ví dụ: iPhone11,1) để
xác định khả năng sử dụng Neural Engine. Xem
mã
để biết thêm chi tiết. Ngoài ra, bạn có thể triển khai một nhóm danh sách từ chối của riêng mình
đang sử dụng các thư viện khác như
DeviceKit.
Sử dụng phiên bản Core ML cũ
Mặc dù iOS 13 hỗ trợ Core ML 3 nhưng mô hình này có thể hoạt động tốt hơn khi
chuyển đổi bằng thông số kỹ thuật của mô hình Core ML 2. Phiên bản lượt chuyển đổi mục tiêu là
đặt thành phiên bản mới nhất theo mặc định, nhưng bạn có thể thay đổi điều này bằng cách cài đặt
coreMLVersion (trong Swift, coreml_version trong API C) trong tuỳ chọn uỷ quyền để
phiên bản cũ hơn.
Hoạt động được hỗ trợ
Các hoạt động sau được hỗ trợ bởi thực thể đại diện Core ML.
Thêm
Chỉ có thể truyền một số hình dạng nhất định. Trong bố cục tensor ML Core,
sau đây là các hình dạng tensor có thể truyền tin. [B, C, H, W], [B, C, 1,
1], [B, 1, H, W], [B, 1, 1, 1].
Trung bìnhPool2D
Tiếng Concat
Bạn nên thực hiện việc nối dọc theo trục của kênh.
Chuyển đổi 2D
Trọng số và độ chệch phải không đổi.
depthwiseConv2D
Trọng số và độ chệch phải không đổi.
Hoàn toàn kết nối (còn gọi là Dense hoặc InsideProduct)
Trọng số và độ chệch (nếu có) phải không đổi.
Chỉ hỗ trợ trường hợp một lô. Phương diện đầu vào phải là 1, ngoại trừ
phương diện cuối cùng.
Hardswish
Kho vận (còn gọi là Sigmoid)
MaxPool2D
MirrorPad
Chỉ hỗ trợ đầu vào 4D có chế độ REFLECT. Khoảng đệm phải là
không đổi và chỉ được phép đối với kích thước H và W.
Linh
Chỉ có thể truyền một số hình dạng nhất định. Trong bố cục tensor ML Core,
sau đây là các hình dạng tensor có thể truyền tin. [B, C, H, W], [B, C, 1,
1], [B, 1, H, W], [B, 1, 1, 1].
Pad và PadV2
Chỉ hỗ trợ đầu vào 4D. Khoảng đệm phải là không đổi và chỉ
cho phép đối với kích thước H và W.
Relu
ReluN1To1
Relu6
Đổi hình
Chỉ được hỗ trợ khi phiên bản Core ML mục tiêu là 2 và không được hỗ trợ khi
nhắm đến công nghệ Core ML 3.
ResizeBilinear
SoftMax
Tanh
TransposeConv
Trọng lượng phải không đổi.
Phản hồi
Đối với các vấn đề, vui lòng tạo một
GitHub
vấn đề với tất cả chi tiết cần thiết để tái tạo.
Câu hỏi thường gặp
Tính năng uỷ quyền CoreML có hỗ trợ tính năng dự phòng cho CPU không nếu biểu đồ chứa tệp không được hỗ trợ
hoạt động?
Có
Tính năng uỷ quyền CoreML có hoạt động trên Trình mô phỏng iOS không?
Có. Thư viện này bao gồm các mục tiêu x86 và x86_64 để có thể chạy trên
nhưng bạn sẽ không thấy hiệu suất tăng so với CPU.
LiteRT và CoreML có hỗ trợ MacOS không?
LiteRT chỉ được thử nghiệm trên iOS chứ không phải MacOS.
Hoạt động LiteRT tuỳ chỉnh có được hỗ trợ không?
Không, uỷ quyền CoreML không hỗ trợ hoạt động tuỳ chỉnh và chúng sẽ dự phòng để
CPU.
[[["Dễ hiểu","easyToUnderstand","thumb-up"],["Giúp tôi giải quyết được vấn đề","solvedMyProblem","thumb-up"],["Khác","otherUp","thumb-up"]],[["Thiếu thông tin tôi cần","missingTheInformationINeed","thumb-down"],["Quá phức tạp/quá nhiều bước","tooComplicatedTooManySteps","thumb-down"],["Đã lỗi thời","outOfDate","thumb-down"],["Vấn đề về bản dịch","translationIssue","thumb-down"],["Vấn đề về mẫu/mã","samplesCodeIssue","thumb-down"],["Khác","otherDown","thumb-down"]],["Cập nhật lần gần đây nhất: 2025-07-24 UTC."],[],[],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)"]]