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:
Pilih Jalankan > Profil 'aplikasi' dari menu atas.
Klik di mana saja di timeline CPU ketika jendela Profiler muncul.
Pilih 'Lacak Panggilan Sistem' di antara mode Profil CPU.
Tekan tombol 'Rekam'.
Tekan tombol 'Berhenti'.
Selidiki hasil penelusurannya.
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 .
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:
Pilih Produk > Skema > Edit Skema... dari menu atas Xcode.
Klik 'Profil' di panel kiri.
Hapus centang pada kotak 'Gunakan argumen tindakan Jalankan dan variabel lingkungan'.
Tambahkan
debug.tflite.trace
di bagian '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:
Pilih Produk > Profil dari menu atas Xcode.
Klik Pencatatan di antara templat pembuatan profil saat alat Instrumen diluncurkan.
Tekan tombol 'Mulai'.
Tekan tombol 'Berhenti'.
Klik 'os_signpost' untuk memperluas item subsistem OS Logging.
Klik subsistem Logging OS 'org.tensorflow.lite'.
Selidiki hasil penelusurannya.
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.