কর্মক্ষমতা পরিমাপ

বেঞ্চমার্ক টুল

LiterRT বেঞ্চমার্ক টুলগুলি বর্তমানে নিম্নলিখিত গুরুত্বপূর্ণ কর্মক্ষমতা মেট্রিক্সের পরিসংখ্যান পরিমাপ এবং গণনা করে:

  • আরম্ভের সময়
  • উষ্ণতার অবস্থার অনুমান সময়
  • স্থির অবস্থার অনুমান সময়
  • আরম্ভের সময় মেমরির ব্যবহার
  • সামগ্রিক মেমোরি ব্যবহার

বেঞ্চমার্ক টুলগুলি অ্যান্ড্রয়েড এবং iOS এর জন্য বেঞ্চমার্ক অ্যাপ এবং পূর্বনির্ধারিত কমান্ড-লাইন বাইনারি হিসেবে উপলব্ধ, এবং এগুলির সকলেরই একই মূল কর্মক্ষমতা পরিমাপের যুক্তি রয়েছে। মনে রাখবেন যে রানটাইম পরিবেশের পার্থক্যের কারণে উপলব্ধ বিকল্পগুলি এবং আউটপুট ফর্ম্যাটগুলি কিছুটা আলাদা।

পূর্বনির্মিত বেঞ্চমার্ক বাইনারি (CompiledModel API ব্যবহার করে)

অ্যান্ড্রয়েডে বেঞ্চমার্ক টুলটি ব্যবহারের দুটি বিকল্প রয়েছে। একটি হল একটি নেটিভ বেঞ্চমার্ক বাইনারি (CompiledModel API ভিত্তিক) এবং অন্যটি হল একটি অ্যান্ড্রয়েড বেঞ্চমার্ক অ্যাপ (ইন্টারপ্রেটার API ভিত্তিক)। LiterRT বেঞ্চমার্ক টুলটি একটি বিল্ট-ইন বাইনারি benchmark_model হিসাবে সরবরাহ করা হয়েছে। আপনি এই টুলটি একটি শেল কমান্ড লাইন থেকে Linux, macOS, Windows, Raspberry Pi, এমবেডেড ডিভাইস এবং GPU অ্যাক্সিলারেশন সক্ষম থাকা অ্যান্ড্রয়েড ডিভাইসগুলিতে কার্যকর করতে পারেন।

বাইনারি ডাউনলোড করুন অথবা তৈরি করুন

নিচের লিঙ্কগুলি অনুসরণ করে রাতের পূর্বনির্মিত কমান্ড-লাইন বাইনারিগুলি ডাউনলোড করুন:

আপনি আপনার কম্পিউটারের উৎস থেকেও বেঞ্চমার্ক বাইনারি তৈরি করতে পারেন।

bazel build -c opt //litert/tools:benchmark_model

অ্যান্ড্রয়েড এনডিকে টুলচেইন দিয়ে বিল্ড করার জন্য, আপনাকে প্রথমে এই নির্দেশিকা অনুসরণ করে বিল্ড পরিবেশ সেট আপ করতে হবে, অথবা এই নির্দেশিকায় বর্ণিত ডকার চিত্রটি ব্যবহার করতে হবে।

bazel build -c opt --config=android_arm64 \
  //litert/tools:benchmark_model

বেঞ্চমার্ক চালান

আপনার কম্পিউটারে বেঞ্চমার্ক চালানোর জন্য, শেল থেকে বাইনারিটি চালান।

path/to/downloaded_or_built/benchmark_model \
  --graph=your_model.tflite \
  --num_threads=4

আপনি পূর্বনির্ধারিত কমান্ড-লাইন বাইনারি দিয়ে পূর্বে উল্লিখিত প্যারামিটারের একই সেট ব্যবহার করতে পারেন।

জিপিইউ অ্যাক্সিলারেটর

এই পূর্বনির্মিত বাইনারিগুলিতে নতুন LiterRT GPU অ্যাক্সিলারেটর অন্তর্ভুক্ত রয়েছে। এটি Vulkan (Linux), Metal (MacOS) এবং Direct3D (Windows) দ্বারা সমর্থিত OpenCL এবং WebGPU সমর্থন করে।

