LiteRT কোর ML প্রতিনিধি কোর ML ফ্রেমওয়ার্কে LiteRT মডেলগুলি চালানো সক্ষম করে, যার ফলে iOS ডিভাইসে দ্রুত মডেলের অনুমান পাওয়া যায়।
সমর্থিত iOS সংস্করণ এবং ডিভাইস:
- iOS 12 এবং পরবর্তী। পুরানো iOS সংস্করণে, কোর ML প্রতিনিধি স্বয়ংক্রিয়ভাবে CPU-তে ফিরে যাবে।
- ডিফল্টরূপে, দ্রুত অনুমানের জন্য নিউরাল ইঞ্জিন ব্যবহার করতে শুধুমাত্র A12 SoC এবং পরবর্তীতে (iPhone Xs এবং পরবর্তী) ডিভাইসগুলিতে Core ML প্রতিনিধি সক্ষম করা হবে। আপনি যদি পুরানো ডিভাইসগুলিতেও কোর এমএল প্রতিনিধি ব্যবহার করতে চান, দয়া করে সেরা অনুশীলনগুলি দেখুন৷
সমর্থিত মডেল
কোর এমএল প্রতিনিধি বর্তমানে ফ্লোট (FP32 এবং FP16) মডেল সমর্থন করে।
আপনার নিজের মডেলে কোর এমএল প্রতিনিধি চেষ্টা করছে
কোর এমএল প্রতিনিধি ইতিমধ্যেই LiteRT CocoaPods-এর রাতের রিলিজে অন্তর্ভুক্ত। Core ML প্রতিনিধি ব্যবহার করতে, আপনার Podfile
এ subspec CoreML
অন্তর্ভুক্ত করতে আপনার LiteRT পড পরিবর্তন করুন।
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) }
উদ্দেশ্য-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 পর্যন্ত)
#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);
সর্বোত্তম অনুশীলন
নিউরাল ইঞ্জিন ছাড়া ডিভাইসে কোর এমএল প্রতিনিধি ব্যবহার করা
ডিফল্টরূপে, ডিভাইসে নিউরাল ইঞ্জিন থাকলেই কেবলমাত্র কোর এমএল প্রতিনিধি তৈরি করা হবে, এবং প্রতিনিধি তৈরি না হলে null
ফিরে আসবে। আপনি যদি অন্যান্য পরিবেশে (উদাহরণস্বরূপ, সিমুলেটর) কোর এমএল প্রতিনিধি চালাতে চান, সুইফটে প্রতিনিধি তৈরি করার সময় .all
একটি বিকল্প হিসাবে পাস করুন। C++ (এবং উদ্দেশ্য-C) এ, আপনি TfLiteCoreMlDelegateAllDevices
পাস করতে পারেন। নিম্নলিখিত উদাহরণ দেখায় কিভাবে এটি করতে হয়:
সুইফট
var options = CoreMLDelegate.Options() options.enabledDevices = .all let coreMLDelegate = CoreMLDelegate(options: options)! let interpreter = try Interpreter(modelPath: modelPath, delegates: [coreMLDelegate])
উদ্দেশ্য-C
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
একটি ফলব্যাক হিসাবে মেটাল(GPU) প্রতিনিধি ব্যবহার করে৷
যখন কোর ML প্রতিনিধি তৈরি করা হয় না, বিকল্পভাবে আপনি এখনও মেটাল প্রতিনিধি ব্যবহার করতে পারেন কর্মক্ষমতা সুবিধা পেতে। নিম্নলিখিত উদাহরণ দেখায় কিভাবে এটি করতে হয়:
সুইফট
var delegate = CoreMLDelegate() if delegate == nil { delegate = MetalDelegate() // Add Metal delegate options if necessary. } let interpreter = try Interpreter(modelPath: modelPath, delegates: [delegate!])
উদ্দেশ্য-C
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 এর মতো অন্যান্য লাইব্রেরি ব্যবহার করে আপনার নিজের ডিনালিস্ট ডিভাইসের সেট বাস্তবায়ন করতে পারেন।
পুরানো কোর এমএল সংস্করণ ব্যবহার করে
যদিও iOS 13 Core ML 3 সমর্থন করে, মডেলটি আরও ভাল কাজ করতে পারে যখন এটি Core ML 2 মডেল স্পেসিফিকেশনের সাথে রূপান্তরিত হয়। লক্ষ্য রূপান্তর সংস্করণটি ডিফল্টরূপে সর্বশেষ সংস্করণে সেট করা আছে, তবে আপনি পুরোনো সংস্করণে প্রতিনিধি বিকল্পে coreMLVersion
(Swift-এ, C API-এ coreml_version
) সেট করে এটি পরিবর্তন করতে পারেন।
সমর্থিত অপারেশন
নিম্নলিখিত অপ্সগুলি কোর এমএল প্রতিনিধি দ্বারা সমর্থিত।
- যোগ করুন
- শুধুমাত্র নির্দিষ্ট আকার সম্প্রচারযোগ্য. কোর এমএল টেনসর লেআউটে, নিম্নলিখিত টেনসর আকারগুলি সম্প্রচারযোগ্য।
[B, C, H, W]
,[B, C, 1, 1]
,[B, 1, H, W]
,[B, 1, 1, 1]
।
- শুধুমাত্র নির্দিষ্ট আকার সম্প্রচারযোগ্য. কোর এমএল টেনসর লেআউটে, নিম্নলিখিত টেনসর আকারগুলি সম্প্রচারযোগ্য।
- গড়পুল 2D
- কনক্যাট
- চ্যানেল অক্ষ বরাবর সংযোগ করা উচিত।
- Conv2D
- ওজন এবং পক্ষপাত ধ্রুবক হওয়া উচিত।
- DepthwiseConv2D
- ওজন এবং পক্ষপাত ধ্রুবক হওয়া উচিত।
- সম্পূর্ণরূপে সংযুক্ত (ওরফে ঘন বা অভ্যন্তরীণ পণ্য)
- ওজন এবং পক্ষপাত (যদি উপস্থিত থাকে) ধ্রুবক হওয়া উচিত।
- শুধুমাত্র একক-ব্যাচ কেস সমর্থন করে। ইনপুট মাত্রা 1 হওয়া উচিত, শেষ মাত্রা ছাড়া।
- হার্ডউইশ
- লজিস্টিক (ওরফে সিগমায়েড)
- ম্যাক্সপুল 2 ডি
- মিররপ্যাড
-
REFLECT
মোড সহ শুধুমাত্র 4D ইনপুট সমর্থিত। প্যাডিং ধ্রুবক হওয়া উচিত এবং শুধুমাত্র H এবং W মাত্রার জন্য অনুমোদিত।
-
- মুল
- শুধুমাত্র নির্দিষ্ট আকার সম্প্রচারযোগ্য. কোর এমএল টেনসর লেআউটে, নিম্নলিখিত টেনসর আকারগুলি সম্প্রচারযোগ্য।
[B, C, H, W]
,[B, C, 1, 1]
,[B, 1, H, W]
,[B, 1, 1, 1]
।
- শুধুমাত্র নির্দিষ্ট আকার সম্প্রচারযোগ্য. কোর এমএল টেনসর লেআউটে, নিম্নলিখিত টেনসর আকারগুলি সম্প্রচারযোগ্য।
- প্যাড এবং প্যাডভি 2
- শুধুমাত্র 4D ইনপুট সমর্থিত। প্যাডিং ধ্রুবক হওয়া উচিত এবং শুধুমাত্র H এবং W মাত্রার জন্য অনুমোদিত।
- রেলু
- ReluN1To1
- Relu6
- পুনরায় আকার দিন
- শুধুমাত্র টার্গেট কোর ML সংস্করণ 2 হলেই সমর্থিত, কোর ML 3 টার্গেট করার সময় সমর্থিত নয়৷
- বাইলিনিয়ার রিসাইজ করুন
- সফটম্যাক্স
- তানহ
- ট্রান্সপোজ কনভ
- ওজন ধ্রুবক হওয়া উচিত।
প্রতিক্রিয়া
সমস্যাগুলির জন্য, অনুগ্রহ করে পুনরুত্পাদনের জন্য সমস্ত প্রয়োজনীয় বিবরণ সহ একটি GitHub সমস্যা তৈরি করুন৷
FAQ
- একটি গ্রাফে অসমর্থিত অপ্স থাকলে কি CoreML প্রতিনিধি CPU-তে ফলব্যাক সমর্থন করে?
- হ্যাঁ
- CoreML প্রতিনিধি কি iOS সিমুলেটরে কাজ করে?
- হ্যাঁ। লাইব্রেরিতে x86 এবং x86_64 টার্গেট রয়েছে যাতে এটি একটি সিমুলেটরে চলতে পারে, কিন্তু আপনি CPU-তে কর্মক্ষমতা বৃদ্ধি দেখতে পাবেন না।
- LiteRT এবং CoreML প্রতিনিধি কি MacOS সমর্থন করে?
- LiteRT শুধুমাত্র iOS এ পরীক্ষিত কিন্তু MacOS নয়।
- কাস্টম LiteRT অপ্স সমর্থিত?
- না, CoreML প্রতিনিধি কাস্টম অপ্স সমর্থন করে না এবং তারা CPU-তে ফিরে যাবে।