परफ़ॉर्मेंस मेज़रमेंट

बेंचमार्क उपकरण

TensorFlow Lite बेंचमार्क उपकरण वर्तमान में निम्नलिखित महत्वपूर्ण प्रदर्शन मेट्रिक्स के लिए आँकड़ों को मापते और गणना करते हैं:

  • आरंभीकरण समय
  • वार्मअप अवस्था का अनुमान समय
  • स्थिर अवस्था का अनुमान समय
  • आरंभीकरण समय के दौरान मेमोरी का उपयोग
  • समग्र स्मृति उपयोग

बेंचमार्क टूल एंड्रॉइड और आईओएस के लिए बेंचमार्क ऐप और देशी कमांड-लाइन बायनेरिज़ के रूप में उपलब्ध हैं, और वे सभी समान मूल प्रदर्शन माप तर्क साझा करते हैं। ध्यान दें कि रनटाइम वातावरण में अंतर के कारण उपलब्ध विकल्प और आउटपुट प्रारूप थोड़े भिन्न हैं।

एंड्रॉइड बेंचमार्क ऐप

एंड्रॉइड के साथ बेंचमार्क टूल का उपयोग करने के दो विकल्प हैं। एक देशी बेंचमार्क बाइनरी है और दूसरा एक एंड्रॉइड बेंचमार्क ऐप है, जो इस बात का बेहतर माप है कि मॉडल ऐप में कैसा प्रदर्शन करेगा। किसी भी तरह से, वास्तविक ऐप में मॉडल के साथ अनुमान चलाने के दौरान बेंचमार्क टूल की संख्याएं अभी भी थोड़ी भिन्न होंगी।

इस एंड्रॉइड बेंचमार्क ऐप में कोई यूआई नहीं है। adb कमांड का उपयोग करके इसे स्थापित करें और चलाएं और adb logcat कमांड का उपयोग करके परिणाम पुनर्प्राप्त करें।

ऐप डाउनलोड करें या बनाएं

नीचे दिए गए लिंक का उपयोग करके रात्रिकालीन पूर्व-निर्मित एंड्रॉइड बेंचमार्क ऐप्स डाउनलोड करें:

जहां तक ​​एंड्रॉइड बेंचमार्क ऐप्स का सवाल है जो फ्लेक्स डेलिगेट के माध्यम से टीएफ ऑप्स का समर्थन करते हैं, नीचे दिए गए लिंक का उपयोग करें:

आप इन निर्देशों का पालन करके स्रोत से भी ऐप बना सकते हैं।

बेंचमार्क तैयार करें

बेंचमार्क ऐप चलाने से पहले, ऐप इंस्टॉल करें और मॉडल फ़ाइल को डिवाइस पर निम्नानुसार पुश करें:

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 मॉडल फ़ाइल का पथ.

आप बेंचमार्क चलाने के लिए अधिक वैकल्पिक पैरामीटर निर्दिष्ट कर सकते हैं।

आप जिस डिवाइस का उपयोग कर रहे हैं उसके आधार पर, इनमें से कुछ विकल्प उपलब्ध नहीं हो सकते हैं या उनका कोई प्रभाव नहीं होगा। अधिक प्रदर्शन मापदंडों के लिए पैरामीटर देखें जिन्हें आप बेंचमार्क ऐप के साथ चला सकते हैं।

logcat कमांड का उपयोग करके परिणाम देखें:

adb logcat | grep "Inference timings"

बेंचमार्क परिणाम इस प्रकार रिपोर्ट किए गए हैं:

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

मूल बेंचमार्क बाइनरी

बेंचमार्क टूल को मूल बाइनरी benchmark_model के रूप में भी प्रदान किया जाता है। आप इस टूल को लिनक्स, मैक, एम्बेडेड डिवाइस और एंड्रॉइड डिवाइस पर शेल कमांड लाइन से निष्पादित कर सकते हैं।

बाइनरी डाउनलोड करें या बनाएं

नीचे दिए गए लिंक का अनुसरण करके रात्रिकालीन पूर्व-निर्मित देशी कमांड-लाइन बायनेरिज़ डाउनलोड करें:

जहाँ तक रात्रिकालीन पूर्व-निर्मित बायनेरिज़ का सवाल है जो फ्लेक्स डेलिगेट के माध्यम से टीएफ ऑप्स का समर्थन करते हैं, नीचे दिए गए लिंक का उपयोग करें:

TensorFlow लाइट हेक्सागोन डेलिगेट के साथ बेंचमार्क करने के लिए, हमने आवश्यक libhexagon_interface.so फ़ाइलें भी पहले से बनाई हैं (इस फ़ाइल के बारे में विवरण के लिए यहां देखें)। नीचे दिए गए लिंक से संबंधित प्लेटफ़ॉर्म की फ़ाइल डाउनलोड करने के बाद, कृपया फ़ाइल का नाम बदलकर libhexagon_interface.so कर दें।

आप अपने कंप्यूटर पर स्रोत से मूल बेंचमार्क बाइनरी भी बना सकते हैं।

bazel build -c opt //tensorflow/lite/tools/benchmark:benchmark_model

एंड्रॉइड एनडीके टूलचेन के साथ निर्माण करने के लिए, आपको पहले इस गाइड का पालन करके बिल्ड वातावरण स्थापित करना होगा, या इस गाइड में वर्णित डॉकर छवि का उपयोग करना होगा।

bazel build -c opt --config=android_arm64 \
  //tensorflow/lite/tools/benchmark:benchmark_model

बेंचमार्क चलाएँ

अपने कंप्यूटर पर बेंचमार्क चलाने के लिए, शेल से बाइनरी निष्पादित करें।

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

आप मूल कमांड-लाइन बाइनरी के साथ ऊपर बताए गए पैरामीटर के समान सेट का उपयोग कर सकते हैं।

प्रोफाइलिंग मॉडल ऑप्स

बेंचमार्क मॉडल बाइनरी आपको मॉडल ऑप्स को प्रोफाइल करने और प्रत्येक ऑपरेटर का निष्पादन समय प्राप्त करने की भी अनुमति देता है। ऐसा करने के लिए, आमंत्रण के दौरान ध्वज --enable_op_profiling=true को benchmark_model पर पास करें। विवरण यहां बताया गया है।

एक ही बार में कई प्रदर्शन विकल्पों के लिए मूल बेंचमार्क बाइनरी

एक ही बार में कई प्रदर्शन विकल्पों को बेंचमार्क करने के लिए एक सुविधाजनक और सरल C++ बाइनरी भी प्रदान की जाती है। यह बाइनरी उपरोक्त बेंचमार्क टूल के आधार पर बनाई गई है जो एक समय में केवल एक ही प्रदर्शन विकल्प को बेंचमार्क कर सकता है। वे समान बिल्ड/इंस्टॉल/रन प्रक्रिया साझा करते हैं, लेकिन इस बाइनरी का BUILD लक्ष्य नाम benchmark_model_performance_options है और इसमें कुछ अतिरिक्त पैरामीटर लगते हैं। इस बाइनरी के लिए एक महत्वपूर्ण पैरामीटर है:

perf_options_list : string (डिफ़ॉल्ट='सभी')
बेंचमार्क के लिए TFLite प्रदर्शन विकल्पों की अल्पविराम से अलग की गई सूची।

आप नीचे सूचीबद्ध अनुसार इस टूल के लिए रात्रिकालीन पूर्व-निर्मित बायनेरिज़ प्राप्त कर सकते हैं:

आईओएस बेंचमार्क ऐप

iOS डिवाइस पर बेंचमार्क चलाने के लिए, आपको स्रोत से ऐप बनाना होगा। TensorFlow Lite मॉडल फ़ाइल को स्रोत ट्री की बेंचमार्क_डेटा निर्देशिका में रखें और benchmark_params.json फ़ाइल को संशोधित करें। उन फ़ाइलों को ऐप में पैक किया जाता है और ऐप निर्देशिका से डेटा पढ़ता है। विस्तृत निर्देशों के लिए iOS बेंचमार्क ऐप पर जाएं।

