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

बेंचमार्क टूल

LiteRT बेंचमार्क टूल, मौजूदा समय में ये ज़रूरी परफ़ॉर्मेंस मेट्रिक होती हैं:

  • प्रोसेस शुरू होने का समय
  • वॉर्मअप स्थिति का अनुमान
  • स्थिर स्थिति का अनुमान समय
  • शुरू करने के दौरान, मेमोरी का इस्तेमाल
  • मेमोरी का पूरा इस्तेमाल

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

Android के लिए मानक ऐप्लिकेशन

Android के साथ मानदंड टूल का इस्तेमाल करने के दो विकल्प हैं. एक है नेटिव बेंचमार्क बाइनरी और दूसरी, Android है मानदंड ऐप्लिकेशन, इस बात का बेहतर आकलन है कि मॉडल ऐप्लिकेशन में कैसा प्रदर्शन करेगा. इनमें से कोई एक हालाँकि, बेंचमार्क टूल की संख्याएँ अनुमान को वास्तविक ऐप्लिकेशन में मॉडल के साथ चलाने के लिए किया जा सकता है.

इस Android मानदंड ऐप्लिकेशन में कोई यूज़र इंटरफ़ेस (यूआई) नहीं है. adb का इस्तेमाल करके, इसे इंस्टॉल करें और चलाएं आदेश और adb logcat आदेश का उपयोग करके परिणाम पुनर्प्राप्त करें.

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

यहां दिए गए लिंक का इस्तेमाल करके, हर रात पहले से बने Android मानदंड वाले ऐप्लिकेशन डाउनलोड करें:

TF ops का समर्थन करने वाले Android बेंचमार्क ऐप्लिकेशन के लिए फ़्लेक्स डेलिगेट के ज़रिए, नीचे दिए गए लिंक का उपयोग करें:

ऐप्लिकेशन बनाने के लिए, यहां दिए गए दिशा-निर्देशों का पालन करें. निर्देश.

मानदंड तैयार करें

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

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

नेटिव बेंचमार्क बाइनरी

बेंचमार्क टूल को, नेटिव बाइनरी benchmark_model के तौर पर भी दिया जाता है. आप इस टूल को Linux, Mac, एम्बेड किए गए डिवाइसों, और Android डिवाइस.

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

रात में पहले से बनी नेटिव कमांड-लाइन बाइनरी डाउनलोड करें. इसके लिए, नीचे दिए गए निर्देशों का पालन करें: नीचे दिए गए लिंक:

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

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

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

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

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

आप पैरामीटर जैसा कि ऊपर बताया गया है. साथ ही, यह नेटिव कमांड-लाइन बाइनरी के साथ होना चाहिए.

प्रोफ़ाइलिंग मॉडल ops

मानदंड मॉडल की बाइनरी से, आपको मॉडल ऑपरेशन की प्रोफ़ाइल बनाने और लागू होने का समय तय करता है. ऐसा करने के लिए फ़्लैग को शुरू करने के दौरान --enable_op_profiling=true से benchmark_model तक. विवरण हैं पूरी जानकारी यहां पढ़ें.

एक ही बार में, परफ़ॉर्मेंस के कई विकल्पों के लिए नेटिव बेंचमार्क बाइनरी

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

perf_options_list: string (default='all')
मानदंड के लिए, TFLite की परफ़ॉर्मेंस के विकल्पों की कॉमा-सेपरेटेड लिस्ट.

इस टूल के लिए, हर रात पहले से बनी बाइनरी मिल सकती हैं. इनके बारे में जानकारी दी गई है:

iOS मानदंड ऐप्लिकेशन

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

जाने-माने मॉडल के लिए परफ़ॉर्मेंस के मानदंड

इस सेक्शन में, अच्छी तरह से काम करने पर LiteRT की परफ़ॉर्मेंस के मानदंड की जानकारी दी गई है कुछ Android और iOS डिवाइसों पर जाने-पहचाने मॉडल होते हैं.

Android की परफ़ॉर्मेंस के मानदंड

ये प्रदर्शन मानदंड संख्याएं नेटिव बेंचमार्क बाइनरी.

Android के मानदंड के लिए, सीपीयू अफ़िनिटी को डिवाइस पर बड़े कोर का इस्तेमाल करने के लिए सेट किया गया है (देखें) ब्यौरा).

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

जीपीयू डेलिगेट की मदद से काम करने के लिए, --use_gpu=true सेट करें.

नीचे दी गई परफ़ॉर्मेंस वैल्यू, Android 10 पर मेज़र की गई हैं.

