Pengukuran performa

Alat tolok ukur

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

  • Waktu inisialisasi
  • Waktu inferensi keadaan pemanasan
  • Waktu inferensi keadaan tunak
  • 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 output sedikit berbeda karena perbedaan lingkungan runtime.

Aplikasi benchmark Android

Ada dua opsi untuk menggunakan alat benchmark dengan Android. Salah satunya adalah biner benchmark asli dan lainnya adalah aplikasi benchmark Android, yang merupakan ukuran yang lebih baik tentang performa model dalam aplikasi. Apa pun yang terjadi, angka dari alat benchmark akan tetap sedikit berbeda dibandingkan saat menjalankan inferensi dengan model di aplikasi sebenarnya.

Aplikasi benchmark Android ini tidak memiliki UI. Instal dan jalankan dengan menggunakan perintah adb dan ambil hasilnya dengan menggunakan perintah adb logcat .

Unduh atau buat aplikasinya

Unduh aplikasi benchmark Android nightly yang dibuat sebelumnya 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 berikut.

Siapkan patokan

Sebelum menjalankan aplikasi benchmark, instal aplikasi dan masukkan 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 tolok ukur

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 yang diperlukan.

  • graph : string
    Jalur ke file model TFLite.

Anda dapat menentukan parameter opsional lainnya untuk menjalankan benchmark.

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

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

Lihat hasilnya menggunakan perintah logcat :

adb logcat | grep "Inference timings"

Hasil benchmark dilaporkan sebagai:

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

Biner benchmark asli

Alat benchmark juga disediakan sebagai benchmark_model biner asli. Anda dapat menjalankan alat ini dari baris perintah shell di Linux, Mac, perangkat tertanam, dan perangkat Android.

Unduh atau buat biner

Unduh binari baris perintah asli bawaan malam hari dengan mengikuti tautan di bawah ini:

Sedangkan untuk binari pra-bangun malam yang mendukung operasi TF melalui delegasi Flex , gunakan tautan di bawah ini:

Untuk melakukan benchmark dengan delegasi TensorFlow Lite Hexagon , kami juga telah membuat file libhexagon_interface.so yang diperlukan terlebih dahulu (lihat di sini untuk detail tentang file ini). Setelah mengunduh file dari platform terkait dari tautan di bawah, harap ganti nama file menjadi libhexagon_interface.so .

Anda juga dapat membuat biner benchmark asli dari sumber di komputer Anda.

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

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

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

Jalankan tolok ukur

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 pembuatan profil

Biner model benchmark juga memungkinkan Anda membuat profil operasi model dan mendapatkan waktu eksekusi setiap operator. Untuk melakukannya, teruskan tanda --enable_op_profiling=true ke benchmark_model selama pemanggilan. Detailnya dijelaskan di sini .

Biner benchmark asli untuk beberapa opsi performa dalam sekali proses

Biner C++ yang nyaman dan sederhana juga disediakan untuk mengukur beberapa opsi kinerja dalam sekali proses. Biner ini dibuat berdasarkan alat benchmark yang disebutkan di atas yang hanya dapat melakukan benchmark pada 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 memerlukan beberapa parameter tambahan. Parameter penting untuk biner ini adalah:

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

Anda bisa mendapatkan binari malam yang dibuat sebelumnya untuk alat ini seperti yang tercantum di bawah ini:

aplikasi tolok ukur iOS

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

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 dihasilkan dengan biner tolok ukur asli .

Untuk benchmark Android, afinitas CPU diatur untuk menggunakan core besar pada perangkat untuk mengurangi varians (lihat detailnya ).

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

Untuk menjalankan tolok ukur:

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

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

Nilai performa di bawah diukur pada Android 10.

Nama model Perangkat CPU, 4 utas GPU NNAPI
Mobilenet_1.0_224(mengambang) Piksel 3 23,9 ms 6,45 ms 13,8 ms
Piksel 4 14,0 mdtk 9,0 mdtk 14,8 ms
Mobilenet_1.0_224 (kuantitas) Piksel 3 13,4 ms --- 6,0 mdtk
Piksel 4 5,0 mdtk --- 3,2 ms
seluler NASNet Piksel 3 56 ms --- 102 ms
Piksel 4 34,5 ms --- 99,0 mdtk
pemerasannet Piksel 3 35,8 ms 9,5 ms 18,5 mdtk
Piksel 4 23,9 ms 11,1 mdtk 19,0 mdtk
Awal_ResNet_V2 Piksel 3 422 ms 99,8 mdtk 201 ms
Piksel 4 272,6 mdtk 87,2 ms 171,1 mdtk
Awal_V4 Piksel 3 486 ms 93 ms 292 ms
Piksel 4 324,1 mdtk 97,6 mdtk 186,9 mdtk

