TensorFlow অপারেটর নির্বাচন করুন

যেহেতু LiterRT বিল্টইন অপারেটর লাইব্রেরি শুধুমাত্র সীমিত সংখ্যক TensorFlow অপারেটর সমর্থন করে, তাই প্রতিটি মডেল রূপান্তরযোগ্য নয়। বিস্তারিত জানার জন্য, অপারেটর সামঞ্জস্যতা দেখুন।

রূপান্তরের অনুমতি দেওয়ার জন্য, ব্যবহারকারীরা তাদের LiterRT মডেলে নির্দিষ্ট TensorFlow অপশনের ব্যবহার সক্ষম করতে পারেন। তবে, TensorFlow অপশন সহ LiterRT মডেল চালানোর জন্য মূল TensorFlow রানটাইম টানতে হবে, যা LiterRT ইন্টারপ্রেটার বাইনারি আকার বৃদ্ধি করে। অ্যান্ড্রয়েডের জন্য, আপনি কেবলমাত্র প্রয়োজনীয় Tensorflow অপশন তৈরি করে এটি এড়াতে পারেন। বিস্তারিত জানার জন্য, reduce binary size দেখুন।

এই ডকুমেন্টে আপনার পছন্দের প্ল্যাটফর্মে TensorFlow অপশন ধারণকারী LiterRT মডেলকে কীভাবে রূপান্তর এবং চালানো যায় তা বর্ণনা করা হয়েছে। এটি কর্মক্ষমতা এবং আকারের মেট্রিক্স এবং জ্ঞাত সীমাবদ্ধতাগুলিও আলোচনা করে।

একটি মডেল রূপান্তর করুন

নিম্নলিখিত উদাহরণে দেখানো হয়েছে কিভাবে নির্বাচিত TensorFlow অপারেশনের মাধ্যমে একটি LiterRT মডেল তৈরি করা যায়।

import tensorflow as tf

converter = tf.lite.TFLiteConverter.from_saved_model(saved_model_dir)
converter.target_spec.supported_ops = [
  tf.lite.OpsSet.TFLITE_BUILTINS, # enable LiteRT ops.
  tf.lite.OpsSet.SELECT_TF_OPS # enable TensorFlow ops.
]
tflite_model = converter.convert()
open("converted_model.tflite", "wb").write(tflite_model)

অনুমান চালান

নির্বাচিত টেনসরফ্লো অপশনের জন্য রূপান্তরিত LiterRT মডেল ব্যবহার করার সময়, ক্লায়েন্টকে অবশ্যই একটি LiterT রানটাইম ব্যবহার করতে হবে যাতে টেনসরফ্লো অপশনের প্রয়োজনীয় লাইব্রেরি অন্তর্ভুক্ত থাকে।

অ্যান্ড্রয়েড এএআর

বাইনারি আকার কমাতে, অনুগ্রহ করে পরবর্তী বিভাগে নির্দেশিত হিসাবে আপনার নিজস্ব কাস্টম AAR ফাইল তৈরি করুন। যদি বাইনারি আকারটি একটি উল্লেখযোগ্য উদ্বেগের বিষয় না হয়, তাহলে আমরা MavenCentral এ হোস্ট করা TensorFlow অপারেশন সহ পূর্বনির্মিত AAR ব্যবহার করার পরামর্শ দিচ্ছি।

আপনি আপনার build.gradle নির্ভরতাগুলিতে এটিকে স্ট্যান্ডার্ড LiterRT AAR এর সাথে নিম্নরূপ যোগ করে নির্দিষ্ট করতে পারেন:

dependencies {
    implementation 'org.tensorflow:tensorflow-lite:0.0.0-nightly-SNAPSHOT'
    // This dependency adds the necessary TF op support.
    implementation 'org.tensorflow:tensorflow-lite-select-tf-ops:0.0.0-nightly-SNAPSHOT'
}

নাইটলি স্ন্যাপশট ব্যবহার করতে, নিশ্চিত করুন যে আপনি Sonatype স্ন্যাপশট রিপোজিটরি যোগ করেছেন।

একবার আপনি নির্ভরতা যোগ করলে, গ্রাফের টেনসরফ্লো অপারেশন পরিচালনার জন্য প্রয়োজনীয় ডেলিগেট স্বয়ংক্রিয়ভাবে সেই গ্রাফগুলির জন্য ইনস্টল হয়ে যাবে যাদের জন্য এটি প্রয়োজন।

দ্রষ্টব্য : TensorFlow অপ্স নির্ভরতা তুলনামূলকভাবে বেশি, তাই আপনি সম্ভবত আপনার abiFilters সেট আপ করে আপনার .gradle ফাইলে অপ্রয়োজনীয় x86 ABI গুলি ফিল্টার করতে চাইবেন।