GPU অ্যাক্সিলারেটর ব্যবহার করতে, --use_gpu=true ফ্ল্যাগটি পাস করুন।

প্রোফাইল মডেল অপারেশনস

বেঞ্চমার্ক মডেল বাইনারি আপনাকে মডেল অপস প্রোফাইল করতে এবং প্রতিটি অপারেটরের এক্সিকিউশন সময় পেতে দেয়। এটি করার জন্য, ইনভোকেশনের সময় --use_profiler=true পতাকাটি benchmark_model এ পাস করুন।

অ্যান্ড্রয়েড বেঞ্চমার্ক অ্যাপ (ইন্টারপ্রেটার এপিআই ব্যবহার করে)

v1 ইন্টারপ্রেটার API-এর উপর ভিত্তি করে একটি অ্যান্ড্রয়েড বেঞ্চমার্ক অ্যাপও সরবরাহ করা হয়েছে। এটি একটি অ্যান্ড্রয়েড অ্যাপে মডেলটি কেমন পারফর্ম করবে তার একটি ভাল পরিমাপ। প্রকৃত অ্যাপে মডেলের সাথে অনুমান চালানোর সময় বেঞ্চমার্ক টুলের সংখ্যাগুলি এখনও সামান্য ভিন্ন হবে।

এই অ্যান্ড্রয়েড বেঞ্চমার্ক অ্যাপটির কোনও UI নেই। adb কমান্ড ব্যবহার করে এটি ইনস্টল করুন এবং চালান এবং adb logcat কমান্ড ব্যবহার করে ফলাফলগুলি পুনরুদ্ধার করুন।

অ্যাপটি ডাউনলোড করুন অথবা তৈরি করুন

নিম্নলিখিত লিঙ্কগুলি ব্যবহার করে রাতের জন্য প্রি-বিল্ট অ্যান্ড্রয়েড বেঞ্চমার্ক অ্যাপগুলি ডাউনলোড করুন:

Flex delegate এর মাধ্যমে TF ops সমর্থন করে এমন অ্যান্ড্রয়েড বেঞ্চমার্ক অ্যাপগুলির জন্য, নীচের লিঙ্কগুলি ব্যবহার করুন:

আপনি এই নির্দেশাবলী অনুসরণ করে উৎস থেকে অ্যাপটি তৈরি করতে পারেন।

বেঞ্চমার্ক প্রস্তুত করুন

বেঞ্চমার্ক অ্যাপটি চালানোর আগে, অ্যাপটি ইনস্টল করুন এবং মডেল ফাইলটি ডিভাইসে নিম্নরূপে পুশ করুন:

adb install -r -d -g android_aarch64_benchmark_model.apk
adb push your_model.tflite /data/local/tmp

বেঞ্চমার্ক চালান

adb shell am start -S \
  -n org.tensorflow.lite.benchmark/.BenchmarkModelActivity \
  --es args '"--graph=/data/local/tmp/your_model.tflite \
              --num_threads=4"'

graph একটি প্রয়োজনীয় প্যারামিটার।

  • graph : string
    TFLite মডেল ফাইলের পথ।

বেঞ্চমার্ক চালানোর জন্য আপনি আরও ঐচ্ছিক প্যারামিটার নির্দিষ্ট করতে পারেন।

  • num_threads : int (ডিফল্ট=1)
    TFLite ইন্টারপ্রেটার চালানোর জন্য ব্যবহৃত থ্রেডের সংখ্যা।
  • use_gpu : bool (ডিফল্ট=মিথ্যা)
    GPU ডেলিগেট ব্যবহার করুন।
  • use_xnnpack : bool (ডিফল্ট = false )
    XNNPACK প্রতিনিধি ব্যবহার করুন।

আপনি যে ডিভাইসটি ব্যবহার করছেন তার উপর নির্ভর করে, এই বিকল্পগুলির মধ্যে কিছু উপলব্ধ নাও হতে পারে বা কোনও প্রভাব ফেলতে পারে না। বেঞ্চমার্ক অ্যাপের সাথে আপনি যে আরও পারফরম্যান্স প্যারামিটারগুলি চালাতে পারেন তার জন্য প্যারামিটারগুলি দেখুন।