Tolok ukur kinerja iOS

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

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

Nama model Perangkat CPU, 2 utas GPU
Mobilenet_1.0_224(mengambang) iPhone XS 14,8 ms 3,4 ms
Mobilenet_1.0_224 (kuantitas) iPhone XS 11 ms ---
seluler NASNet iPhone XS 30,4 ms ---
pemerasannet iPhone XS 21,1 mdtk 15,5 ms
Awal_ResNet_V2 iPhone XS 261,1 mdtk 45,7 ms
Awal_V4 iPhone XS 309 ms 54,4 ms

Lacak internal TensorFlow Lite

Lacak internal TensorFlow Lite di Android

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

Beberapa contoh peristiwa adalah:

  • pemanggilan operator
  • Modifikasi grafik oleh delegasi
  • Alokasi tensor

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

Menambahkan peristiwa jejak dalam kode Java

Ini adalah cuplikan kode dari aplikasi contoh Klasifikasi Gambar . Penerjemah 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 penelusuran TensorFlow Lite

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

adb shell setprop debug.tflite.trace 1

Jika properti ini telah disetel saat penafsir TensorFlow Lite diinisialisasi, peristiwa penting (misalnya pemanggilan operator) dari penafsir akan dilacak.

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

adb shell setprop debug.tflite.trace 0

Profiler CPU Android Studio

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

  1. Pilih Jalankan > Profil 'aplikasi' dari menu atas.

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

  3. Pilih 'Lacak Panggilan Sistem' di antara mode Profil CPU.

    Pilih 'Lacak Panggilan Sistem'

  4. Tekan tombol 'Rekam'.

  5. Tekan tombol 'Berhenti'.

  6. Selidiki hasil penelusurannya.

    jejak Android Studio

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

Aplikasi Pelacakan Sistem

Tangkap jejak tanpa Android Studio dengan mengikuti langkah-langkah yang dirinci di aplikasi Pelacakan Sistem .

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

Jejak sempurna

Lacak internal TensorFlow Lite di iOS

Peristiwa internal dari penerjemah TensorFlow Lite pada aplikasi iOS dapat ditangkap oleh alat Instrumen yang disertakan dengan Xcode. Itu adalah peristiwa penunjuk arah iOS, sehingga peristiwa yang diambil dari kode Swift/Objective-C terlihat bersama dengan peristiwa internal TensorFlow Lite.

Beberapa contoh peristiwa adalah:

  • pemanggilan operator
  • Modifikasi grafik oleh delegasi
  • Alokasi tensor

Aktifkan penelusuran TensorFlow Lite

Atur variabel lingkungan debug.tflite.trace dengan mengikuti langkah-langkah di bawah ini:

  1. Pilih Produk > Skema > Edit Skema... dari menu atas Xcode.

  2. Klik 'Profil' di panel kiri.

  3. Hapus centang pada kotak 'Gunakan argumen tindakan Jalankan dan variabel lingkungan'.

  4. Tambahkan debug.tflite.trace di bagian 'Variabel Lingkungan'.

    Tetapkan variabel lingkungan

Jika Anda ingin mengecualikan peristiwa TensorFlow Lite saat membuat profil aplikasi iOS, nonaktifkan pelacakan dengan menghapus variabel lingkungan.

Instrumen XCode

Tangkap jejak dengan mengikuti langkah-langkah di bawah ini:

  1. Pilih Produk > Profil dari menu atas Xcode.

  2. Klik Pencatatan di antara templat pembuatan profil saat alat Instrumen diluncurkan.

  3. Tekan tombol 'Mulai'.

  4. Tekan tombol 'Berhenti'.

  5. Klik 'os_signpost' untuk memperluas item subsistem OS Logging.

  6. Klik subsistem Logging OS 'org.tensorflow.lite'.

  7. Selidiki hasil penelusurannya.

    Jejak Instrumen Xcode

Dalam contoh ini, Anda dapat melihat hierarki peristiwa dan statistik untuk setiap waktu operator.

Menggunakan data penelusuran

Data penelusuran memungkinkan Anda mengidentifikasi hambatan kinerja.

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

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