سوالی دارید؟ در انجمن بازدید از انجمن TensorFlow با انجمن ارتباط برقرار کنید

اندازه گیری عملکرد

ابزار معیار

ابزار معیار TensorFlow Lite در حال حاضر آمار مربوط به معیارهای مهم عملکرد زیر را اندازه گیری و محاسبه می کند:

  • زمان شروع
  • زمان استنباط حالت گرم شدن
  • زمان استنباط از حالت پایدار
  • استفاده از حافظه در زمان مقداردهی اولیه
  • استفاده کلی از حافظه

ابزارهای معیار به عنوان برنامه های معیار برای Android و iOS و به عنوان باینری خط فرمان بومی در دسترس هستند و همه آنها از همان منطق اندازه گیری عملکرد اصلی یکسانی برخوردار هستند. توجه داشته باشید که گزینه های موجود و فرمت های خروجی به دلیل تفاوت در محیط زمان اجرا ، کمی متفاوت است.

برنامه معیار Android

دو گزینه استفاده از ابزار معیار با Android وجود دارد. یکی از آنها باینری معیار بومی است و دیگری یک برنامه بنچمارک اندروید ، اندازه گیری بهتر نحوه عملکرد مدل در برنامه. در هر صورت ، اعداد حاصل از ابزار محک هنوز با هنگام استنتاج با مدل در برنامه واقعی تفاوت کمی دارند.

این برنامه معیار Android فاقد رابط کاربری است. با استفاده از دستور adb آن را نصب و اجرا کنید و با استفاده از دستور adb logcat نتایج را بازیابی کنید.

برنامه را بارگیری یا بسازید

با استفاده از پیوندهای زیر ، برنامه های بنچمارک آندروید را از قبل ساخته شده در شب بارگیری کنید

در مورد برنامه های معیار آندروید که از طریق TF Flex از عملکردهای TF پشتیبانی می کنند ، از پیوندهای زیر استفاده کنید:

با دنبال کردن این دستورالعمل ها می توانید برنامه را از منبع نیز بسازید.

معیار را آماده کنید

قبل از اجرای برنامه معیار ، برنامه را نصب کنید و فایل مدل را به شرح زیر به دستگاه فشار دهید:

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_nnapi : bool (پیش فرض = نادرست)
    از نماینده NNAPI استفاده کنید.
  • use_xnnpack : bool (پیش فرض = false )
    از نماینده XNNPACK استفاده کنید.
  • use_hexagon : bool (پیش فرض = false )
    از نماینده شش ضلعی استفاده کنید.

بسته به دستگاهی که استفاده می کنید ، برخی از این گزینه ها ممکن است در دسترس نباشند یا تأثیری نداشته باشند. برای پارامترهای عملکرد بیشتر که می توانید با برنامه معیار اجرا کنید ، به پارامترها مراجعه کنید.

نتایج را با استفاده از دستور logcat :

adb logcat | grep "Average inference"

نتایج معیار به شرح زیر گزارش می شود:

... tflite  : Average inference timings in us: Warmup: 91471, Init: 4108, Inference: 80660.1

باینری معیار بومی

ابزار معیار نیز به عنوان یک باینری بومی ارائه benchmark_model . می توانید این ابزار را از یک خط فرمان shell در Linux ، Mac ، دستگاه های تعبیه شده و دستگاه های Android اجرا کنید.

باینری را بارگیری یا بسازید

با دنبال کردن پیوندهای زیر ، باینری های خط فرمان بومی را از قبل ساخته شده بارگیری کنید:

در مورد باینری های پیش ساخته شبانه که از طریق TF Flex از عملکردهای TF پشتیبانی می کنند ، از پیوندهای زیر استفاده کنید:

همچنین می توانید باینری را که از نظر منبع ساخته شده است از طریق رایانه خود ایجاد کنید.

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

برای ساخت با ابزار ابزار Android NDK ، ابتدا باید با دنبال کردن این راهنما محیط ساخت را تنظیم کنید یا از تصویر docker همانطور که در این راهنما شرح داده شده استفاده کنید.

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 ++ راحت و ساده نیز برای محک زدن چندین گزینه عملکرد در یک اجرا ارائه شده است. این باینری بر اساس ابزار بنچمارک فوق الذکر ساخته شده است که فقط می تواند همزمان یک گزینه عملکردی را محک بزند. آنها از همان مراحل ساخت / نصب / اجرا استفاده می کنند ، اما نام هدف BUILD این باینری benchmark_model_performance_options و برخی پارامترهای اضافی را می گیرد. یک پارامتر مهم برای این باینری این است:

perf_options_list : string (پیش فرض = 'همه')
لیستی از گزینه های عملکرد TFLite برای محک زدن با کاما.

می توانید باینری از قبل ساخته شده شبانه را برای این ابزار به شرح زیر دریافت کنید:

برنامه معیار iOS

برای اجرای معیارها در دستگاه iOS ، باید برنامه را از منبع ایجاد کنید . فایل TensorFlow Lite را در دایرکتوری benchmark_data درخت منبع قرار دهید و فایل benchmark_params.json را اصلاح کنید. این پرونده ها در برنامه بسته بندی می شوند و برنامه داده ها را از فهرست می خواند. برای راهنمایی دقیق به برنامه معیار iOS مراجعه کنید.

معیارهای عملکرد برای مدل های شناخته شده

این بخش معیارهای عملکرد TensorFlow Lite را هنگام اجرای مدل های شناخته شده در برخی از دستگاه های Android و iOS لیست می کند.

معیارهای عملکرد Android

این اعداد معیار عملکرد با باینری معیار بومی تولید شدند.

برای محک های اندروید ، میل CPU قرار است از هسته های بزرگ دستگاه استفاده کند تا واریانس را کاهش دهد ( جزئیات را ببینید).

فرض بر این است که مدل ها بارگیری و از فهرست /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 موضوع پردازنده گرافیکی NNAPI
Mobilenet_1.0_224 (شناور) پیکسل 3 23.9 میلی ثانیه 6.45 میلی ثانیه 13.8 میلی ثانیه
پیکسل 4 14.0 میلی ثانیه 9.0 میلی ثانیه 14.8 میلی ثانیه
Mobilenet_1.0_224 (تعداد) پیکسل 3 13.4 میلی ثانیه --- 6.0 میلی ثانیه
پیکسل 4 5.0 میلی ثانیه --- 3.2 میلی ثانیه
تلفن همراه NASNet پیکسل 3 56 میلی ثانیه --- 102 میلی ثانیه
پیکسل 4 34.5 میلی ثانیه --- 99.0 میلی ثانیه
SqueezeNet پیکسل 3 35.8 میلی ثانیه 9.5 میلی ثانیه 18.5 میلی ثانیه
پیکسل 4 23.9 میلی ثانیه 11.1 میلی ثانیه 19.0 میلی ثانیه
Inception_ResNet_V2 پیکسل 3 422 میلی ثانیه 99.8 میلی ثانیه 201 میلی ثانیه
پیکسل 4 272.6 میلی ثانیه 87.2 میلی ثانیه 171.1 میلی ثانیه
Inception_V4 پیکسل 3 486 میلی ثانیه 93 میلی ثانیه 292 میلی ثانیه
پیکسل 4 324.1 میلی ثانیه 97.6 میلی ثانیه 186.9 میلی ثانیه

معیارهای عملکرد iOS

این شماره معیار عملکرد با برنامه معیار iOS تولید شده است.

برای اجرای معیارهای iOS ، برنامه معیار با استفاده از مدل مناسب و benchmark_params.json اصلاح شد تا num_threads به 2 تنظیم num_threads . برای استفاده از نماینده GPU ، "use_gpu" : "1" و "gpu_wait_type" : "aggressive" گزینه های "gpu_wait_type" : "aggressive" بودند همچنین به benchmark_params.json اضافه شد.

نام مدل دستگاه پردازنده ، 2 موضوع پردازنده گرافیکی
Mobilenet_1.0_224 (شناور) آیفون XS 14.8 میلی ثانیه 3.4 میلی ثانیه
Mobilenet_1.0_224 (تعداد) آیفون XS 11 میلی ثانیه ---
تلفن همراه NASNet آیفون XS 30.4 میلی ثانیه ---
SqueezeNet آیفون XS 21.1 میلی ثانیه 15.5 میلی ثانیه
Inception_ResNet_V2 آیفون XS 261.1 میلی ثانیه 45.7 میلی ثانیه
Inception_V4 آیفون XS 309 میلی ثانیه 54.4 میلی ثانیه

