Perangkat tepi sering kali memiliki memori atau daya komputasi yang terbatas. Berbagai optimasi dapat diterapkan pada model sehingga dapat dijalankan dalam batasan tersebut. Selain itu, beberapa pengoptimalan memungkinkan penggunaan perangkat keras khusus untuk inferensi yang dipercepat.
TensorFlow Lite dan TensorFlow Model Optimization Toolkit menyediakan alat untuk meminimalkan kerumitan pengoptimalan inferensi.
Sebaiknya Anda mempertimbangkan pengoptimalan model selama proses pengembangan aplikasi Anda. Dokumen ini menguraikan beberapa praktik terbaik untuk mengoptimalkan model TensorFlow untuk penerapan ke perangkat keras edge.
Mengapa model harus dioptimalkan
Ada beberapa cara utama optimasi model dapat membantu pengembangan aplikasi.
Pengurangan ukuran
Beberapa bentuk optimasi dapat digunakan untuk mengurangi ukuran model. Model yang lebih kecil memiliki manfaat sebagai berikut:
- Ukuran penyimpanan lebih kecil: Model yang lebih kecil menempati lebih sedikit ruang penyimpanan di perangkat pengguna Anda. Misalnya, aplikasi Android yang menggunakan model yang lebih kecil akan menggunakan lebih sedikit ruang penyimpanan di perangkat seluler pengguna.
- Ukuran unduhan yang lebih kecil: Model yang lebih kecil membutuhkan lebih sedikit waktu dan bandwidth untuk mengunduh ke perangkat pengguna.
- Penggunaan memori yang lebih sedikit: Model yang lebih kecil menggunakan lebih sedikit RAM saat dijalankan, yang mengosongkan memori untuk digunakan bagian lain dari aplikasi Anda, dan dapat menghasilkan kinerja dan stabilitas yang lebih baik.
Kuantisasi dapat mengurangi ukuran model dalam semua kasus ini, berpotensi mengorbankan beberapa akurasi. Pemangkasan dan pengelompokan dapat mengurangi ukuran model untuk diunduh dengan membuatnya lebih mudah dikompresi.
Pengurangan latensi
Latensi adalah jumlah waktu yang diperlukan untuk menjalankan satu inferensi dengan model tertentu. Beberapa bentuk optimasi dapat mengurangi jumlah komputasi yang diperlukan untuk menjalankan inferensi menggunakan model, sehingga menghasilkan latensi yang lebih rendah. Latensi juga dapat berdampak pada konsumsi daya.
Saat ini, kuantisasi dapat digunakan untuk mengurangi latensi dengan menyederhanakan perhitungan yang terjadi selama inferensi, yang berpotensi mengorbankan beberapa akurasi.
Kompatibilitas akselerator
Beberapa akselerator perangkat keras, seperti Edge TPU , dapat menjalankan inferensi dengan sangat cepat dengan model yang telah dioptimalkan dengan benar.
Umumnya, jenis perangkat ini membutuhkan model untuk dikuantisasi dengan cara tertentu. Lihat dokumentasi setiap akselerator perangkat keras untuk mempelajari lebih lanjut tentang persyaratannya.
Trade-off
Optimasi berpotensi menghasilkan perubahan dalam akurasi model, yang harus dipertimbangkan selama proses pengembangan aplikasi.
Perubahan akurasi bergantung pada model individu yang dioptimalkan, dan sulit diprediksi sebelumnya. Umumnya, model yang dioptimalkan untuk ukuran atau latensi akan kehilangan sedikit akurasi. Bergantung pada aplikasi Anda, ini mungkin atau mungkin tidak memengaruhi pengalaman pengguna Anda. Dalam kasus yang jarang terjadi, model tertentu dapat memperoleh akurasi sebagai hasil dari proses optimasi.
Jenis pengoptimalan
TensorFlow Lite saat ini mendukung pengoptimalan melalui kuantisasi, pemangkasan, dan pengelompokan.
Ini adalah bagian dari TensorFlow Model Optimization Toolkit , yang menyediakan sumber daya untuk teknik pengoptimalan model yang kompatibel dengan TensorFlow Lite.
kuantisasi
Kuantisasi bekerja dengan mengurangi ketepatan angka yang digunakan untuk mewakili parameter model, yang secara default adalah angka floating point 32-bit. Ini menghasilkan ukuran model yang lebih kecil dan komputasi yang lebih cepat.
Jenis kuantisasi berikut tersedia di TensorFlow Lite:
Teknik | Persyaratan data | Pengurangan ukuran | Ketepatan | Perangkat keras yang didukung |
---|---|---|---|---|
Kuantisasi float16 pasca-pelatihan | Tidak ada data | Hingga 50% | Kehilangan akurasi yang tidak signifikan | CPU, GPU |
Kuantisasi rentang dinamis pasca-pelatihan | Tidak ada data | Hingga 75% | Kehilangan akurasi terkecil | CPU, GPU (Android) |
Kuantisasi bilangan bulat pasca-pelatihan | Sampel representatif tanpa label | Hingga 75% | Kehilangan akurasi kecil | CPU, GPU (Android), EdgeTPU, Hexagon DSP |
Pelatihan sadar kuantisasi | Data pelatihan berlabel | Hingga 75% | Kehilangan akurasi terkecil | CPU, GPU (Android), EdgeTPU, Hexagon DSP |
Pohon keputusan berikut membantu Anda memilih skema kuantisasi yang mungkin ingin Anda gunakan untuk model Anda, hanya berdasarkan ukuran dan akurasi model yang diharapkan.
Di bawah ini adalah hasil latensi dan akurasi untuk kuantisasi pascapelatihan dan pelatihan sadar kuantisasi pada beberapa model. Semua angka latensi diukur pada perangkat Pixel 2 menggunakan CPU inti besar tunggal. Seiring dengan peningkatan toolkit, demikian juga angka-angka di sini:
Model | Akurasi Top-1 (Asli) | Akurasi Top-1 (Kuantisasi Pasca Pelatihan) | Akurasi Top-1 (Pelatihan Sadar Kuantisasi) | Latensi (Asli) (md) | Latensi (Kuantisasi Pasca Pelatihan) (md) | Latensi (Pelatihan Sadar Kuantisasi) (md) | Ukuran (Asli) (MB) | Ukuran (Dioptimalkan) (MB) |
---|---|---|---|---|---|---|---|---|
Mobilenet-v1-1-224 | 0,709 | 0,657 | 0,70 | 124 | 112 | 64 | 16.9 | 4.3 |
Mobilenet-v2-1-224 | 0,719 | 0.637 | 0,709 | 89 | 98 | 54 | 14 | 3.6 |
Awal_v3 | 0,78 | 0,772 | 0,775 | 1130 | 845 | 543 | 95.7 | 23.9 |
Resnet_v2_101 | 0,770 | 0,768 | T/A | 3973 | 2868 | T/A | 178.3 | 44.9 |
Kuantisasi bilangan bulat penuh dengan aktivasi int16 dan bobot int8
Kuantisasi dengan aktivasi int16 adalah skema kuantisasi bilangan bulat penuh dengan aktivasi di int16 dan bobot di int8. Mode ini dapat meningkatkan akurasi model terkuantisasi dibandingkan dengan skema kuantisasi bilangan bulat penuh dengan aktivasi dan bobot di int8 menjaga ukuran model yang sama. Direkomendasikan ketika aktivasi sensitif terhadap kuantisasi.
CATATAN: Saat ini hanya implementasi kernel referensi yang tidak dioptimalkan yang tersedia di TFLite untuk skema kuantisasi ini, jadi secara default kinerjanya akan lambat dibandingkan dengan kernel int8. Keuntungan penuh dari mode ini saat ini dapat diakses melalui perangkat keras khusus, atau perangkat lunak khusus.
Di bawah ini adalah hasil akurasi untuk beberapa model yang memanfaatkan mode ini. Model Jenis metrik akurasi Akurasi (aktivasi float32) Akurasi (aktivasi int8) Akurasi (aktivasi int16) surat wav2 WER 6.7% 7.7% 7.2% DeepSpeech 0.5.1 (terbuka) CER 6,13% 43.67% 6,52% YoloV3 peta(IOU=0,5) 0,577 0,563 0,574 MobileNetV1 Akurasi Top-1 0,7062 0,694 0,6936 MobileNetV2 Akurasi Top-1 0,718 0,7126 0,7137 MobileBert F1 (Persis sama) 88.81(81.23) 2.08(0) 88.73(81.15)
Pemangkasan
Pemangkasan bekerja dengan menghapus parameter dalam model yang hanya berdampak kecil pada prediksinya. Model yang dipangkas memiliki ukuran yang sama pada disk, dan memiliki latensi runtime yang sama, tetapi dapat dikompresi lebih efektif. Hal ini menjadikan pemangkasan sebagai teknik yang berguna untuk mengurangi ukuran unduhan model.
Di masa mendatang, TensorFlow Lite akan memberikan pengurangan latensi untuk model yang dipangkas.
Kekelompokan
Clustering bekerja dengan mengelompokkan bobot setiap layer dalam model ke dalam jumlah cluster yang telah ditentukan, kemudian membagikan nilai centroid untuk bobot milik masing-masing cluster individu. Ini mengurangi jumlah nilai bobot unik dalam model, sehingga mengurangi kerumitannya.
Akibatnya, model berkerumun dapat dikompresi lebih efektif, memberikan manfaat penyebaran mirip dengan pemangkasan.
Alur kerja pengembangan
Sebagai titik awal, periksa apakah model dalam model yang dihosting dapat berfungsi untuk aplikasi Anda. Jika tidak, kami menyarankan agar pengguna memulai dengan alat kuantisasi pasca-pelatihan karena ini berlaku secara luas dan tidak memerlukan data pelatihan.
Untuk kasus di mana target akurasi dan latensi tidak terpenuhi, atau dukungan akselerator perangkat keras penting, pelatihan sadar kuantisasi adalah pilihan yang lebih baik. Lihat teknik pengoptimalan tambahan di bawah TensorFlow Model Optimization Toolkit .
Jika Anda ingin mengurangi ukuran model lebih jauh, Anda dapat mencoba memangkas dan/atau mengelompokkan sebelum mengkuantisasi model Anda.