Catat tanggalnya! Google I / O mengembalikan 18-20 Mei Daftar sekarang
Halaman ini diterjemahkan oleh Cloud Translation API.
Switch to English

Pengukuran kinerja

Alat benchmark

Alat tolok ukur TensorFlow Lite saat ini mengukur dan menghitung statistik untuk metrik performa penting berikut:

  • Waktu inisialisasi
  • Waktu inferensi status pemanasan
  • Waktu inferensi dari kondisi mapan
  • Penggunaan memori selama waktu inisialisasi
  • Penggunaan memori secara keseluruhan

Alat benchmark tersedia sebagai aplikasi benchmark untuk Android dan iOS dan sebagai biner baris perintah asli, dan semuanya berbagi logika pengukuran kinerja inti yang sama. Perhatikan bahwa opsi yang tersedia dan format keluaran sedikit berbeda karena perbedaan lingkungan runtime.

Aplikasi benchmark Android

Ada dua opsi untuk menggunakan alat benchmark dengan Android. Salah satunya adalah biner patokan asli dan yang lainnya adalah aplikasi tolok ukur Android, ukuran yang lebih baik tentang bagaimana model akan bekerja dalam aplikasi. Apa pun itu, angka dari alat tolok ukur akan tetap sedikit berbeda dari saat menjalankan inferensi dengan model di aplikasi sebenarnya.

Aplikasi tolok ukur Android ini tidak memiliki UI. Instal dan jalankan dengan menggunakan perintah adb dan ambil hasil dengan menggunakan perintah adb logcat .

Unduh atau buat aplikasi

Unduh aplikasi benchmark Android yang dibuat sebelumnya setiap malam menggunakan tautan di bawah ini:

Sedangkan untuk aplikasi benchmark Android yang mendukung operasi TF melalui delegasi Flex , gunakan tautan di bawah ini:

Anda juga dapat membuat aplikasi dari sumber dengan mengikuti petunjuk ini.

Siapkan patokan

Sebelum menjalankan aplikasi benchmark, instal aplikasi dan dorong file model ke perangkat sebagai berikut:

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

Jalankan benchmark

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

graph adalah parameter wajib.

  • graph : string
    Jalur ke file model TFLite.

Anda dapat menentukan lebih banyak parameter opsional untuk menjalankan tolok ukur.

  • num_threads : int (default = 1)
    Jumlah utas yang akan digunakan untuk menjalankan interpreter TFLite.
  • use_gpu : bool (default = false)
    Gunakan delegasi GPU .
  • use_nnapi : bool (default = false)
    Gunakan delegasi NNAPI .
  • use_xnnpack : bool (default = false )
    Gunakan delegasi XNNPACK .
  • use_hexagon : bool (default = false )
    Gunakan delegasi Hexagon .

Bergantung pada perangkat yang Anda gunakan, beberapa opsi ini mungkin tidak tersedia atau tidak berpengaruh. Lihat parameter untuk parameter performa lainnya yang dapat Anda jalankan dengan aplikasi benchmark.

Lihat hasilnya menggunakan perintah logcat :

adb logcat | grep "Average inference"

Hasil benchmark dilaporkan sebagai:

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

Biner tolok ukur asli

Alat benchmark juga tersedia sebagai biner benchmark_model . Anda dapat menjalankan alat ini dari baris perintah shell di Linux, Mac, perangkat yang disematkan, dan perangkat Android.

Unduh atau buat biner

Unduh biner baris perintah bawaan bawaan malam dengan mengikuti tautan di bawah ini:

Sedangkan untuk binari yang dibuat setiap malam yang mendukung operasi TF melalui delegasi Flex , gunakan tautan di bawah ini:

Anda juga dapat membangun biner patokan asli dari sumber di komputer Anda.

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

Untuk membuat dengan toolchain Android NDK, Anda perlu menyiapkan lingkungan build terlebih dahulu dengan mengikuti panduan ini, atau menggunakan gambar buruh pelabuhan seperti yang dijelaskan dalam panduan ini.

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

Jalankan benchmark

Untuk menjalankan benchmark di komputer Anda, jalankan biner dari shell.

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