logcat কমান্ড ব্যবহার করে ফলাফল দেখুন:

adb logcat | grep "Inference timings"

বেঞ্চমার্ক ফলাফলগুলি নিম্নরূপ রিপোর্ট করা হয়েছে:

... tflite  : Inference timings in us: Init: 5685, First inference: 18535, Warmup (avg): 14462.3, Inference (avg): 14575.2

iOS বেঞ্চমার্ক অ্যাপ

iOS ডিভাইসে বেঞ্চমার্ক চালানোর জন্য, আপনাকে সোর্স থেকে অ্যাপ তৈরি করতে হবে। LiterT মডেল ফাইলটি সোর্স ট্রির benchmark_data ডিরেক্টরিতে রাখুন এবং benchmark_params.json ফাইলটি পরিবর্তন করুন। এই ফাইলগুলি অ্যাপে প্যাকেজ করা হয় এবং অ্যাপটি ডিরেক্টরি থেকে ডেটা পড়ে। বিস্তারিত নির্দেশাবলীর জন্য iOS বেঞ্চমার্ক অ্যাপটি দেখুন।

সুপরিচিত মডেলগুলির জন্য পারফরম্যান্স বেঞ্চমার্ক

এই বিভাগে কিছু অ্যান্ড্রয়েড এবং iOS ডিভাইসে সুপরিচিত মডেল চালানোর সময় LiterRT কর্মক্ষমতা মানদণ্ড তালিকাভুক্ত করা হয়েছে।

অ্যান্ড্রয়েড পারফরম্যান্স বেঞ্চমার্ক

এই পারফরম্যান্স বেঞ্চমার্ক সংখ্যাগুলি নেটিভ বেঞ্চমার্ক বাইনারি ব্যবহার করে তৈরি করা হয়েছিল।

অ্যান্ড্রয়েড বেঞ্চমার্কের জন্য, সিপিইউ অ্যাফিনিটি ভ্যারিয়েন্স কমাতে ডিভাইসে বড় কোর ব্যবহার করার জন্য সেট করা হয়েছে ( বিস্তারিত দেখুন)।

এটি ধরে নেয় যে মডেলগুলি ডাউনলোড করা হয়েছে এবং /data/local/tmp/tflite_models ডিরেক্টরিতে আনজিপ করা হয়েছে। বেঞ্চমার্ক বাইনারিটি এই নির্দেশাবলী ব্যবহার করে তৈরি করা হয়েছে এবং /data/local/tmp ডিরেক্টরিতে আছে বলে ধরে নেওয়া হয়েছে।

বেঞ্চমার্ক চালানোর জন্য:

adb shell /data/local/tmp/benchmark_model \
  --num_threads=4 \
  --graph=/data/local/tmp/tflite_models/${GRAPH} \
  --warmup_runs=1 \
  --num_runs=50

GPU ডেলিগেট দিয়ে চালানোর জন্য, --use_gpu=true সেট করুন।

নীচের কর্মক্ষমতা মানগুলি Android 10-এ পরিমাপ করা হয়েছে।

মডেলের নাম যন্ত্র সিপিইউ, ৪টি থ্রেড জিপিইউ
মোবাইলনেট_১.০_২২৪(ফ্লোট) পিক্সেল ৩ ২৩.৯ মিলিসেকেন্ড ৬.৪৫ মিলিসেকেন্ড
পিক্সেল ৪ ১৪.০ মিলিসেকেন্ড ৯.০ মিলিসেকেন্ড
মোবাইলনেট_১.০_২২৪ (পরিমাণ) পিক্সেল ৩ ১৩.৪ মিলিসেকেন্ড ---
পিক্সেল ৪ ৫.০ মিলিসেকেন্ড ---
NASNet মোবাইল পিক্সেল ৩ ৫৬ মিলিসেকেন্ড ---
পিক্সেল ৪ ৩৪.৫ মিলিসেকেন্ড ---
স্কুইজনেট পিক্সেল ৩ ৩৫.৮ মিলিসেকেন্ড ৯.৫ মিলিসেকেন্ড
পিক্সেল ৪ ২৩.৯ মিলিসেকেন্ড ১১.১ মিলিসেকেন্ড
ইনসেপশন_রেসনেট_ভি২ পিক্সেল ৩ ৪২২ মিলিসেকেন্ড ৯৯.৮ মিলিসেকেন্ড
পিক্সেল ৪ ২৭২.৬ মিলিসেকেন্ড ৮৭.২ মিলিসেকেন্ড
ইনসেপশন_ভি৪ পিক্সেল ৩ ৪৮৬ মিলিসেকেন্ড ৯৩ মিলিসেকেন্ড
পিক্সেল ৪ ৩২৪.১ মিলিসেকেন্ড ৯৭.৬ মিলিসেকেন্ড