प्रसिद्ध मॉडलों के लिए प्रदर्शन बेंचमार्क

यह अनुभाग कुछ Android और iOS उपकरणों पर प्रसिद्ध मॉडल चलाते समय TensorFlow Lite प्रदर्शन बेंचमार्क सूचीबद्ध करता है।

एंड्रॉइड प्रदर्शन बेंचमार्क

ये प्रदर्शन बेंचमार्क नंबर मूल बेंचमार्क बाइनरी के साथ उत्पन्न किए गए थे।

एंड्रॉइड बेंचमार्क के लिए, सीपीयू एफ़िनिटी को भिन्नता को कम करने के लिए डिवाइस पर बड़े कोर का उपयोग करने के लिए सेट किया गया है ( विवरण देखें)।

यह मानता है कि मॉडल डाउनलोड किए गए थे और /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

Nnapi प्रतिनिधि के साथ चलाने के लिए, --use_nnapi=true सेट करें। GPU प्रतिनिधि के साथ चलाने के लिए, --use_gpu=true सेट करें।

नीचे दिए गए प्रदर्शन मान Android 10 पर मापे गए हैं।

मॉडल नाम उपकरण सीपीयू, 4 धागे जीपीयू एनएनएपीआई
मोबाइलनेट_1.0_224(फ्लोट) पिक्सेल 3 23.9 एमएस 6.45 एमएस 13.8 एमएस
पिक्सेल 4 14.0 एमएस 9.0 एमएस 14.8 एमएस
मोबाइलनेट_1.0_224 (मात्रा) पिक्सेल 3 13.4 एमएस --- 6.0 एमएस
पिक्सेल 4 5.0 एमएस --- 3.2 एमएस
NASNet मोबाइल पिक्सेल 3 56 एमएस --- 102 एमएस
पिक्सेल 4 34.5 एमएस --- 99.0 एमएस
स्क्वीज़नेट पिक्सेल 3 35.8 एमएस 9.5 एमएस 18.5 एमएस
पिक्सेल 4 23.9 एमएस 11.1 एमएस 19.0 एमएस
इंसेप्शन_रेसनेट_V2 पिक्सेल 3 422 एमएस 99.8 एमएस 201 एमएस
पिक्सेल 4 272.6 एमएस 87.2 एमएस 171.1 एमएस
आरंभ_V4 पिक्सेल 3 486 एमएस 93 एमएस 292 एमएस
पिक्सेल 4 324.1 एमएस 97.6 एमएस 186.9 एमएस

आईओएस प्रदर्शन बेंचमार्क

ये प्रदर्शन बेंचमार्क नंबर iOS बेंचमार्क ऐप के साथ तैयार किए गए थे।

आईओएस बेंचमार्क चलाने के लिए, बेंचमार्क ऐप को उचित मॉडल को शामिल करने के लिए संशोधित किया गया था और benchmark_params.json num_threads 2 पर सेट करने के लिए संशोधित किया गया था। GPU प्रतिनिधि का उपयोग करने के लिए, "use_gpu" : "1" और "gpu_wait_type" : "aggressive" विकल्प थे benchmark_params.json में भी जोड़ा गया।

मॉडल नाम उपकरण सीपीयू, 2 धागे जीपीयू
मोबाइलनेट_1.0_224(फ्लोट) आईफोन एक्सएस 14.8 एमएस 3.4 एमएस
मोबाइलनेट_1.0_224 (मात्रा) आईफोन एक्सएस 11 एमएस ---
NASNet मोबाइल आईफोन एक्सएस 30.4 एमएस ---
स्क्वीज़नेट आईफोन एक्सएस 21.1 एमएस 15.5 एमएस
इंसेप्शन_रेसनेट_V2 आईफोन एक्सएस 261.1 एमएस 45.7 एमएस
आरंभ_V4 आईफोन एक्सएस 309 एमएस 54.4 एमएस

TensorFlow लाइट आंतरिक का पता लगाएं

Android में TensorFlow Lite इंटर्नल का पता लगाएं