मॉडल का नाम डिवाइस सीपीयू, 4 थ्रेड GPU
Mobilenet_1.0_224(float) Pixel 3 23.9 मिलीसेकंड 6.45 मिलीसेकंड
Pixel 4 14.0 मिलीसेकंड 9.0 मिलीसेकंड
Mobilenet_1.0_224 (क्वांट) Pixel 3 13.4 मिलीसेकंड ---
Pixel 4 5.0 मिलीसेकंड ---
NASNet मोबाइल Pixel 3 56 मिलीसेकंड ---
Pixel 4 34.5 मिलीसेकंड ---
SqueezeNet Pixel 3 35.8 मिलीसेकंड 9.5 मिलीसेकंड
Pixel 4 23.9 मिलीसेकंड 11.1 मिलीसेकंड
Inception_ResNet_V2 Pixel 3 422 मिलीसेकंड 99.8 मिलीसेकंड
Pixel 4 272.6 मिलीसेकंड 87.2 मिलीसेकंड
Inception_V4 Pixel 3 486 मिलीसेकंड 93 मिलीसेकंड
Pixel 4 324.1 मिलीसेकंड 97.6 मिलीसेकंड

iOS के परफ़ॉर्मेंस के मानदंड

ये प्रदर्शन मानदंड संख्याएं iOS मानदंड ऐप्लिकेशन.

iOS मानदंड चलाने के लिए, बेंचमार्क ऐप्लिकेशन को उचित num_threads को 2 पर सेट करने के लिए, मॉडल और benchmark_params.json में बदलाव किया गया. इस्तेमाल करने के लिए जीपीयू डेलिगेट, "use_gpu" : "1", और "gpu_wait_type" : "aggressive" विकल्प benchmark_params.json में भी जोड़े गए.

मॉडल का नाम डिवाइस सीपीयू, 2 थ्रेड GPU
Mobilenet_1.0_224(float) iPhone XS 14.8 मिलीसेकंड 3.4 मिलीसेकंड
Mobilenet_1.0_224 (क्वांट) iPhone XS 11 मि॰से॰ ---
NASNet मोबाइल iPhone XS 30.4 मिलीसेकंड ---
SqueezeNet iPhone XS 21.1 मिलीसेकंड 15.5 मिलीसेकंड
Inception_ResNet_V2 iPhone XS 261.1 मिलीसेकंड 45.7 मिलीसेकंड
Inception_V4 iPhone XS 309 मिलीसेकंड 54.4 मिलीसेकंड

LiteRT इंंटरनल ट्रेस करें

Android में LiteRT के अंदरूनी हिस्सों को ट्रेस करना

Android ऐप्लिकेशन के LiteRT अनुवादक के इंटरनल इवेंट इसने कैप्चर किया Android ट्रेस करने वाले टूल. Android डिवाइस पर भी ये इवेंट होते हैं Trace एपीआई की मदद से, Java/Kotlin कोड से कैप्चर किए गए इवेंट, LiteRT के साथ देखे जाते हैं आंतरिक इवेंट.

इवेंट के कुछ उदाहरण यहां दिए गए हैं:

  • ऑपरेटर को न्योता देना
  • डेलिगेट के वोट के हिसाब से ग्राफ़ में बदलाव
  • टेन्सर ऐलोकेशन

ट्रेस कैप्चर करने के अलग-अलग विकल्पों में से, इस गाइड में Android के Studio सीपीयू प्रोफ़ाइलर और सिस्टम ट्रेसिंग ऐप्लिकेशन. इससे संदर्भ लें Perfetto कमांड-लाइन टूल या Systrace कमांड-लाइन टूल देखें.

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

यह इमेज क्लासिफ़िकेशन उदाहरण के लिए. LiteRT का अनुवादक मोड इसमें चलता है: recognizeImage/runInference सेक्शन में देख सकते हैं. यह चरण ज़रूरी नहीं है, लेकिन अनुमान के लिए कॉल की जगह बताने में मदद करें.

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

LiteRT ट्रेस करने की सुविधा चालू करें

LiteRT ट्रेस करने की सुविधा चालू करने के लिए, Android सिस्टम की प्रॉपर्टी को सेट करें Android ऐप्लिकेशन शुरू करने से पहले, debug.tflite.trace से 1 तक.

adb shell setprop debug.tflite.trace 1

अगर यह प्रॉपर्टी, LiteRT अनुवादक के शुरू होते समय सेट की गई है, अनुवादक की मदद से किए गए मुख्य इवेंट (जैसे कि ऑपरेटर को शुरू करना) को ट्रेस किया जाएगा.

सभी ट्रेस कैप्चर करने के बाद, प्रॉपर्टी की वैल्यू सेट करके ट्रेस करने की सुविधा बंद करें से 0 तक.