ردیابی TensorFlow Lite داخلی در آندروید

وقایع داخلی از مفسر TensorFlow Lite یک برنامه Android را می توان توسط ابزار ردیابی Android ضبط کرد. این رویداد مشابه با Android Trace API است ، بنابراین وقایع گرفته شده از کد Java / Kotlin همراه با رویدادهای داخلی TensorFlow Lite مشاهده می شوند.

چند نمونه از وقایع عبارتند از:

  • فراخوانی اپراتور
  • اصلاح نمودار توسط نماینده
  • تخصیص تانسور

در میان گزینه های مختلف برای ثبت ردیابی ها ، این راهنما شامل Android Studio CPU Profiler و برنامه System Tracing است. برای سایر گزینه ها به ابزار خط فرمان Perfetto یا ابزار خط فرمان Systrace مراجعه کنید.

افزودن رویدادهای ردیابی در کد جاوا

این یک قطعه کد از برنامه مثال طبقه بندی تصویر است . مفسر recognizeImage/runInference 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.tracing روی 1 تنظیم کنید.

adb shell setprop debug.tflite.trace 1

اگر این ویژگی هنگام شروع مقدمات TensorFlow Lite تنظیم شده باشد ، رویدادهای اصلی (به عنوان مثال ، فراخوانی اپراتور) از مفسر ردیابی می شوند.

بعد از اینکه همه ردیابی ها را ثبت کردید ، با تنظیم مقدار خاصیت روی 0 ، ردیابی را غیرفعال کنید.

adb shell setprop debug.tflite.trace 0

Android Studio CPU Profiler

با دنبال کردن مراحل زیر ردیابی ها را با Android Studio CPU Profiler ضبط کنید:

  1. Run> Profile "app" را از فهرست های بالا انتخاب کنید.

  2. وقتی پنجره Profiler ظاهر می شود ، روی هر کجای جدول زمانی CPU کلیک کنید.

  3. "ردیابی تماس های سیستم" را از میان حالت های پروفایل CPU انتخاب کنید.

    "ردیابی تماس های سیستم" را انتخاب کنید

  4. دکمه "ضبط" را فشار دهید.

  5. دکمه "توقف" را فشار دهید.

  6. نتیجه ردیابی را بررسی کنید.

    ردیابی Android Studio

در این مثال ، شما می توانید سلسله مراتب رویدادها را در یک رشته و آمار برای هر زمان اپراتور مشاهده کنید و همچنین جریان داده کل برنامه را در میان رشته ها مشاهده کنید.

برنامه ردیابی سیستم

با دنبال کردن مراحل دقیق در برنامه ردیابی سیستم ، ردیابی ها را بدون Android Studio ضبط کنید.

در این مثال ، همان رویدادهای TFLite بسته به نسخه دستگاه Android در قالب Perfetto یا Systrace ذخیره شده است. پرونده های ردیابی گرفته شده را می توان در رابط کاربری Perfetto باز کرد.

رد پرفتو

با استفاده از داده های ردیابی

داده های ردیابی به شما امکان می دهد گلوگاه های عملکرد را شناسایی کنید.

در اینجا چند نمونه از بینش هایی وجود دارد که می توانید از پروفایلر و راه حل های بالقوه برای بهبود عملکرد دریافت کنید:

  • اگر تعداد هسته های پردازنده موجود از تعداد رشته های استنباط کوچکتر باشد ، بنابراین سربار زمان بندی CPU می تواند منجر به عملکرد فرعی شود. برای جلوگیری از همپوشانی با استنتاج مدل خود می توانید سایر کارهای فشرده پردازنده را در برنامه خود برنامه ریزی کنید تا تعداد رشته های مفسر را تغییر دهید.
  • اگر عملگرها به طور کامل تفویض نشده باشند ، بعضی از قسمتهای نمودار مدل به جای شتاب دهنده سخت افزاری مورد انتظار ، روی پردازنده اجرا می شوند. می توانید اپراتورهای پشتیبانی نشده را با اپراتورهای پشتیبانی شده مشابه جایگزین کنید.