Peralatan benchmark
Alat tolok ukur LiteRT saat ini mengukur dan menghitung statistik untuk metrik performa penting berikut:
- Waktu inisialisasi
- Waktu inferensi status pemanasan
- Waktu inferensi dalam keadaan stabil
- Penggunaan memori selama waktu inisialisasi
- Penggunaan memori keseluruhan
Alat tolok ukur tersedia sebagai aplikasi tolok ukur untuk Android dan iOS serta biner command line native, dan semuanya memiliki performa inti yang sama logika pengukuran. Perhatikan bahwa opsi yang tersedia dan format {i>output<i} adalah sedikit berbeda karena perbedaan dalam lingkungan runtime.
Aplikasi benchmark Android
Ada dua opsi penggunaan alat benchmark dengan Android. Salah satunya adalah biner benchmark native dan lainnya adalah Android benchmark, alat pengukur yang lebih baik tentang performa model dalam aplikasi. Keduanya angka dari alat tolok ukur masih akan sedikit berbeda dari ketika menjalankan inferensi dengan model dalam aplikasi yang sebenarnya.
Aplikasi benchmark Android ini tidak memiliki UI. Menginstal dan menjalankannya menggunakan adb
perintah tersebut dan mengambil hasilnya dengan menggunakan perintah adb logcat
.
Mendownload atau membangun aplikasi
Download aplikasi benchmark Android siap pakai setiap malam menggunakan link di bawah:
Sedangkan untuk aplikasi benchmark Android yang mendukung operasi TF melalui delegasi Fleksibel, gunakan link di bawah ini:
Anda juga dapat membangun aplikasi dari sumber dengan mengikuti petunjuk ini.
Menyiapkan benchmark
Sebelum menjalankan aplikasi benchmark, instal aplikasi dan kirim 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 wajib.
graph
:
string
Jalur ke file model TFLite.
Anda dapat menentukan lebih banyak parameter opsional untuk menjalankan benchmark.
num_threads
:int
(default=1)
Jumlah thread yang akan digunakan untuk menjalankan penerjemah TFLite.use_gpu
:bool
(default=false)
Gunakan delegasi GPU.use_xnnpack
:bool
(default=false
)
Gunakan Delegasi XNNPACK.
Bergantung pada perangkat yang Anda gunakan, beberapa opsi ini mungkin tidak tersedia atau tidak berpengaruh. Rujuk ke parameter untuk parameter performa lainnya yang dapat Anda jalankan dengan aplikasi benchmark.
Lihat hasilnya menggunakan perintah logcat
:
adb logcat | grep "Inference timings"
Hasil tolok ukur dilaporkan sebagai:
... tflite : Inference timings in us: Init: 5685, First inference: 18535, Warmup (avg): 14462.3, Inference (avg): 14575.2
Biner benchmark native
Alat benchmark juga disediakan sebagai benchmark_model
biner native. Anda dapat
menjalankan alat ini dari baris perintah {i>
shell <i}di Linux, Mac, perangkat yang tertanam, dan
Perangkat Android.
Download atau bangun biner
Download biner command line native bawaan per malam dengan mengikuti link di bawah ini:
Sedangkan untuk biner bawaan per malam yang mendukung operasi TF melalui delegasi Fleksibel, gunakan link di bawah ini:
Anda juga dapat membangun biner benchmark native dari sumber di komputer Anda.
bazel build -c opt //tensorflow/lite/tools/benchmark:benchmark_model
Untuk membangun dengan toolchain Android NDK, Anda perlu menyiapkan lingkungan build terlebih dahulu dengan mengikuti guide, atau gunakan image Docker seperti yang dijelaskan dalam panduan kami.
bazel build -c opt --config=android_arm64 \
//tensorflow/lite/tools/benchmark:benchmark_model
Jalankan tolok ukur
Untuk menjalankan benchmark di komputer, jalankan biner dari shell.
path/to/downloaded_or_built/benchmark_model \
--graph=your_model.tflite \
--num_threads=4
Anda dapat menggunakan kumpulan pertanyaan parameter 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 masing-masing operator. Untuk melakukan ini, teruskan penanda
--enable_op_profiling=true
ke benchmark_model
selama pemanggilan. Detailnya adalah
dijelaskan
di sini.
Biner tolok ukur native untuk berbagai opsi performa dalam satu proses
Biner C++ yang praktis dan
sederhana juga disediakan untuk
menjalankan tolok ukur beberapa opsi performa
dalam sekali jalan. Biner ini dibuat berdasarkan alat {i>benchmark<i} yang disebutkan di atas
yang hanya dapat menjalankan benchmark pada satu opsi performa dalam satu waktu. Mereka berbagi
proses build/instal/jalankan yang sama, tapi nama target BUILD dari biner ini
benchmark_model_performance_options
dan diperlukan beberapa parameter tambahan.
Parameter penting untuk biner ini adalah:
perf_options_list
: string
(default='all')
Daftar opsi performa TFLite yang dipisahkan koma untuk diukur.
Anda bisa mendapatkan biner bawaan setiap malam untuk alat ini seperti yang tercantum di bawah:
Aplikasi tolok ukur iOS
Untuk menjalankan benchmark di perangkat iOS, Anda perlu membangun aplikasi dari
sumber.
Letakkan file model LiteRT di
benchmark_data
dari direktori sumber dan memodifikasi file benchmark_params.json
. Mereka
file dikemas ke dalam aplikasi dan aplikasi membaca data dari direktori. Kunjungi
tindakan
Aplikasi tolok ukur iOS
untuk petunjuk terperinci.
Tolok ukur performa untuk model yang terkenal
Bagian ini mencantumkan tolok ukur performa LiteRT saat berjalan dengan baik yang umum di beberapa perangkat Android dan iOS.
Tolok ukur performa Android
Jumlah tolok ukur performa ini dibuat dengan biner tolok ukur native.
Untuk benchmark Android, afinitas CPU disetel untuk menggunakan core besar di perangkat untuk mengurangi varians (lihat detail).
Diasumsikan bahwa model telah didownload dan diekstrak ke
Direktori /data/local/tmp/tflite_models
. Biner benchmark dibuat menggunakan
petunjuk 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 menjalankan dengan delegasi GPU, setel --use_gpu=true
.
Nilai performa di bawah diukur di Android 10.
Nama Model | Perangkat | CPU, 4 thread | GPU |
---|---|---|---|
Mobilenet_1.0_224(float) | Pixel 3 | 23,9 md | 6,45 md |
Pixel 4 | 14,0 md | 9,0 md | |
Mobilenet_1.0_224 (kuantitas) | Pixel 3 | 13,4 md | --- |
Pixel 4 | 5,0 md | --- | |
NASNet seluler | Pixel 3 | 56 md | --- |
Pixel 4 | 34,5 md | --- | |
SqueezeNet | Pixel 3 | 35,8 md | 9,5 md |
Pixel 4 | 23,9 md | 11,1 md | |
Inception_ResNet_V2 | Pixel 3 | 422 md | 99,8 md |
Pixel 4 | 272,6 md | 87,2 md | |
Inception_V4 | Pixel 3 | 486 md | 93 md |
Pixel 4 | 324,1 md | 97,6 md |
Tolok ukur performa iOS
Jumlah tolok ukur performa ini dibuat dengan Aplikasi tolok ukur iOS.
Untuk menjalankan benchmark iOS, aplikasi tolok ukur dimodifikasi untuk menyertakan
dan benchmark_params.json
diubah untuk menetapkan num_threads
ke 2. Untuk menggunakan
delegasi GPU, opsi "use_gpu" : "1"
dan "gpu_wait_type" : "aggressive"
juga ditambahkan ke benchmark_params.json
.
Nama Model | Perangkat | CPU, 2 thread | GPU |
---|---|---|---|
Mobilenet_1.0_224(float) | iPhone XS | 14,8 md | 3,4 md |
Mobilenet_1.0_224 (kuantitas) | iPhone XS | 11 md | --- |
NASNet seluler | 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 |
Internal LiteRT Trace
Melacak internal LiteRT di Android
Peristiwa internal dari penafsir LiteRT aplikasi Android dapat ditangkap oleh Alat pelacakan Android. Keduanya merupakan peristiwa yang sama di Android Trace API, sehingga peristiwa yang diambil dari kode Java/Kotlin dilihat bersama dengan LiteRT peristiwa internal.
Beberapa contoh peristiwa adalah:
- Panggilan operator
- Modifikasi grafik berdasarkan delegasi
- Alokasi tensor
Di antara berbagai opsi untuk menangkap rekaman aktivitas, panduan ini mencakup Android CPU Profiler Studio dan aplikasi Pelacakan Sistem. Rujuk ke Alat command line Perfetto atau Alat command line Systrace untuk opsi lainnya.
Menambahkan peristiwa rekaman aktivitas dalam kode Java
Ini adalah cuplikan kode dari
Klasifikasi Gambar
aplikasi contoh. Penerjemah LiteRT berjalan dalam
recognizeImage/runInference
. Langkah ini opsional tetapi berguna untuk
membantu memperhatikan 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();
Mengaktifkan pelacakan LiteRT
Untuk mengaktifkan pelacakan LiteRT, tetapkan properti sistem Android
debug.tflite.trace
ke 1 sebelum memulai aplikasi Android.
adb shell setprop debug.tflite.trace 1
Jika properti ini telah disetel ketika penafsir LiteRT diinisialisasi, peristiwa tombol (misalnya, pemanggilan operator) dari penafsir akan dilacak.
Setelah mengambil semua rekaman aktivitas, nonaktifkan perekaman aktivitas dengan menetapkan nilai properti menjadi 0.
adb shell setprop debug.tflite.trace 0
CPU Profiler Android Studio
Mengambil rekaman aktivitas dengan CPU Profiler Android Studio dengan mengikuti langkah-langkah berikut:
Pilih Run > Profil 'aplikasi' dari menu atas.
Klik di mana saja dalam linimasa CPU saat jendela Profiler muncul.
Pilih 'Lacak Panggilan Sistem' di antara mode Profiling CPU.
Tekan 'Rekam' tombol.
Tekan 'Berhenti' tombol.
Menyelidiki hasil rekaman aktivitas.
Dalam contoh ini, Anda dapat melihat hierarki peristiwa dalam thread dan statistik untuk setiap waktu operator dan juga melihat aliran data seluruh aplikasi di antara .
Aplikasi Pelacakan Sistem
Mengambil rekaman aktivitas tanpa Android Studio dengan mengikuti langkah-langkah yang dijelaskan di Aplikasi Pelacakan Sistem.
Dalam contoh ini, peristiwa TFLite yang sama diambil dan disimpan ke Perfetto atau Systrace bergantung pada versi perangkat Android. Gambar file rekaman aktivitas dapat dibuka di UI Perfetto.
Melacak internal LiteRT di iOS
Peristiwa internal dari penafsir LiteRT aplikasi iOS dapat ditangkap oleh Instrumen yang disertakan dalam Xcode. Mereka adalah perangkat signpost sehingga peristiwa yang direkam dari kode Swift/Objective-C dapat dilihat secara bersamaan dengan peristiwa internal LiteRT.
Beberapa contoh peristiwa adalah:
- Panggilan operator
- Modifikasi grafik berdasarkan delegasi
- Alokasi tensor
Mengaktifkan pelacakan LiteRT
Tetapkan variabel lingkungan debug.tflite.trace
dengan mengikuti langkah-langkah di bawah:
Pilih Product > Skema > Edit Scheme... dari menu atas Xcode.
Klik 'Profil' di panel kiri.
Batalkan pilihan 'Gunakan argumen dan variabel lingkungan Run action' .
Tambahkan
debug.tflite.trace
di bagian 'Environment Variables' bagian.
Jika Anda ingin mengecualikan peristiwa LiteRT saat membuat profil aplikasi iOS, menonaktifkan pelacakan dengan menghapus variabel lingkungan.
Instrumen XCode
Ambil rekaman aktivitas dengan mengikuti langkah-langkah di bawah:
Pilih Product > Profile dari menu atas Xcode.
Klik Logging di antara template pembuatan profil saat alat Instruments diluncurkan.
Tekan 'Mulai' tombol.
Tekan 'Berhenti' tombol.
Klik 'os_signpost' untuk memperluas item subsistem Logging OS.
Klik 'org.tensorflow.lite' Subsistem Logging OS.
Menyelidiki hasil rekaman aktivitas.
Dalam contoh ini, Anda dapat melihat hierarki peristiwa dan statistik untuk setiap waktu operator.
Menggunakan data perekaman aktivitas
Data perekaman aktivitas memungkinkan Anda mengidentifikasi bottleneck performa.
Berikut adalah beberapa contoh wawasan yang bisa Anda dapatkan dari profiler dan solusi potensial untuk meningkatkan performa:
- Jika jumlah core CPU yang tersedia lebih kecil dari jumlah inferensi {i>thread<i}, maka overhead penjadwalan CPU dapat menyebabkan performa di bawah standar. Anda dapat menjadwalkan ulang tugas CPU lainnya di aplikasi Anda untuk menghindari tumpang tindih dengan inferensi model atau mengubah jumlah penafsir .
- Jika operator tidak didelegasikan sepenuhnya, beberapa bagian dari grafik model dijalankan pada CPU, bukan akselerator hardware yang diharapkan. Anda dapat mengganti operator yang tidak didukung dengan operator serupa yang didukung.