android {
    defaultConfig {
        ndk {
            abiFilters 'armeabi-v7a', 'arm64-v8a'
        }
    }
}

অ্যান্ড্রয়েড এএআর তৈরি করা হচ্ছে

বাইনারি আকার কমাতে বা অন্যান্য উন্নত ক্ষেত্রে, আপনি লাইব্রেরিটি ম্যানুয়ালিও তৈরি করতে পারেন। LiterRT বিল্ড পরিবেশ কার্যকর বলে ধরে নিলে, নিম্নলিখিতভাবে নির্বাচিত TensorFlow অপশনগুলি ব্যবহার করে Android AAR তৈরি করুন:

sh tensorflow/lite/tools/build_aar.sh \
  --input_models=/a/b/model_one.tflite,/c/d/model_two.tflite \
  --target_archs=x86,x86_64,arm64-v8a,armeabi-v7a

এটি LiterRT বিল্ট-ইন এবং কাস্টম অপশনের জন্য AAR ফাইল bazel-bin/tmp/tensorflow-lite.aar তৈরি করবে; এবং TensorFlow অপশনের জন্য AAR ফাইল bazel-bin/tmp/tensorflow-lite-select-tf-ops.aar তৈরি করবে। যদি আপনার কোনও কার্যকরী বিল্ড পরিবেশ না থাকে, তাহলে আপনি docker দিয়ে উপরের ফাইলগুলিও তৈরি করতে পারেন।

সেখান থেকে, আপনি হয় AAR ফাইলগুলি সরাসরি আপনার প্রকল্পে আমদানি করতে পারেন, অথবা আপনার স্থানীয় Maven সংগ্রহস্থলে কাস্টম AAR ফাইলগুলি প্রকাশ করতে পারেন:

mvn install:install-file \
  -Dfile=bazel-bin/tmp/tensorflow-lite.aar \
  -DgroupId=org.tensorflow \
  -DartifactId=tensorflow-lite -Dversion=0.1.100 -Dpackaging=aar
mvn install:install-file \
  -Dfile=bazel-bin/tmp/tensorflow-lite-select-tf-ops.aar \
  -DgroupId=org.tensorflow \
  -DartifactId=tensorflow-lite-select-tf-ops -Dversion=0.1.100 -Dpackaging=aar

অবশেষে, আপনার অ্যাপের build.gradle এ, নিশ্চিত করুন যে আপনার mavenLocal() নির্ভরতা আছে এবং স্ট্যান্ডার্ড LiterRT নির্ভরতাটি এমন একটি দিয়ে প্রতিস্থাপন করুন যা নির্বাচিত TensorFlow অপশনের জন্য সমর্থন করে:

allprojects {
    repositories {
        mavenCentral()
        maven {  // Only for snapshot artifacts
            name 'ossrh-snapshot'
            url 'https://oss.sonatype.org/content/repositories/snapshots'
        }
        mavenLocal()
    }
}

dependencies {
    implementation 'org.tensorflow:tensorflow-lite:0.1.100'
    implementation 'org.tensorflow:tensorflow-lite-select-tf-ops:0.1.100'
}

আইওএস

কোকোপডস ব্যবহার করা

LiterRT arm64 জন্য রাতের জন্য প্রি-বিল্ট নির্বাচিত TF ops CocoaPods প্রদান করে, যার উপর আপনি TensorFlowLiteSwift বা TensorFlowLiteObjC CocoaPods এর পাশাপাশি নির্ভর করতে পারেন।

দ্রষ্টব্য : যদি আপনার x86_64 সিমুলেটরে নির্বাচিত TF অপ্স ব্যবহার করার প্রয়োজন হয়, তাহলে আপনি নিজেই নির্বাচিত অপ্স ফ্রেমওয়ার্ক তৈরি করতে পারেন। আরও বিস্তারিত জানার জন্য Bazel + Xcode ব্যবহার বিভাগটি দেখুন।

# In your Podfile target:
  pod 'TensorFlowLiteSwift'   # or 'TensorFlowLiteObjC'
  pod 'TensorFlowLiteSelectTfOps', '~> 0.0.1-nightly'

pod install চালানোর পরে, আপনার প্রকল্পে নির্বাচিত TF ops ফ্রেমওয়ার্কটি জোর করে লোড করার জন্য আপনাকে একটি অতিরিক্ত লিঙ্কার ফ্ল্যাগ প্রদান করতে হবে। আপনার Xcode প্রকল্পে, Build Settings -> Other Linker Flags এ যান এবং যোগ করুন:

>= 2.9.0 সংস্করণের জন্য:

-force_load $(SRCROOT)/Pods/TensorFlowLiteSelectTfOps/Frameworks/TensorFlowLiteSelectTfOps.xcframework/ios-arm64/TensorFlowLiteSelectTfOps.framework/TensorFlowLiteSelectTfOps

< 2.9.0 সংস্করণের জন্য:

-force_load $(SRCROOT)/Pods/TensorFlowLiteSelectTfOps/Frameworks/TensorFlowLiteSelectTfOps.framework/TensorFlowLiteSelectTfOps

এরপর আপনি আপনার iOS অ্যাপে SELECT_TF_OPS দিয়ে রূপান্তরিত যেকোনো মডেল চালাতে সক্ষম হবেন। উদাহরণস্বরূপ, আপনি নির্বাচিত TF ops বৈশিষ্ট্যটি পরীক্ষা করার জন্য Image Classification iOS অ্যাপটি পরিবর্তন করতে পারেন।

  • মডেল ফাইলটি SELECT_TF_OPS সক্ষম করে রূপান্তরিত ফাইল দিয়ে প্রতিস্থাপন করুন।
  • নির্দেশ অনুসারে Podfile TensorFlowLiteSelectTfOps নির্ভরতা যোগ করুন।
  • উপরের মত অতিরিক্ত লিঙ্কার পতাকা যোগ করুন।
  • উদাহরণ অ্যাপটি চালান এবং দেখুন মডেলটি সঠিকভাবে কাজ করে কিনা।

ব্যাজেল + এক্সকোড ব্যবহার করা

iOS এর জন্য নির্বাচিত TensorFlow অপশন সহ LiterRT Bazel ব্যবহার করে তৈরি করা যেতে পারে। প্রথমে, আপনার Bazel ওয়ার্কস্পেস এবং .bazelrc ফাইলটি সঠিকভাবে কনফিগার করতে iOS বিল্ড নির্দেশাবলী অনুসরণ করুন।

iOS সাপোর্ট সক্ষম করে ওয়ার্কস্পেস কনফিগার করার পরে, আপনি নিম্নলিখিত কমান্ডটি ব্যবহার করে select TF ops অ্যাডঅন ফ্রেমওয়ার্ক তৈরি করতে পারেন, যা নিয়মিত TensorFlowLiteC.framework এর উপরে যোগ করা যেতে পারে। মনে রাখবেন যে select TF ops ফ্রেমওয়ার্ক i386 আর্কিটেকচারের জন্য তৈরি করা যাবে না, তাই আপনাকে i386 বাদ দিয়ে টার্গেট আর্কিটেকচারের তালিকা স্পষ্টভাবে প্রদান করতে হবে।

bazel build -c opt --config=ios --ios_multi_cpus=arm64,x86_64 \
  //tensorflow/lite/ios:TensorFlowLiteSelectTfOps_framework

এটি bazel-bin/tensorflow/lite/ios/ ডিরেক্টরির অধীনে ফ্রেমওয়ার্ক তৈরি করবে। iOS বিল্ড গাইডের Xcode প্রোজেক্ট সেটিংস বিভাগের অধীনে বর্ণিত অনুরূপ পদক্ষেপগুলি অনুসরণ করে আপনি আপনার Xcode প্রোজেক্টে এই নতুন ফ্রেমওয়ার্কটি যুক্ত করতে পারেন।

আপনার অ্যাপ প্রজেক্টে ফ্রেমওয়ার্ক যোগ করার পর, নির্বাচিত TF ops ফ্রেমওয়ার্ক জোর করে লোড করার জন্য আপনার অ্যাপ প্রজেক্টে একটি অতিরিক্ত লিঙ্কার ফ্ল্যাগ নির্দিষ্ট করা উচিত। আপনার Xcode প্রজেক্টে, Build Settings -> Other Linker Flags এ যান এবং যোগ করুন:

-force_load <path/to/your/TensorFlowLiteSelectTfOps.framework/TensorFlowLiteSelectTfOps>

সি/সি++

যদি আপনি LiteRT ইন্টারপ্রেটার তৈরি করতে Bazel বা CMake ব্যবহার করেন, তাহলে আপনি LiteRT Flex ডেলিগেট শেয়ার্ড লাইব্রেরি লিঙ্ক করে Flex ডেলিগেট সক্ষম করতে পারেন। আপনি নিম্নলিখিত কমান্ড ব্যবহার করে Bazel দিয়ে এটি তৈরি করতে পারেন।

bazel build -c opt --config=monolithic tensorflow/lite/delegates/flex:tensorflowlite_flex

এই কমান্ডটি bazel-bin/tensorflow/lite/delegates/flex এ নিম্নলিখিত শেয়ার্ড লাইব্রেরি তৈরি করে।

