Pengoptimalan model

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.

pohon-keputusan-kuantisasi

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-2240,7090,6570,70 1241126416,94.3
Mobilenet-v2-1-2240,7190,6370,709 899854143,6
Inception_v30,780,7720,775 113084554395,723,9
Resnet_v2_1010,7700,768T/A 39732868T/A178,344,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 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)
Wav2letterWER6,7%7,7% 7,2%
DeepSpeech 0.5.1 (unrolled)CER6,13%43,67% 6,52%
YoloV3mAP(IOU=0,5)0,5770,563 0,574
MobileNetV1Akurasi Teratas0,70620,694 0,6936
MobileNetV2Akurasi Teratas0,7180,7126 0,7137
MobileBertF1(Pencocokan persis)88.81(81,23)2,08(0) 88.73(81,15)
Tabel 2 Manfaat kuantisasi model dengan aktivasi int16

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.