Optimalisasi model

Perangkat edge 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 mempercepat inferensi.

TensorFlow Lite dan TensorFlow Model Optimization Toolkit menyediakan alat untuk meminimalkan kompleksitas pengoptimalan inferensi.

Anda disarankan untuk 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 pengoptimalan 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 menggunakan lebih sedikit ruang penyimpanan di perangkat pengguna Anda. Misalnya, aplikasi Android yang menggunakan model lebih kecil akan memakan lebih sedikit ruang penyimpanan di perangkat seluler pengguna.
  • Ukuran unduhan lebih kecil: Model yang lebih kecil memerlukan lebih sedikit waktu dan bandwidth untuk mengunduh ke perangkat pengguna.
  • Penggunaan memori lebih sedikit: Model yang lebih kecil menggunakan lebih sedikit RAM saat dijalankan, sehingga mengosongkan memori untuk digunakan bagian lain aplikasi Anda, dan dapat menghasilkan kinerja dan stabilitas yang lebih baik.

Kuantisasi dapat mengurangi ukuran model dalam semua kasus ini, dan berpotensi mengorbankan akurasi tertentu. Pemangkasan dan pengelompokan dapat mengurangi ukuran model untuk diunduh dengan membuatnya lebih mudah dikompres.

Pengurangan latensi

Latensi adalah jumlah waktu yang diperlukan untuk menjalankan satu inferensi dengan model tertentu. Beberapa bentuk pengoptimalan 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 penghitungan yang terjadi selama inferensi, yang berpotensi mengorbankan 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 memerlukan model untuk dikuantisasi dengan cara tertentu. Lihat dokumentasi masing-masing akselerator perangkat keras untuk mempelajari lebih lanjut tentang persyaratannya.

Pertukaran

Pengoptimalan berpotensi mengakibatkan perubahan akurasi model, yang harus dipertimbangkan selama proses pengembangan aplikasi.

Perubahan akurasi bergantung pada masing-masing model yang dioptimalkan, dan sulit diprediksi sebelumnya. Umumnya, model yang dioptimalkan untuk ukuran atau latensi akan kehilangan sedikit akurasi. Tergantung pada aplikasi Anda, hal ini mungkin berdampak atau tidak terhadap pengalaman pengguna Anda. Dalam kasus yang jarang terjadi, model tertentu mungkin memperoleh akurasi tertentu sebagai hasil dari proses pengoptimalan.

Jenis optimasi

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. Hal 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 yang tidak diberi label Hingga 75% Kehilangan akurasi kecil CPU, GPU (Android), EdgeTPU, DSP segi enam
Pelatihan sadar kuantisasi Data pelatihan berlabel Hingga 75% Kehilangan akurasi terkecil CPU, GPU (Android), EdgeTPU, DSP segi enam

Pohon keputusan berikut membantu Anda memilih skema kuantisasi yang mungkin ingin Anda gunakan untuk model Anda, hanya berdasarkan ukuran dan akurasi model yang diharapkan.

pohon keputusan-kuantisasi

Di bawah ini adalah hasil latensi dan akurasi untuk kuantisasi pasca-pelatihan dan pelatihan sadar kuantisasi pada beberapa model. Semua angka latensi diukur pada perangkat Pixel 2 menggunakan satu CPU inti besar. Seiring dengan peningkatan perangkat ini, angka-angka di sini juga akan meningkat:

Model Akurasi Teratas 1 (Asli) Akurasi Top-1 (Terkuantisasi Pasca Pelatihan) Akurasi Top-1 (Pelatihan Sadar Kuantisasi) Latensi (Asli) (ms) Latensi (Terkuantisasi Pasca Pelatihan) (ms) Latensi (Pelatihan Sadar Kuantisasi) (ms) 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
Tabel 1 Manfaat kuantisasi model untuk model CNN tertentu

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 yang menjaga ukuran model tetap sama. Direkomendasikan bila 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 beberapa model yang memanfaatkan mode ini.

Model Jenis metrik akurasi Akurasi (aktivasi float32) Akurasi (aktivasi int8) Akurasi (aktivasi int16)
surat wav2 ADALAH 6,7% 7,7% 7,2%
DeepSpeech 0.5.1 (dibuka gulungannya) CER 6,13% 43,67% 6,52%
YoloV3 peta(IOU=0,5) 0,577 0,563 0,574
MobileNetV1 Akurasi Teratas 1 0,7062 0,694 0,6936
MobileNetV2 Akurasi Teratas 1 0,718 0,7126 0,7137
PonselBert F1 (Pencocokan persis) 88.81(81.23) 2.08(0) 88,73(81,15)
Tabel 2 Manfaat kuantisasi model dengan aktivasi int16

Pemangkasan

Pemangkasan dilakukan dengan menghapus parameter dalam model yang hanya berdampak kecil pada prediksinya. Model yang dipangkas memiliki ukuran disk yang sama, dan memiliki latensi waktu proses yang sama, namun dapat dikompresi dengan 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 lapisan dalam suatu model ke dalam sejumlah cluster yang telah ditentukan, kemudian membagi nilai centroid untuk bobot yang dimiliki masing-masing cluster. Hal ini mengurangi jumlah nilai bobot unik dalam suatu model, sehingga mengurangi kompleksitasnya.

Hasilnya, model yang terklaster dapat dikompresi dengan lebih efektif, memberikan manfaat penerapan yang serupa dengan pemangkasan.

Alur kerja pengembangan

Sebagai titik awal, periksa apakah model dalam model yang dihosting dapat berfungsi untuk aplikasi Anda. Jika tidak, kami menyarankan pengguna memulai dengan alat kuantisasi pasca-pelatihan karena alat ini dapat diterapkan 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 pada TensorFlow Model Optimization Toolkit .

Jika Anda ingin mengurangi ukuran model lebih lanjut, Anda dapat mencoba memangkas dan/atau mengelompokkan sebelum mengkuantisasi model Anda.