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

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

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

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

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

নিচের উদাহরণে দেখানো হয়েছে কিভাবে টেনসরফ্লো লাইট মডেল তৈরি করা যায়।

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 TensorFlow Lite ops.
  tf.lite.OpsSet.SELECT_TF_OPS # enable TensorFlow ops.
]
tflite_model = converter.convert()
open("converted_model.tflite", "wb").write(tflite_model)

অনুমান চালান

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

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

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

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

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 স্ন্যাপশট সংগ্রহস্থল যোগ করেছেন।

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

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

Android AAR তৈরি করা

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

এটি TensorFlow Lite বিল্ট-ইন এবং কাস্টম অপসের জন্য 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() নির্ভরতা আছে এবং টেনসরফ্লো লাইট নির্ভরতাকে প্রতিস্থাপন করুন যেটিতে 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'
}

iOS

CocoaPods ব্যবহার করে

TensorFlow Lite arm64 এর জন্য রাত্রিকালীন প্রি-বিল্ট সিলেক্ট TF ops CocoaPods প্রদান করে, যা আপনি TensorFlowLiteSwift বা TensorFlowLiteObjC কোকোপডের পাশাপাশি নির্ভর করতে পারেন।

# 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 অপ্স সহ TensorFlow Lite 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++

আপনি যদি টেনসরফ্লো লাইট ইন্টারপ্রেটার তৈরি করতে Bazel বা CMake ব্যবহার করেন, তাহলে আপনি একটি TensorFlow Lite 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 Lite ইন্টারপ্রেটার পিপ প্যাকেজ ইনস্টল করতে বেছে নিতে পারেন।

মেট্রিক্স

কর্মক্ষমতা

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

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

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

বাইনারি আকার

নিম্নলিখিত সারণী প্রতিটি বিল্ডের জন্য টেনসরফ্লো লাইটের বাইনারি আকার বর্ণনা করে। এই লক্ষ্যগুলি --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টি টেনসরফ্লো অপ্স সহ নির্মিত। আরও বিশদ বিবরণের জন্য, অনুগ্রহ করে টেনসরফ্লো লাইট বাইনারি আকার হ্রাস করুন বিভাগটি দেখুন।

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

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

আপডেট

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