Anda dapat menggunakan kumpulan parameter yang sama seperti yang disebutkan di atas dengan biner baris perintah asli.

Operasi model profil

Biner model tolok ukur juga memungkinkan Anda membuat profil operasi model dan mendapatkan waktu eksekusi setiap operator. Untuk melakukan ini, teruskan bendera --enable_op_profiling=true ke benchmark_model selama pemanggilan. Detailnya dijelaskan di sini .

Biner tolok ukur asli untuk beberapa opsi kinerja dalam satu proses

Biner C ++ yang nyaman dan sederhana juga disediakan untuk mengukur beberapa opsi performa dalam satu proses. Biner ini dibuat berdasarkan alat tolok ukur yang disebutkan di atas yang hanya dapat mengukur satu opsi kinerja dalam satu waktu. Mereka berbagi proses build / install / run yang sama, tetapi nama target BUILD biner ini adalah benchmark_model_performance_options dan dibutuhkan beberapa parameter tambahan. Parameter penting untuk biner ini adalah:

perf_options_list : string (default = 'semua')
Daftar opsi kinerja TFLite yang dipisahkan koma sebagai tolok ukur.

Anda bisa mendapatkan biner yang dibuat setiap malam untuk alat ini seperti yang tercantum di bawah ini:

Aplikasi benchmark iOS

Untuk menjalankan benchmark di perangkat iOS, Anda perlu membangun aplikasi dari sumber . Letakkan file model TensorFlow Lite di direktori benchmark_data dari pohon sumber dan ubah file benchmark_params.json . File tersebut dikemas ke dalam aplikasi dan aplikasi membaca data dari direktori. Kunjungi aplikasi benchmark iOS untuk instruksi mendetail.

Tolok ukur kinerja untuk model terkenal

Bagian ini mencantumkan tolok ukur performa TensorFlow Lite saat menjalankan model terkenal di beberapa perangkat Android dan iOS.

Tolok ukur kinerja Android

Angka tolok ukur kinerja ini dibuat dengan biner tolok ukur asli .

Untuk tolok ukur Android, afinitas CPU disetel untuk menggunakan inti besar pada perangkat untuk mengurangi varians (lihat detail ).

Diasumsikan bahwa model telah diunduh dan dibuka ritsletingnya ke direktori /data/local/tmp/tflite_models . Biner benchmark dibangun menggunakan instruksi ini dan diasumsikan berada di direktori /data/local/tmp .

Untuk menjalankan benchmark:

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

Untuk menjalankan dengan delegasi nnapi, setel --use_nnapi=true . Untuk menjalankan dengan delegasi GPU, setel --use_gpu=true .

Nilai performa di bawah diukur di Android 10.

Nama model Alat CPU, 4 utas GPU NNAPI
Mobilenet_1.0_224 (float) Pixel 3 23.9 md 6,45 md 13,8 md
Pixel 4 14,0 md 9,0 md 14,8 md
Mobilenet_1.0_224 (kuant) Pixel 3 13,4 md --- 6,0 md
Pixel 4 5,0 md --- 3,2 md
Ponsel NASNet Pixel 3 56 ms --- 102 ms
Pixel 4 34,5 md --- 99,0 md
SqueezeNet Pixel 3 35,8 md 9,5 md 18,5 md
Pixel 4 23.9 md 11.1 md 19,0 md
Inception_ResNet_V2 Pixel 3 422 md 99,8 md 201 md
Pixel 4 272.6 ms 87,2 md 171.1 md
Inception_V4 Pixel 3 486 md 93 ms 292 md
Pixel 4 324.1 md 97,6 md 186,9 md

Tolok ukur kinerja iOS

Angka tolok ukur kinerja ini dibuat dengan aplikasi tolok ukur iOS .

Untuk menjalankan tolok ukur iOS, aplikasi tolok ukur dimodifikasi untuk menyertakan model yang sesuai dan benchmark_params.json telah dimodifikasi untuk menyetel num_threads ke 2. Untuk menggunakan delegasi GPU, "use_gpu" : "1" dan "gpu_wait_type" : "aggressive" adalah juga ditambahkan ke benchmark_params.json .

