Perangkat edge sering kali memiliki memori atau daya komputasi yang terbatas. Bervariasi pengoptimalan dapat diterapkan ke model sehingga dapat dijalankan dalam batasan data. Selain itu, beberapa pengoptimalan memungkinkan penggunaan perangkat keras untuk inferensi yang dipercepat.
LiteRT dan Pengoptimalan Model TensorFlow Toolkit menyediakan alat untuk meminimalkan kompleksitas pengoptimalan inferensi.
Sebaiknya pertimbangkan pengoptimalan model selama permohonan Anda proses pengembangan Anda. Dokumen ini menjelaskan beberapa praktik terbaik untuk mengoptimalkan Model TensorFlow untuk deployment ke hardware edge.
Alasan model harus dioptimalkan
Ada beberapa cara utama pengoptimalan model yang dapat membantu penerapan pengembangan produk.
Pengurangan ukuran
Beberapa bentuk pengoptimalan dapat digunakan untuk mengurangi ukuran model. Lebih kecil memiliki manfaat berikut:
- Ukuran penyimpanan lebih kecil: Model yang lebih kecil menempati lebih sedikit ruang penyimpanan di pengguna perangkat. Misalnya, aplikasi Android yang menggunakan model yang lebih kecil akan mengambil ruang penyimpanan yang lebih sedikit pada perangkat seluler pengguna.
- Ukuran download lebih kecil: Model yang lebih kecil memerlukan lebih sedikit waktu dan bandwidth untuk unduh ke pengguna perangkat.
- Penggunaan memori lebih sedikit: Model yang lebih kecil menggunakan lebih sedikit RAM saat dijalankan, sehingga mengosongkan memori untuk digunakan oleh bagian lain aplikasi, dan dapat menghasilkan performa dan stabilitas yang lebih baik.
Kuantisasi dapat mengurangi ukuran model dalam semua kasus ini, dengan mengorbankan beberapa akurasi. Pemangkasan dan pengelompokan dapat mengurangi ukuran untuk didownload dengan membuatnya lebih mudah dikompresi.
Pengurangan latensi
Latensi adalah jumlah waktu yang diperlukan untuk menjalankan satu inferensi dengan model transformer. Beberapa bentuk pengoptimalan dapat mengurangi jumlah komputasi yang diperlukan menjalankan inferensi menggunakan model, yang akan menghasilkan latensi lebih rendah. Latensi juga dapat berdampak pada konsumsi daya.
Saat ini, kuantisasi dapat digunakan untuk mengurangi latensi dengan menyederhanakan kalkulasi yang terjadi selama inferensi, yang mungkin dengan mengorbankan beberapa tingkat akurasi.
Kompatibilitas akselerator
Beberapa akselerator hardware, seperti Edge TPU, dapat menjalankan inferensi dengan sangat cepat dengan yang telah dioptimalkan dengan benar.
Umumnya, jenis perangkat ini membutuhkan model untuk dikuantifikasi dalam sebelumnya. Lihat dokumentasi setiap akselerator hardware untuk mempelajari lebih lanjut lainnya.
Kompromi
Pengoptimalan berpotensi menyebabkan perubahan pada akurasi model, yang harus dipertimbangkan selama proses pengembangan aplikasi.
Perubahan akurasi bergantung pada masing-masing model yang dioptimalkan, dan sulit untuk diprediksi sebelumnya. Umumnya, model yang dioptimalkan untuk ukuran atau latensi akan mengurangi sedikit akurasi. Bergantung pada khusus, hal ini mungkin akan atau mungkin tidak memengaruhi pengalaman yang lancar bagi developer. Dalam kasus yang jarang terjadi, model tertentu bisa mendapatkan akurasi sebagai hasil dari proses pengoptimalan.
Jenis pengoptimalan
LiteRT saat ini mendukung pengoptimalan melalui kuantisasi, pemangkasan, dan {i>clustering <i}(pengklasteran).
Ini adalah bagian dari Pengoptimalan Model TensorFlow Toolkit, yang menyediakan resource untuk teknik pengoptimalan model yang kompatibel dengan TensorFlow Ringan.
Kuantisasi
Kuantisasi dengan cara mengurangi presisi angka yang digunakan untuk parameter, yang secara default adalah angka floating point 32-bit. Hal ini menghasilkan ukuran model yang lebih kecil dan komputasi yang lebih cepat.
Jenis kuantisasi berikut tersedia di LiteRT:
Teknik | Persyaratan data | Pengurangan ukuran | Akurasi | Hardware 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 perwakilan tidak berlabel | Hingga 75% | Sedikit penurunan akurasi | CPU, GPU (Android), EdgeTPU |
Pelatihan berbasis kuantisasi | Data pelatihan berlabel | Hingga 75% | Kehilangan akurasi terkecil | CPU, GPU (Android), EdgeTPU |
Pohon keputusan berikut membantu Anda memilih skema kuantisasi yang mungkin digunakan untuk model Anda, hanya berdasarkan ukuran model yang diharapkan dan tingkat akurasi.
Di bawah ini adalah hasil latensi dan akurasi untuk kuantisasi pasca-pelatihan dan pelatihan sadar kuantisasi pada beberapa model. Semua jumlah latensi diukur pada Perangkat Pixel 2 yang menggunakan CPU satu core besar. Seiring berkembangnya toolkit, kami juga angka di sini:
Model | Akurasi Teratas (Asli) | Akurasi Teratas (Terkuantisasi Pasca-Pelatihan) | Akurasi Teratas (Pelatihan Peduli Kuantisasi) | Latensi (Asli) (md) | Latensi (Terkuantisasi Pasca-Pelatihan) (md) | Latensi (Pelatihan Peduli 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 |
Inception_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 dalam int16 dan bobot dalam int8. Mode ini dapat meningkatkan akurasi model terkuantisasi dibandingkan dengan model skema kuantisasi bilangan bulat penuh dengan aktivasi dan bobot dalam int8 mempertahankan ukuran model yang serupa. Direkomendasikan jika aktivasi bersifat sensitif ke kuantisasi.
CATATAN: Saat ini hanya implementasi kernel referensi yang tidak dioptimalkan yang tersedia di TFLite untuk skema kuantisasi ini, jadi secara {i>default<i} performa akan lebih lambat dibandingkan dengan {i>kernel<i} int8. Keuntungan penuh dari mode ini dapat yang saat ini dapat diakses melalui perangkat keras khusus, atau perangkat lunak khusus.
Berikut adalah hasil akurasi untuk beberapa model yang mendapatkan manfaat dari mode ini.
Model | Jenis metrik akurasi | Akurasi (aktivasi float32) | Akurasi (aktivasi int8) | Akurasi (aktivasi int16) |
---|---|---|---|---|
Wav2letter | WER | 6,7% | 7,7% | 7,2% |
DeepSpeech 0.5.1 (unrolled) | CER | 6,13% | 43,67% | 6,52% |
YoloV3 | mAP(IOU=0,5) | 0,577 | 0,563 | 0,574 |
MobileNetV1 | Akurasi Teratas | 0,7062 | 0,694 | 0,6936 |
MobileNetV2 | Akurasi Teratas | 0,718 | 0,7126 | 0,7137 |
MobileBert | F1(Pencocokan persis) | 88.81(81,23) | 2,08(0) | 88.73(81,15) |
Pemangkasan
Pemangkasan berfungsi dengan menghapus parameter dalam model yang hanya berdampak kecil terhadap terhadap prediksi yang di-output oleh model. Model yang dipangkas memiliki ukuran yang sama di disk dan memiliki runtime yang sama latensi yang lebih rendah, tetapi dapat dikompresi dengan lebih efektif. Hal ini membuat {i>pruning <i}berguna untuk mengurangi ukuran download model.
Di masa mendatang, LiteRT akan memberikan pengurangan latensi untuk model yang dipangkas.
Pengelompokan
Pengelompokan dengan mengelompokkan bobot setiap lapisan dalam model ke dalam angka yang telah ditentukan klaster, lalu berbagi nilai sentroid untuk bobot masing-masing cluster individual. Hal ini mengurangi jumlah nilai bobot unik dalam model, sehingga mengurangi kompleksitasnya.
Hasilnya, model yang dikelompokkan dapat dikompresi secara lebih efektif, sehingga manfaat deployment yang mirip dengan pemangkasan.
Alur kerja pengembangan
Sebagai titik awal, periksa apakah model dalam properti dihosting berfungsi untuk aplikasi Anda. Jika tidak, kita sarankan pengguna memulai dengan kuantisasi pasca-pelatihan karena ini berlaku secara luas dan memang tidak memerlukan data pelatihan.
Untuk kasus di mana target akurasi dan latensi tidak terpenuhi, atau hardware dukungan akselerator itu penting, peka kuantisasi pelatihan yang merupakan pilihan yang lebih baik. Lihat teknik pengoptimalan tambahan pada Pengoptimalan Model TensorFlow Google Workspace.
Jika ingin mengurangi ukuran model lebih lanjut, Anda dapat mencoba memangkas. dan/atau pengelompokan sebelum mengukur model Anda.