iOS পারফরম্যান্স বেঞ্চমার্ক

এই পারফরম্যান্স বেঞ্চমার্ক নম্বরগুলি iOS বেঞ্চমার্ক অ্যাপ ব্যবহার করে তৈরি করা হয়েছিল।

iOS বেঞ্চমার্ক চালানোর জন্য, বেঞ্চমার্ক অ্যাপটি যথাযথ মডেল অন্তর্ভুক্ত করার জন্য পরিবর্তন করা হয়েছিল এবং benchmark_params.json num_threads 2 এ সেট করার জন্য পরিবর্তন করা হয়েছিল। GPU ডেলিগেট ব্যবহার করার জন্য, "use_gpu" : "1" এবং "gpu_wait_type" : "aggressive" বিকল্পগুলিও benchmark_params.json এ যোগ করা হয়েছিল।

মডেলের নাম যন্ত্র সিপিইউ, ২টি থ্রেড জিপিইউ
মোবাইলনেট_১.০_২২৪(ফ্লোট) আইফোন এক্সএস ১৪.৮ মিলিসেকেন্ড ৩.৪ মিলিসেকেন্ড
মোবাইলনেট_১.০_২২৪ (পরিমাণ) আইফোন এক্সএস ১১ মিলিসেকেন্ড ---
NASNet মোবাইল আইফোন এক্সএস ৩০.৪ মিলিসেকেন্ড ---
স্কুইজনেট আইফোন এক্সএস ২১.১ মিলিসেকেন্ড ১৫.৫ মিলিসেকেন্ড
ইনসেপশন_রেসনেট_ভি২ আইফোন এক্সএস ২৬১.১ মিলিসেকেন্ড ৪৫.৭ মিলিসেকেন্ড
ইনসেপশন_ভি৪ আইফোন এক্সএস ৩০৯ মিলিসেকেন্ড ৫৪.৪ মিলিসেকেন্ড

LiterRT ইন্টার্নাল ট্রেস করুন

অ্যান্ড্রয়েডে LiteRT ইন্টারনাল ট্রেস করুন

একটি অ্যান্ড্রয়েড অ্যাপের LiterRT ইন্টারপ্রেটার থেকে অভ্যন্তরীণ ইভেন্টগুলি অ্যান্ড্রয়েড ট্রেসিং টুল দ্বারা ক্যাপচার করা যেতে পারে। এগুলি অ্যান্ড্রয়েড ট্রেস API-এর সাথে একই ইভেন্ট, তাই জাভা/কোটলিন কোড থেকে ক্যাপচার করা ইভেন্টগুলি LiterRT অভ্যন্তরীণ ইভেন্টগুলির সাথে একসাথে দেখা হয়।

কিছু ঘটনার উদাহরণ হল:

  • অপারেটর ইনভোকেশন
  • প্রতিনিধি দ্বারা গ্রাফ পরিবর্তন
  • টেনসর বরাদ্দ

ট্রেস ক্যাপচার করার বিভিন্ন বিকল্পের মধ্যে, এই নির্দেশিকাটিতে অ্যান্ড্রয়েড স্টুডিও সিপিইউ প্রোফাইলার এবং সিস্টেম ট্রেসিং অ্যাপ অন্তর্ভুক্ত রয়েছে। অন্যান্য বিকল্পের জন্য পারফেটো কমান্ড-লাইন টুল বা সিস্ট্রেস কমান্ড-লাইন টুল দেখুন।