adb shell setprop debug.tflite.trace 0

Android Studio सीपीयू प्रोफ़ाइलर

इसकी मदद से ट्रेस कैप्चर करें Android Studio सीपीयू प्रोफ़ाइलर इसके लिए, यह तरीका अपनाएं:

  1. Run > सबसे ऊपर मौजूद मेन्यू से प्रोफ़ाइल 'ऐप्लिकेशन'.

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

  3. 'सिस्टम कॉल ट्रेस करें' को चुनें के लिए इस्तेमाल किया जा सकता है.

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

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

  5. 'बंद करें' दबाएं बटन.

  6. ट्रेस के नतीजे की जांच करें.

    Android Studio ट्रेस

इस उदाहरण में, थ्रेड में इवेंट की हैरारकी और आंकड़े देखे जा सकते हैं हर ऑपरेटर समय के लिए और पूरे ऐप्लिकेशन का डेटा फ़्लो भी देखा जा सकता है थ्रेड.

सिस्टम ट्रेस करने वाला ऐप्लिकेशन

Android Studio के बिना भी ट्रेस कैप्चर करें. इसके लिए, सिस्टम ट्रेस करने वाला ऐप्लिकेशन.

इस उदाहरण में, TFLite के उन्हीं इवेंट को कैप्चर करके, Perfetto में सेव किया गया या Systrace फ़ॉर्मैट में होनी चाहिए. कैप्चर की गई ट्रेस फ़ाइलों को Perfetto यूज़र इंटरफ़ेस (यूआई) में खोला जा सकता है.

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

iOS में LiteRT इंंटरनल ट्रेस करें

किसी iOS ऐप्लिकेशन के LiteRT अनुवादक के इंटरनल इवेंट इसने कैप्चर किया इंस्ट्रुमेंट Xcode के साथ शामिल टूल. वे iOS हैं signpost इवेंट हैं, इसलिए Swift/Objective-C कोड से कैप्चर किए गए इवेंट एक साथ देखे जा सकते हैं LiteRT इंटरनल इवेंट के साथ.

इवेंट के कुछ उदाहरण यहां दिए गए हैं:

  • ऑपरेटर को न्योता देना
  • डेलिगेट के वोट के हिसाब से ग्राफ़ में बदलाव
  • टेन्सर ऐलोकेशन

LiteRT ट्रेस करने की सुविधा चालू करें

एनवायरमेंट वैरिएबल debug.tflite.trace को सेट करने के लिए, यह तरीका अपनाएं:

  1. प्रॉडक्ट > स्कीम > Xcode के टॉप मेन्यू से स्कीम में बदलाव करें....

  2. 'प्रोफ़ाइल' क्लिक करें क्लिक करें.

  3. ''रन कार्रवाई' के आर्ग्युमेंट और एनवायरमेंट वैरिएबल का इस्तेमाल करें' से चुने हुए का निशान हटाएं चेकबॉक्स.

  4. 'एनवायरमेंट वैरिएबल' में जाकर debug.tflite.trace जोड़ें सेक्शन में जाएं.

    एनवायरमेंट वैरिएबल सेट करें

अगर आपको iOS ऐप्लिकेशन की प्रोफ़ाइल बनाते समय LiteRT इवेंट को बाहर रखना है, तो एनवायरमेंट वैरिएबल को हटाकर ट्रेसिंग को बंद करें.

XCode इंस्ट्रुमेंट

ट्रेस कैप्चर करने के लिए, नीचे दिया गया तरीका अपनाएं:

  1. प्रॉडक्ट > Xcode के टॉप मेन्यू से प्रोफ़ाइल.

  2. इंस्ट्रुमेंट टूल लॉन्च होने पर, प्रोफ़ाइलिंग टेंप्लेट में लॉगिंग पर क्लिक करें.

  3. 'शुरू करें' दबाएं बटन.

  4. 'बंद करें' दबाएं बटन.

  5. 'os_signpost' पर क्लिक करें का इस्तेमाल करें.

  6. 'org.tensorflow.lite' पर क्लिक करें ओएस का लॉग इन सबसिस्टम.

  7. ट्रेस के नतीजे की जांच करें.

    Xcode इंस्ट्रुमेंट ट्रेस

इस उदाहरण में, हर इवेंट और मेट्रिक के आंकड़ों का क्रम देखा जा सकता है ऑपरेटर का समय.

ट्रेसिंग डेटा का इस्तेमाल करना

ट्रेस करने के डेटा की मदद से, परफ़ॉर्मेंस में आने वाली रुकावटों की पहचान की जा सकती है.

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

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