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

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

রূপান্তরের অনুমতি দেওয়ার জন্য, ব্যবহারকারীরা তাদের LiteRT মডেলে নির্দিষ্ট TensorFlow অপের ব্যবহার সক্ষম করতে পারেন। যাইহোক, TensorFlow ops এর সাথে LiteRT মডেল চালানোর জন্য মূল TensorFlow রানটাইম টানতে হবে, যা LiteRT ইন্টারপ্রেটার বাইনারি সাইজ বাড়ায়। Android এর জন্য, আপনি বেছে বেছে শুধুমাত্র প্রয়োজনীয় Tensorflow অপ্স তৈরি করে এটি এড়াতে পারেন। বিশদ বিবরণের জন্য, বাইনারি আকার হ্রাস করুন

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

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

নিচের উদাহরণটি দেখায় যে কিভাবে নির্বাচিত TensorFlow অপ্সের সাথে একটি LiteRT মডেল তৈরি করা যায়।

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)

অনুমান চালান

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

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

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

আপনি এটিকে আপনার build.gradle নির্ভরতাগুলিতে নিম্নোক্তভাবে স্ট্যান্ডার্ড LiteRT 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 ops নির্ভরতা তুলনামূলকভাবে বড়, তাই আপনি সম্ভবত আপনার abiFilters সেট আপ করে আপনার .gradle ফাইলে অপ্রয়োজনীয় x86 ABI ফিল্টার করতে চাইবেন।

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

Android AAR তৈরি করা

বাইনারি আকার বা অন্যান্য উন্নত ক্ষেত্রে হ্রাস করার জন্য, আপনি নিজেও লাইব্রেরি তৈরি করতে পারেন। একটি কার্যকরী LiteRT বিল্ড এনভায়রনমেন্ট অনুমান করে, নিম্নোক্তভাবে নির্বাচিত TensorFlow ops সহ 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

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

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

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() নির্ভরতা আছে এবং মান LiteRT নির্ভরতা প্রতিস্থাপন করুন যেটিতে TensorFlow ops-এর জন্য সমর্থন রয়েছে:

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'
}

iOS

CocoaPods ব্যবহার করে

LiteRT 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 অপস ফ্রেমওয়ার্ক জোর করে লোড করার জন্য আপনাকে একটি অতিরিক্ত লিঙ্কার পতাকা প্রদান করতে হবে। আপনার এক্সকোড প্রকল্পে, 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 বৈশিষ্ট্য পরীক্ষা করতে ইমেজ ক্লাসিফিকেশন iOS অ্যাপ পরিবর্তন করতে পারেন।

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

Bazel + Xcode ব্যবহার করে

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

একবার আপনি iOS সমর্থন সক্ষম করে ওয়ার্কস্পেস কনফিগার করার পরে, আপনি TF ops অ্যাডঅন ফ্রেমওয়ার্ক নির্বাচন করতে নিম্নলিখিত কমান্ডটি ব্যবহার করতে পারেন, যা নিয়মিত TensorFlowLiteC.framework এর উপরে যোগ করা যেতে পারে। মনে রাখবেন যে নির্বাচিত 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 অপস ফ্রেমওয়ার্ক জোর করে লোড করার জন্য আপনার অ্যাপ প্রোজেক্টে একটি অতিরিক্ত লিঙ্কার ফ্ল্যাগ উল্লেখ করা উচিত। আপনার এক্সকোড প্রকল্পে, Build Settings -> Other Linker Flags যান এবং যোগ করুন:

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

C/C++

আপনি যদি 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
macOS libtensorflowlite_flex.dylib
উইন্ডোজ tensorflowlite_flex.dll

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

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

পাইথন

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

মেট্রিক্স

কর্মক্ষমতা

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

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

নির্মাণ করুন সময় (মিলিসেকেন্ড)
শুধুমাত্র বিল্ট-ইন অপ্স ( TFLITE_BUILTIN ) 260.7
শুধুমাত্র TF অপ্স ব্যবহার করা হচ্ছে ( SELECT_TF_OPS ) 264.5

বাইনারি আকার

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

নির্মাণ করুন C++ বাইনারি সাইজ অ্যান্ড্রয়েড APK সাইজ
শুধুমাত্র অন্তর্নির্মিত অপ্স 796 কেবি 561 কেবি
অন্তর্নির্মিত অপ্স + TF অপস 23.0 MB 8.0 MB
অন্তর্নির্মিত অপ্স + TF অপস (1) 4.1 এমবি 1.8 এমবি

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

পরিচিত সীমাবদ্ধতা

  • অসমর্থিত প্রকার: নির্দিষ্ট TensorFlow অপ্সগুলি সাধারণত TensorFlow-এ উপলব্ধ ইনপুট/আউটপুট প্রকারের সম্পূর্ণ সেট সমর্থন নাও করতে পারে।

আপডেট

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