জাভা কোডে ট্রেস ইভেন্ট যোগ করা হচ্ছে

এটি ইমেজ ক্লাসিফিকেশন উদাহরণ অ্যাপ থেকে একটি কোড স্নিপেট। LiterT ইন্টারপ্রেটারটি recognizeImage/runInference বিভাগে চলে। এই ধাপটি ঐচ্ছিক তবে ইনফারেন্স কলটি কোথায় করা হচ্ছে তা লক্ষ্য করতে এটি কার্যকর।

  Trace.beginSection("recognizeImage");
  ...
  // Runs the inference call.
  Trace.beginSection("runInference");
  tflite.run(inputImageBuffer.getBuffer(), outputProbabilityBuffer.getBuffer().rewind());
  Trace.endSection();
  ...
  Trace.endSection();

LiterRT ট্রেসিং সক্ষম করুন

LiterRT ট্রেসিং সক্ষম করতে, Android অ্যাপ শুরু করার আগে Android সিস্টেম প্রপার্টি debug.tflite.trace 1 এ সেট করুন।

adb shell setprop debug.tflite.trace 1

যদি LiterRT ইন্টারপ্রেটার শুরু করার সময় এই বৈশিষ্ট্যটি সেট করা থাকে, তাহলে ইন্টারপ্রেটার থেকে মূল ইভেন্টগুলি (যেমন, অপারেটর ইনভোকেশন) ট্রেস করা হবে।

সমস্ত ট্রেস ক্যাপচার করার পরে, প্রোপার্টির মান 0 তে সেট করে ট্রেসিং অক্ষম করুন।

adb shell setprop debug.tflite.trace 0

অ্যান্ড্রয়েড স্টুডিও সিপিইউ প্রোফাইলার

নীচের ধাপগুলি অনুসরণ করে অ্যান্ড্রয়েড স্টুডিও সিপিইউ প্রোফাইলার দিয়ে ট্রেস ক্যাপচার করুন:

  1. উপরের মেনু থেকে Run > Profile 'app' নির্বাচন করুন।

  2. প্রোফাইলার উইন্ডোটি প্রদর্শিত হলে CPU টাইমলাইনের যেকোনো জায়গায় ক্লিক করুন।

  3. CPU প্রোফাইলিং মোডগুলির মধ্যে 'ট্রেস সিস্টেম কল' নির্বাচন করুন।

    'ট্রেস সিস্টেম কল' নির্বাচন করুন

  4. 'রেকর্ড' বোতাম টিপুন।

  5. 'থামুন' বোতাম টিপুন।

  6. ট্রেস ফলাফল তদন্ত করুন।

    অ্যান্ড্রয়েড স্টুডিও ট্রেস

এই উদাহরণে, আপনি একটি থ্রেডে ইভেন্টের শ্রেণিবিন্যাস এবং প্রতিটি অপারেটর সময়ের পরিসংখ্যান দেখতে পারবেন এবং থ্রেডগুলির মধ্যে পুরো অ্যাপের ডেটা প্রবাহও দেখতে পারবেন।

সিস্টেম ট্রেসিং অ্যাপ

সিস্টেম ট্রেসিং অ্যাপে বর্ণিত ধাপগুলি অনুসরণ করে অ্যান্ড্রয়েড স্টুডিও ছাড়াই ট্রেস ক্যাপচার করুন।

এই উদাহরণে, একই TFLite ইভেন্টগুলি ক্যাপচার করা হয়েছিল এবং Android ডিভাইসের সংস্করণের উপর নির্ভর করে Perfetto বা Systrace ফর্ম্যাটে সংরক্ষণ করা হয়েছিল। ক্যাপচার করা ট্রেস ফাইলগুলি Perfetto UI তে খোলা যেতে পারে।

পারফেটো ট্রেস

iOS-এ LiterRT ইন্টার্নাল ট্রেস করুন