एंड्रॉइड ऐप के टेन्सरफ्लो लाइट इंटरप्रेटर से आंतरिक घटनाओं को एंड्रॉइड ट्रेसिंग टूल द्वारा कैप्चर किया जा सकता है। वे एंड्रॉइड ट्रेस एपीआई के साथ समान इवेंट हैं, इसलिए जावा/कोटलिन कोड से कैप्चर किए गए इवेंट को टेन्सरफ्लो लाइट आंतरिक इवेंट के साथ देखा जाता है।

घटनाओं के कुछ उदाहरण हैं:

  • संचालिका मंगलाचरण
  • प्रतिनिधि द्वारा ग्राफ़ संशोधन
  • टेंसर आवंटन

निशान कैप्चर करने के विभिन्न विकल्पों के बीच, यह गाइड एंड्रॉइड स्टूडियो सीपीयू प्रोफाइलर और सिस्टम ट्रेसिंग ऐप को कवर करता है। अन्य विकल्पों के लिए पर्फ़ेटो कमांड-लाइन टूल या सिस्ट्रेस कमांड-लाइन टूल देखें।

जावा कोड में ट्रेस इवेंट जोड़ना

यह छवि वर्गीकरण उदाहरण ऐप से एक कोड स्निपेट है। TensorFlow Lite दुभाषिया recognizeImage/runInference अनुभाग में चलता है। यह चरण वैकल्पिक है लेकिन यह पता लगाने में मदद करने के लिए उपयोगी है कि अनुमान कॉल कहाँ की गई है।

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

TensorFlow Lite ट्रेसिंग सक्षम करें

TensorFlow Lite ट्रेसिंग को सक्षम करने के लिए, Android ऐप शुरू करने से पहले Android सिस्टम प्रॉपर्टी debug.tflite.trace को 1 पर सेट करें।

adb shell setprop debug.tflite.trace 1

यदि यह प्रॉपर्टी TensorFlow Lite दुभाषिया आरंभ होने पर सेट की गई है, तो दुभाषिया से प्रमुख घटनाओं (उदाहरण के लिए, ऑपरेटर आमंत्रण) का पता लगाया जाएगा।

सभी निशानों को कैप्चर करने के बाद, संपत्ति मान को 0 पर सेट करके ट्रेसिंग को अक्षम करें।

adb shell setprop debug.tflite.trace 0

एंड्रॉइड स्टूडियो सीपीयू प्रोफाइलर

नीचे दिए गए चरणों का पालन करके एंड्रॉइड स्टूडियो सीपीयू प्रोफाइलर के साथ निशान कैप्चर करें:

  1. शीर्ष मेनू से रन > प्रोफ़ाइल 'ऐप' चुनें।

  2. प्रोफाइलर विंडो दिखाई देने पर सीपीयू टाइमलाइन में कहीं भी क्लिक करें।

  3. सीपीयू प्रोफाइलिंग मोड के बीच 'ट्रेस सिस्टम कॉल' का चयन करें।

    'ट्रेस सिस्टम कॉल' चुनें

  4. 'रिकॉर्ड' बटन दबाएँ.

  5. 'स्टॉप' बटन दबाएँ.

  6. ट्रेस परिणाम की जांच करें.

    एंड्रॉइड स्टूडियो ट्रेस

इस उदाहरण में, आप थ्रेड में घटनाओं का पदानुक्रम और प्रत्येक ऑपरेटर समय के आंकड़े देख सकते हैं और थ्रेड के बीच पूरे ऐप का डेटा प्रवाह भी देख सकते हैं।

सिस्टम ट्रेसिंग ऐप

सिस्टम ट्रेसिंग ऐप में विस्तृत चरणों का पालन करके एंड्रॉइड स्टूडियो के बिना निशान कैप्चर करें।

इस उदाहरण में, वही TFLite ईवेंट कैप्चर किए गए और एंड्रॉइड डिवाइस के संस्करण के आधार पर पर्फ़ेटो या सिस्ट्रेस प्रारूप में सहेजे गए। कैप्चर की गई ट्रेस फ़ाइलें Perfetto UI में खोली जा सकती हैं।

परफेक्टो ट्रेस

