Peralatan 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 keadaan stabil
- Penggunaan memori selama waktu inisialisasi
- Penggunaan memori secara keseluruhan
Alat tolok ukur tersedia sebagai aplikasi tolok ukur untuk Android dan iOS serta sebagai biner command line native, dan semuanya memiliki logika pengukuran performa in yang sama. Perhatikan bahwa opsi dan format output yang tersedia sedikit berbeda karena perbedaan pada lingkungan runtime.
Aplikasi tolok ukur Android
Ada dua opsi untuk menggunakan alat benchmark dengan Android. Salah satunya adalah biner tolok ukur native dan yang lainnya adalah aplikasi tolok ukur Android, alat pengukur yang lebih baik tentang performa model dalam aplikasi. Apa pun itu, angka dari alat tolok ukur masih akan sedikit berbeda dari saat menjalankan inferensi dengan model dalam aplikasi sebenarnya.
Aplikasi benchmark Android ini tidak memiliki UI. Instal dan jalankan kode menggunakan perintah adb
,
lalu ambil hasilnya menggunakan perintah adb logcat
.
Mendownload atau membuat aplikasi
Download aplikasi tolok ukur Android yang dibangun malam hari menggunakan tautan di bawah ini:
Sedangkan untuk aplikasi benchmark Android yang mendukung operasi TF melalui delegasi Flex, gunakan link di bawah ini:
Anda juga dapat membuat aplikasi dari sumber dengan mengikuti instructions ini.
Menyiapkan benchmark
Sebelum menjalankan aplikasi benchmark, instal aplikasi dan kirim file model ke perangkat seperti berikut:
adb install -r -d -g android_aarch64_benchmark_model.apk
adb push your_model.tflite /data/local/tmp
Menjalankan 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 benchmark.
num_threads
:int
(default=1)
Jumlah thread yang akan digunakan untuk menjalankan penafsir 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. Lihat parameter untuk mengetahui parameter performa lainnya yang dapat Anda jalankan dengan aplikasi benchmark.
Lihat hasil 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 tolok ukur native
Alat benchmark juga disediakan sebagai biner native benchmark_model
. Anda dapat
menjalankan alat ini dari command line shell di Linux, Mac, perangkat tersemat, dan
perangkat Android.
Download atau bangun biner
Download biner command line native bawaan malam dengan mengikuti link di bawah ini:
Untuk biner yang telah dibuat setiap malam yang mendukung operasi TF melalui delegasi Fleksibel, gunakan link di bawah ini:
Anda juga dapat membuat biner tolok ukur native dari sumber di komputer.
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 gunakan image docker seperti yang dijelaskan dalam panduan ini.
bazel build -c opt --config=android_arm64 \
//tensorflow/lite/tools/benchmark:benchmark_model
Menjalankan 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 command line native.
Operasi model pembuatan profil
Biner model benchmark juga memungkinkan Anda membuat profil operasi model dan mendapatkan
waktu eksekusi setiap operator. Untuk melakukannya, teruskan flag
--enable_op_profiling=true
ke benchmark_model
selama pemanggilan. Detailnya
dijelaskan
di sini.
Biner tolok ukur native untuk beberapa opsi performa dalam satu proses
Biner C++ yang mudah dan sederhana juga disediakan untuk
menjalankan benchmark beberapa opsi performa
dalam satu pengoperasian. Biner ini dibuat berdasarkan alat tolok ukur yang disebutkan di atas
yang hanya dapat mengukur satu opsi performa dalam satu waktu. Keduanya memiliki
proses build/instal/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='all')
Daftar opsi performa TFLite yang dipisahkan koma untuk diukur.
Anda bisa mendapatkan biner siap pakai 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.
Tempatkan file model TensorFlow Lite di direktori
benchmark_data
dari hierarki sumber dan ubah file benchmark_params.json
. File
tersebut dikemas ke dalam aplikasi dan aplikasi membaca data dari direktori. Buka
aplikasi tolok ukur iOS
untuk mendapatkan petunjuk mendetail.
Tolok ukur performa untuk model terkenal
Bagian ini mencantumkan tolok ukur performa TensorFlow Lite saat menjalankan model populer di beberapa perangkat Android dan iOS.
Tolok ukur performa Android
Angka tolok ukur performa ini dihasilkan dengan biner tolok ukur native.
Untuk benchmark Android, afinitas CPU ditetapkan untuk menggunakan core besar pada perangkat guna mengurangi varian (lihat detail).
Hal ini mengasumsikan 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 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 berjalan dengan delegasi GPU, setel --use_gpu=true
.
Nilai performa di bawah ini 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 | --- | |
Seluler NASNet | 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 benchmark dimodifikasi untuk menyertakan model
yang sesuai 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 | --- |
Seluler 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 |
Melacak internal TensorFlow Lite
Melacak internal TensorFlow Lite di Android
Peristiwa internal dari penafsir TensorFlow Lite aplikasi Android dapat diambil dengan alat pelacakan Android. Peristiwa tersebut adalah peristiwa yang sama dengan Android Trace API, sehingga peristiwa yang diambil dari kode Java/Kotlin akan terlihat bersama dengan peristiwa internal TensorFlow Lite.
Beberapa contoh peristiwa adalah:
- Pemanggilan operator
- Modifikasi grafik berdasarkan delegasi
- Alokasi tensor
Di antara berbagai opsi untuk mengambil rekaman aktivitas, panduan ini mencakup CPU Profiler Android Studio dan aplikasi Pelacakan Sistem. Lihat alat command line Perfetto atau alat command line Systrace untuk opsi lainnya.
Menambahkan peristiwa rekaman aktivitas dalam kode Java
Ini adalah cuplikan kode dari aplikasi contoh Klasifikasi Gambar. Penafsir TensorFlow Lite berjalan di bagian recognizeImage/runInference
. Langkah ini bersifat opsional, tetapi akan 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();
Aktifkan pelacakan TensorFlow Lite
Untuk mengaktifkan pelacakan TensorFlow Lite, tetapkan properti sistem Android
debug.tflite.trace
ke 1 sebelum memulai aplikasi Android.
adb shell setprop debug.tflite.trace 1
Jika properti ini telah ditetapkan saat penafsir TensorFlow Lite diinisialisasi, peristiwa utama (misalnya, pemanggilan operator) dari penafsir akan dilacak.
Setelah Anda mengambil semua rekaman aktivitas, nonaktifkan perekaman aktivitas dengan menetapkan nilai properti ke 0.
adb shell setprop debug.tflite.trace 0
CPU Profiler Android Studio
Ambil rekaman aktivitas menggunakan CPU Profiler Android Studio dengan mengikuti langkah-langkah di bawah:
Pilih Run > Profile 'app' dari menu atas.
Klik di mana saja dalam linimasa CPU saat jendela Profiler muncul.
Pilih 'Trace System Calls' di antara mode CPU Profiling.
Tekan tombol 'Rekam'.
Tekan tombol 'Stop'.
Selidiki hasil rekaman aktivitas.
Dalam contoh ini, Anda dapat melihat hierarki peristiwa dalam thread dan statistik untuk setiap waktu operator, serta melihat aliran data seluruh aplikasi di antara thread.
Aplikasi Pelacakan Sistem
Merekam 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 format Perfetto atau Systrace bergantung pada versi perangkat Android. File rekaman aktivitas yang diambil dapat dibuka di UI Perfetto.
Melacak internal TensorFlow Lite di iOS
Peristiwa internal dari penafsir TensorFlow Lite pada aplikasi iOS dapat ditangkap oleh alat Instruments yang disertakan dengan Xcode. Peristiwa tersebut adalah peristiwa signpost iOS, sehingga peristiwa yang direkam dari kode Swift/Objective-C terlihat bersama dengan peristiwa internal TensorFlow Lite.
Beberapa contoh peristiwa adalah:
- Pemanggilan operator
- Modifikasi grafik berdasarkan delegasi
- Alokasi tensor
Aktifkan pelacakan TensorFlow Lite
Setel variabel lingkungan debug.tflite.trace
dengan mengikuti langkah-langkah di bawah:
Pilih Product > Scheme > Edit Scheme... dari menu atas Xcode.
Klik 'Profil' di panel kiri.
Hapus centang pada kotak 'Use the Run action's arguments and environment variables'.
Tambahkan
debug.tflite.trace
di bagian 'Environment Variables'.
Jika Anda ingin mengecualikan peristiwa TensorFlow Lite saat membuat profil aplikasi iOS, nonaktifkan perekaman aktivitas 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 tombol 'Start'.
Tekan tombol 'Stop'.
Klik 'os_signpost' untuk meluaskan item subsistem Logging OS.
Klik subsistem Logging OS 'org.tensorflow.lite'.
Selidiki hasil rekaman aktivitas.
Dalam contoh ini, Anda dapat melihat hierarki peristiwa dan statistik untuk setiap waktu operator.
Menggunakan data pelacakan
Data pelacakan memungkinkan Anda mengidentifikasi bottleneck performa.
Berikut beberapa contoh insight yang bisa Anda dapatkan dari profiler dan solusi yang potensial untuk meningkatkan performa:
- Jika jumlah core CPU yang tersedia lebih kecil dari jumlah thread inferensi, overhead penjadwalan CPU dapat menyebabkan performa di bawah standar. Anda dapat menjadwalkan ulang tugas intensif CPU lainnya di aplikasi untuk menghindari tumpang-tindih dengan inferensi model atau menyesuaikan jumlah thread penafsir.
- Jika operator tidak sepenuhnya didelegasikan, beberapa bagian dari grafik model akan dijalankan di CPU, bukan akselerator hardware yang diharapkan. Anda dapat mengganti operator yang tidak didukung dengan operator serupa yang didukung.