Nama model Alat CPU, 2 utas GPU
Mobilenet_1.0_224 (float) iPhone XS 14,8 md 3,4 md
Mobilenet_1.0_224 (kuant) iPhone XS 11 md ---
Ponsel NASNet iPhone XS 30,4 md ---
SqueezeNet iPhone XS 21.1 md 15,5 md
Inception_ResNet_V2 iPhone XS 261.1 md 45,7 md
Inception_V4 iPhone XS 309 md 54,4 md

Lacak internal TensorFlow Lite di Android

Peristiwa internal dari interpreter TensorFlow Lite aplikasi Android dapat ditangkap oleh alat pelacakan Android . Ini adalah peristiwa yang sama dengan Android Trace API, sehingga peristiwa yang diambil dari kode Java / Kotlin terlihat bersama dengan peristiwa internal TensorFlow Lite.

Beberapa contoh acara adalah:

  • Permintaan operator
  • Modifikasi grafik oleh delegasi
  • Alokasi sensor

Di antara berbagai opsi untuk merekam jejak, panduan ini mencakup Android Studio CPU Profiler dan aplikasi System Tracing. Lihat alat baris perintah Perfetto atau alat baris perintah Systrace untuk opsi lain.

Menambahkan peristiwa pelacakan dalam kode Java

Ini adalah cuplikan kode dari aplikasi contoh Klasifikasi Gambar . Penafsir TensorFlow Lite berjalan di bagian recognizeImage/runInference . Langkah ini opsional tetapi berguna untuk membantu mengetahui di mana panggilan inferensi dilakukan.

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

Aktifkan pelacakan TensorFlow Lite

Untuk mengaktifkan pelacakan TensorFlow Lite, setel properti sistem Android debug.tflite.tracing ke 1 sebelum memulai aplikasi Android.

adb shell setprop debug.tflite.trace 1

Jika properti ini telah disetel saat interpreter TensorFlow Lite diinisialisasi, peristiwa utama (misalnya, permintaan operator) dari interpreter akan dilacak.

Setelah Anda menangkap semua jejak, nonaktifkan pelacakan dengan menyetel nilai properti ke 0.

adb shell setprop debug.tflite.trace 0

Profiler CPU Android Studio

Rekam jejak dengan Android Studio CPU Profiler dengan mengikuti langkah-langkah di bawah ini:

  1. Pilih Run> Profile 'app' dari menu atas.

  2. Klik di mana saja di timeline CPU saat jendela Profiler muncul.

  3. Pilih 'Trace System Calls' di antara mode CPU Profiling.

    Pilih 'Trace System Calls'

  4. Tekan tombol 'Rekam'.

  5. Tekan tombol 'Stop'.

  6. Selidiki hasil jejaknya.

    Pelacakan Android Studio

Dalam contoh ini, Anda dapat melihat hierarki peristiwa di utas dan statistik untuk setiap waktu operator dan juga melihat aliran data dari seluruh aplikasi di antara utas.

Aplikasi Pelacakan Sistem

Rekam jejak tanpa Android Studio dengan mengikuti langkah-langkah yang dijelaskan di aplikasi Pelacakan Sistem .

Dalam contoh ini, peristiwa TFLite yang sama ditangkap dan disimpan ke format Perfetto atau Systrace bergantung pada versi perangkat Android. File jejak yang diambil dapat dibuka di Perfetto UI .

Jejak perfetto

Menggunakan data tracing

Data pelacakan memungkinkan Anda mengidentifikasi hambatan kinerja.

Berikut beberapa contoh wawasan yang bisa Anda peroleh dari profiler dan solusi potensial untuk meningkatkan kinerja:

  • Jika jumlah inti CPU yang tersedia lebih kecil dari jumlah utas inferensi, maka overhead penjadwalan CPU dapat menyebabkan kinerja di bawah standar. Anda dapat menjadwalkan ulang tugas intensif CPU lainnya dalam aplikasi Anda untuk menghindari tumpang tindih dengan inferensi model Anda atau mengubah jumlah utas interpreter.
  • Jika operator tidak sepenuhnya didelegasikan, maka beberapa bagian dari grafik model dijalankan pada CPU daripada akselerator perangkat keras yang diharapkan. Anda dapat mengganti operator yang tidak didukung dengan operator serupa yang didukung.