iOS অ্যাপের LiterRT ইন্টারপ্রেটার থেকে অভ্যন্তরীণ ইভেন্টগুলি Xcode-এর সাথে অন্তর্ভুক্ত Instruments টুল দ্বারা ক্যাপচার করা যেতে পারে। এগুলি iOS সাইনপোস্ট ইভেন্ট, তাই Swift/Objective-C কোড থেকে ক্যাপচার করা ইভেন্টগুলি LiterRT অভ্যন্তরীণ ইভেন্টগুলির সাথে একসাথে দেখা হয়।

কিছু ঘটনার উদাহরণ হল:

  • অপারেটর ইনভোকেশন
  • প্রতিনিধি দ্বারা গ্রাফ পরিবর্তন
  • টেনসর বরাদ্দ

LiterRT ট্রেসিং সক্ষম করুন

নিচের ধাপগুলি অনুসরণ করে পরিবেশ পরিবর্তনশীল debug.tflite.trace সেট করুন:

  1. Xcode এর উপরের মেনু থেকে Product > Scheme > Edit Scheme... নির্বাচন করুন।

  2. বাম দিকের ফলকে 'প্রোফাইল'-এ ক্লিক করুন।

  3. 'রান অ্যাকশনের আর্গুমেন্ট এবং পরিবেশের ভেরিয়েবল ব্যবহার করুন' চেকবক্সটি অনির্বাচন করুন।

  4. 'পরিবেশ পরিবর্তনশীল' বিভাগের অধীনে debug.tflite.trace যোগ করুন।

    পরিবেশ পরিবর্তনশীল সেট করুন

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

এক্সকোড যন্ত্র

নিচের ধাপগুলি অনুসরণ করে ট্রেস ক্যাপচার করুন:

  1. Xcode এর উপরের মেনু থেকে Product > Profile নির্বাচন করুন।

  2. ইন্সট্রুমেন্টস টুল চালু হলে Logging among profileing templates-এ ক্লিক করুন।

  3. 'স্টার্ট' বোতাম টিপুন।

  4. 'থামুন' বোতাম টিপুন।

  5. OS লগিং সাবসিস্টেম আইটেমগুলি প্রসারিত করতে 'os_signpost' এ ক্লিক করুন।

  6. 'org.tensorflow.lite' OS লগিং সাবসিস্টেম-এ ক্লিক করুন।

  7. ট্রেস ফলাফল তদন্ত করুন।

    এক্সকোড ইন্সট্রুমেন্টস ট্রেস

এই উদাহরণে, আপনি প্রতিটি অপারেটর সময়ের জন্য ইভেন্ট এবং পরিসংখ্যানের শ্রেণিবিন্যাস দেখতে পাবেন।

ট্রেসিং ডেটা ব্যবহার করে

ট্রেসিং ডেটা আপনাকে কর্মক্ষমতার বাধাগুলি সনাক্ত করতে সহায়তা করে।

প্রোফাইলারের কাছ থেকে আপনি যে অন্তর্দৃষ্টি পেতে পারেন এবং কর্মক্ষমতা উন্নত করার সম্ভাব্য সমাধানগুলির কিছু উদাহরণ এখানে দেওয়া হল:

  • যদি উপলব্ধ CPU কোরের সংখ্যা ইনফারেন্স থ্রেডের সংখ্যার চেয়ে কম হয়, তাহলে CPU শিডিউলিং ওভারহেডের ফলে নিম্নমানের কর্মক্ষমতা দেখা দিতে পারে। আপনার মডেল ইনফারেন্সের সাথে ওভারল্যাপিং এড়াতে আপনি আপনার অ্যাপ্লিকেশনে অন্যান্য CPU নিবিড় কাজগুলি পুনরায় নির্ধারণ করতে পারেন অথবা ইন্টারপ্রেটার থ্রেডের সংখ্যা পরিবর্তন করতে পারেন।
  • যদি অপারেটরগুলিকে সম্পূর্ণরূপে অর্পণ করা না হয়, তাহলে মডেল গ্রাফের কিছু অংশ প্রত্যাশিত হার্ডওয়্যার অ্যাক্সিলারেটরের পরিবর্তে CPU-তে কার্যকর করা হয়। আপনি অসমর্থিত অপারেটরগুলিকে অনুরূপ সমর্থিত অপারেটর দিয়ে প্রতিস্থাপন করতে পারেন।