Pelatihan sadar kuantisasi

Dikelola oleh Optimasi Model TensorFlow

Ada dua bentuk kuantisasi: kuantisasi pasca pelatihan dan pelatihan sadar kuantisasi. Mulailah dengan kuantisasi pasca-pelatihan karena lebih mudah digunakan, meskipun pelatihan sadar kuantisasi seringkali lebih baik untuk akurasi model.

Halaman ini memberikan ikhtisar tentang pelatihan sadar kuantisasi untuk membantu Anda menentukan kesesuaiannya dengan kasus penggunaan Anda.

Ringkasan

Pelatihan sadar kuantisasi mengemulasikan kuantisasi waktu inferensi, menciptakan model yang akan digunakan oleh alat hilir untuk menghasilkan model yang benar-benar terkuantisasi. Model terkuantisasi menggunakan presisi yang lebih rendah (misalnya float 8-bit, bukan 32-bit), sehingga memberikan keuntungan selama penerapan.

Terapkan dengan kuantisasi

Kuantisasi menghadirkan peningkatan melalui kompresi model dan pengurangan latensi. Dengan API default, ukuran model menyusut 4x, dan kami biasanya melihat peningkatan latensi CPU antara 1,5 - 4x di backend yang diuji. Pada akhirnya, peningkatan latensi dapat dilihat pada akselerator pembelajaran mesin yang kompatibel, seperti EdgeTPU dan NNAPI.

Teknik ini digunakan dalam produksi dalam kasus penggunaan pidato, penglihatan, teks, dan terjemahan. Kode saat ini mendukung sebagian model ini .

Bereksperimenlah dengan kuantisasi dan perangkat keras terkait

Pengguna dapat mengkonfigurasi parameter kuantisasi (misalnya jumlah bit) dan pada tingkat tertentu, algoritma yang mendasarinya. Perhatikan bahwa dengan perubahan dari default API ini, saat ini tidak ada jalur yang didukung untuk penerapan ke backend. Misalnya, konversi TFLite dan implementasi kernel hanya mendukung kuantisasi 8-bit.

API khusus untuk konfigurasi ini bersifat eksperimental dan tidak tunduk pada kompatibilitas ke belakang.

Kompatibilitas API

Pengguna dapat menerapkan kuantisasi dengan API berikut:

  • Pembuatan model: keras hanya dengan model Sekuensial dan Fungsional.
  • Versi TensorFlow: TF 2.x untuk tf-nightly.
  • Mode eksekusi TensorFlow: eksekusi yang bersemangat

Ada dalam peta jalan kami untuk menambahkan dukungan di bidang-bidang berikut:

  • Pembuatan model: memperjelas bagaimana Model Subkelas memiliki dukungan terbatas atau tidak ada
  • Pelatihan terdistribusi: tf.distribute

Matriks dukungan umum

Dukungan tersedia di bidang berikut:

  • Cakupan model: model yang menggunakan lapisan yang diizinkan , BatchNormalization jika mengikuti lapisan Conv2D dan DepthwiseConv2D, dan dalam kasus tertentu, Concat .
  • Akselerasi perangkat keras: API default kami kompatibel dengan akselerasi pada backend EdgeTPU, NNAPI, dan TFLite, antara lain. Lihat peringatan di peta jalan.
  • Penerapan dengan kuantisasi: saat ini hanya kuantisasi per sumbu untuk lapisan konvolusional, bukan kuantisasi per tensor yang didukung.

Ada dalam peta jalan kami untuk menambahkan dukungan di bidang-bidang berikut:

  • Cakupan model: diperluas hingga mencakup RNN/LSTM dan dukungan Concat umum.
  • Akselerasi perangkat keras: pastikan konverter TFLite dapat menghasilkan model bilangan bulat penuh. Lihat masalah ini untuk detailnya.
  • Bereksperimenlah dengan kasus penggunaan kuantisasi:
    • Bereksperimenlah dengan algoritme kuantisasi yang mencakup lapisan Keras atau memerlukan langkah pelatihan.
    • Stabilkan API.

Hasil

Klasifikasi gambar dengan alat

Model Akurasi Top-1 yang tidak terkuantisasi Akurasi Terkuantisasi 8-bit
MobilenetV1 224 71,03% 71,06%
Jaringan ulang v1 50 76,3% 76,1%
MobilenetV2 224 70,77% 70,01%

Model tersebut diuji di Imagenet dan dievaluasi di TensorFlow dan TFLite.

Klasifikasi gambar berdasarkan teknik

Model Akurasi Top-1 yang tidak terkuantisasi Akurasi Terkuantisasi 8-Bit
Nasnet-Mobile 74% 73%
Resnet-v2 50 75,6% 75%

Model tersebut diuji di Imagenet dan dievaluasi di TensorFlow dan TFLite.

Contoh

Selain contoh pelatihan sadar kuantisasi , lihat contoh berikut:

  • Model CNN pada tugas klasifikasi digit tulisan tangan MNIST dengan kuantisasi: kode

Untuk latar belakang hal serupa, lihat makalah Kuantisasi dan Pelatihan Jaringan Syaraf Tiruan untuk Inferensi Integer-Aritmatika Saja yang Efisien . Makalah ini memperkenalkan beberapa konsep yang digunakan alat ini. Implementasinya tidak persis sama, dan ada konsep tambahan yang digunakan dalam alat ini (misalnya kuantisasi per sumbu).