প্ল্যাটফর্ম লাইব্রেরির নাম
লিনাক্স libtensorflowlite_flex.so
ম্যাকওএস libtensorflowlite_flex.dylib
জানালা tensorflowlite_flex.dll

মনে রাখবেন যে রানটাইমে ইন্টারপ্রেটার তৈরি করার সময় প্রয়োজনীয় TfLiteDelegate স্বয়ংক্রিয়ভাবে ইনস্টল হয়ে যাবে যতক্ষণ না শেয়ার্ড লাইব্রেরি লিঙ্ক করা থাকে। অন্যান্য ডেলিগেট ধরণের ক্ষেত্রে সাধারণত যেমন প্রয়োজন হয় তেমন ডেলিগেট ইনস্ট্যান্স স্পষ্টভাবে ইনস্টল করার প্রয়োজন নেই।

দ্রষ্টব্য: এই বৈশিষ্ট্যটি ২.৭ সংস্করণ থেকে উপলব্ধ।

পাইথন

নির্বাচিত TensorFlow অপশন সহ LiterRT স্বয়ংক্রিয়ভাবে TensorFlow pip প্যাকেজের সাথে ইনস্টল হবে। আপনি শুধুমাত্র LiterRT ইন্টারপ্রেটার pip প্যাকেজ ইনস্টল করতেও বেছে নিতে পারেন।

মেট্রিক্স

কর্মক্ষমতা

বিল্টইন এবং নির্বাচিত টেনসরফ্লো উভয় অপশনের মিশ্রণ ব্যবহার করার সময়, একই রকম LiterRT অপ্টিমাইজেশন এবং অপ্টিমাইজড বিল্টইন অপশনগুলি রূপান্তরিত মডেলের সাথে উপলব্ধ এবং ব্যবহারযোগ্য হবে।

নিচের টেবিলে একটি Pixel 2-এ MobileNet-এ ইনফারেন্স চালানোর জন্য গড়ে কত সময় লাগে তা বর্ণনা করা হয়েছে। তালিকাভুক্ত সময়গুলি গড়ে 100 রান। এই লক্ষ্যগুলি Android-এর জন্য ফ্ল্যাগগুলি ব্যবহার করে তৈরি করা হয়েছিল: --config=android_arm64 -c opt

নির্মাণ করুন সময় (মিলিসেকেন্ড)
শুধুমাত্র অন্তর্নির্মিত অপারেশন ( TFLITE_BUILTIN ) ২৬০.৭
শুধুমাত্র TF অপ্স ব্যবহার করা হচ্ছে ( SELECT_TF_OPS ) ২৬৪.৫

বাইনারি আকার

নিচের টেবিলে প্রতিটি বিল্ডের জন্য LiterRT এর বাইনারি আকার বর্ণনা করা হয়েছে। এই লক্ষ্যগুলি Android এর জন্য --config=android_arm -c opt ব্যবহার করে তৈরি করা হয়েছিল।

নির্মাণ করুন C++ বাইনারি আকার অ্যান্ড্রয়েড APK সাইজ
শুধুমাত্র অন্তর্নির্মিত অপারেশন ৭৯৬ কেবি ৫৬১ কেবি
অন্তর্নির্মিত অপস + টিএফ অপস ২৩.০ মেগাবাইট ৮.০ মেগাবাইট
অন্তর্নির্মিত অপ্স + টিএফ অপ্স (১) ৪.১ মেগাবাইট ১.৮ মেগাবাইট

(১) এই লাইব্রেরিগুলি বেছে বেছে i3d-kinetics-400 মডেলের জন্য তৈরি করা হয়েছে যাতে 8টি TFLite বিল্টইন অপ্স এবং 3টি টেনসরফ্লো অপ্স রয়েছে। আরও বিস্তারিত জানার জন্য, অনুগ্রহ করে Reduce LiterRT বাইনারি সাইজ বিভাগটি দেখুন।

জ্ঞাত সীমাবদ্ধতা

  • অসমর্থিত প্রকার: কিছু টেনসরফ্লো অপারেশন টেনসরফ্লোতে সাধারণত উপলব্ধ ইনপুট/আউটপুট প্রকারের সম্পূর্ণ সেট সমর্থন নাও করতে পারে।

আপডেট

  • সংস্করণ 2.6
    • গ্রাফডেফ-অ্যাট্রিবিউট ভিত্তিক অপারেটর এবং হ্যাশটেবল রিসোর্স ইনিশিয়ালাইজেশনের জন্য সমর্থন উন্নত হয়েছে।
  • সংস্করণ 2.5
  • সংস্করণ 2.4
    • হার্ডওয়্যার অ্যাক্সিলারেটেড ডেলিগেটগুলির সাথে সামঞ্জস্য উন্নত হয়েছে