iOS में TensorFlow Lite इंटर्नल का पता लगाएं

iOS ऐप के TensorFlow Lite दुभाषिया से आंतरिक घटनाओं को Xcode के साथ शामिल इंस्ट्रूमेंट्स टूल द्वारा कैप्चर किया जा सकता है। वे iOS साइनपोस्ट इवेंट हैं, इसलिए स्विफ्ट/ऑब्जेक्टिव-सी कोड से कैप्चर किए गए इवेंट को TensorFlow Lite आंतरिक इवेंट के साथ देखा जाता है।

घटनाओं के कुछ उदाहरण हैं:

  • संचालिका मंगलाचरण
  • प्रतिनिधि द्वारा ग्राफ़ संशोधन
  • टेंसर आवंटन

TensorFlow Lite ट्रेसिंग सक्षम करें

नीचे दिए गए चरणों का पालन करके पर्यावरण चर debug.tflite.trace सेट करें:

  1. Xcode के शीर्ष मेनू से उत्पाद > योजना > संपादन योजना... चुनें।

  2. बाएँ फलक में 'प्रोफ़ाइल' पर क्लिक करें।

  3. 'रन क्रिया के तर्कों और पर्यावरण चर का उपयोग करें' चेकबॉक्स को अचयनित करें।

  4. 'पर्यावरण चर' अनुभाग के अंतर्गत debug.tflite.trace जोड़ें।

    पर्यावरण चर सेट करें

यदि आप iOS ऐप को प्रोफाइल करते समय TensorFlow Lite इवेंट को बाहर करना चाहते हैं, तो पर्यावरण चर को हटाकर ट्रेसिंग को अक्षम करें।

एक्सकोड उपकरण

नीचे दिए गए चरणों का पालन करके निशान कैप्चर करें:

  1. Xcode के शीर्ष मेनू से उत्पाद > प्रोफ़ाइल चुनें।

  2. इंस्ट्रूमेंट्स टूल लॉन्च होने पर प्रोफाइलिंग टेम्प्लेट के बीच लॉगिंग पर क्लिक करें।

  3. 'प्रारंभ' बटन दबाएँ.

  4. 'स्टॉप' बटन दबाएँ.

  5. OS लॉगिंग सबसिस्टम आइटम का विस्तार करने के लिए 'os_signpost' पर क्लिक करें।

  6. 'org.tensorflow.lite' OS लॉगिंग सबसिस्टम पर क्लिक करें।

  7. ट्रेस परिणाम की जांच करें.

    Xcode उपकरण ट्रेस

इस उदाहरण में, आप प्रत्येक ऑपरेटर समय के लिए घटनाओं और आंकड़ों का पदानुक्रम देख सकते हैं।

ट्रेसिंग डेटा का उपयोग करना

ट्रेसिंग डेटा आपको प्रदर्शन बाधाओं की पहचान करने की अनुमति देता है।

यहां अंतर्दृष्टि के कुछ उदाहरण दिए गए हैं जो आप प्रोफाइलर से प्राप्त कर सकते हैं और प्रदर्शन को बेहतर बनाने के लिए संभावित समाधान भी प्राप्त कर सकते हैं:

  • यदि उपलब्ध सीपीयू कोर की संख्या अनुमान थ्रेड्स की संख्या से कम है, तो सीपीयू शेड्यूलिंग ओवरहेड खराब प्रदर्शन का कारण बन सकता है। आप अपने मॉडल अनुमान के साथ ओवरलैपिंग से बचने या दुभाषिया थ्रेड की संख्या में बदलाव करने के लिए अपने एप्लिकेशन में अन्य सीपीयू गहन कार्यों को पुनर्निर्धारित कर सकते हैं।
  • यदि ऑपरेटरों को पूरी तरह से प्रत्यायोजित नहीं किया गया है, तो मॉडल ग्राफ़ के कुछ हिस्सों को अपेक्षित हार्डवेयर त्वरक के बजाय सीपीयू पर निष्पादित किया जाता है। आप असमर्थित ऑपरेटरों को समान समर्थित ऑपरेटरों से प्रतिस्थापित कर सकते हैं।