,

Dikelola oleh Optimasi Model TensorFlow

Ada dua bentuk kuantisasi: kuantisasi pasca pelatihan dan pelatihan sadar kuantisasi. Mulailah dengan kuantisasi pasca-pelatihan karena lebih mudah digunakan, meskipun pelatihan sadar kuantisasi seringkali lebih baik untuk akurasi model.

Halaman ini memberikan ikhtisar tentang pelatihan sadar kuantisasi untuk membantu Anda menentukan kesesuaiannya dengan kasus penggunaan Anda.

Ringkasan

Pelatihan sadar kuantisasi mengemulasikan kuantisasi waktu inferensi, menciptakan model yang akan digunakan oleh alat hilir untuk menghasilkan model yang benar-benar terkuantisasi. Model terkuantisasi menggunakan presisi yang lebih rendah (misalnya float 8-bit, bukan 32-bit), sehingga memberikan keuntungan selama penerapan.

Terapkan dengan kuantisasi

Kuantisasi menghadirkan peningkatan melalui kompresi model dan pengurangan latensi. Dengan API default, ukuran model menyusut 4x, dan kami biasanya melihat peningkatan latensi CPU antara 1,5 - 4x di backend yang diuji. Pada akhirnya, peningkatan latensi dapat dilihat pada akselerator pembelajaran mesin yang kompatibel, seperti EdgeTPU dan NNAPI.

Teknik ini digunakan dalam produksi dalam kasus penggunaan pidato, penglihatan, teks, dan terjemahan. Kode saat ini mendukung sebagian model ini .

Bereksperimenlah dengan kuantisasi dan perangkat keras terkait

Pengguna dapat mengkonfigurasi parameter kuantisasi (misalnya jumlah bit) dan pada tingkat tertentu, algoritma yang mendasarinya. Perhatikan bahwa dengan perubahan dari default API ini, saat ini tidak ada jalur yang didukung untuk penerapan ke backend. Misalnya, konversi TFLite dan implementasi kernel hanya mendukung kuantisasi 8-bit.

API khusus untuk konfigurasi ini bersifat eksperimental dan tidak tunduk pada kompatibilitas ke belakang.

Kompatibilitas API

Pengguna dapat menerapkan kuantisasi dengan API berikut:

  • Pembuatan model: keras hanya dengan model Sekuensial dan Fungsional.
  • Versi TensorFlow: TF 2.x untuk tf-nightly.
  • Mode eksekusi TensorFlow: eksekusi yang bersemangat

Ada dalam peta jalan kami untuk menambahkan dukungan di bidang-bidang berikut:

  • Pembuatan model: memperjelas bagaimana Model Subkelas memiliki dukungan terbatas atau tidak ada
  • Pelatihan terdistribusi: tf.distribute

Matriks dukungan umum

Dukungan tersedia di bidang berikut:

  • Cakupan model: model yang menggunakan lapisan yang diizinkan , BatchNormalization jika mengikuti lapisan Conv2D dan DepthwiseConv2D, dan dalam kasus tertentu, Concat .
  • Akselerasi perangkat keras: API default kami kompatibel dengan akselerasi pada backend EdgeTPU, NNAPI, dan TFLite, antara lain. Lihat peringatan di peta jalan.
  • Penerapan dengan kuantisasi: saat ini hanya kuantisasi per sumbu untuk lapisan konvolusional, bukan kuantisasi per tensor yang didukung.

Ada dalam peta jalan kami untuk menambahkan dukungan di bidang-bidang berikut:

  • Cakupan model: diperluas hingga mencakup RNN/LSTM dan dukungan Concat umum.
  • Akselerasi perangkat keras: pastikan konverter TFLite dapat menghasilkan model bilangan bulat penuh. Lihat masalah ini untuk detailnya.
  • Bereksperimenlah dengan kasus penggunaan kuantisasi:
    • Bereksperimenlah dengan algoritme kuantisasi yang mencakup lapisan Keras atau memerlukan langkah pelatihan.
    • Stabilkan API.

Hasil

Klasifikasi gambar dengan alat

Model Akurasi Top-1 yang tidak terkuantisasi Akurasi Terkuantisasi 8-bit
MobilenetV1 224 71,03% 71,06%
Jaringan ulang v1 50 76,3% 76,1%
MobilenetV2 224 70,77% 70,01%

Model tersebut diuji di Imagenet dan dievaluasi di TensorFlow dan TFLite.

Klasifikasi gambar berdasarkan teknik

Model Akurasi Top-1 yang tidak terkuantisasi Akurasi Terkuantisasi 8-Bit
Nasnet-Mobile 74% 73%
Resnet-v2 50 75,6% 75%

Model tersebut diuji di Imagenet dan dievaluasi di TensorFlow dan TFLite.

Contoh

Selain contoh pelatihan sadar kuantisasi , lihat contoh berikut:

  • Model CNN pada tugas klasifikasi digit tulisan tangan MNIST dengan kuantisasi: kode

Untuk latar belakang hal serupa, lihat makalah Kuantisasi dan Pelatihan Jaringan Syaraf Tiruan untuk Inferensi Integer-Aritmatika Saja yang Efisien . Makalah ini memperkenalkan beberapa konsep yang digunakan alat ini. Implementasinya tidak persis sama, dan ada konsep tambahan yang digunakan dalam alat ini (misalnya kuantisasi per sumbu).