Kompatibilitas TensorFlow Lite dan operator TensorFlow

Operator machine learning (ML) yang Anda gunakan dalam model dapat memengaruhi proses konversi model TensorFlow ke format TensorFlow Lite. Konverter TensorFlow Lite mendukung operasi TensorFlow dalam jumlah terbatas yang digunakan dalam model inferensi umum, yang berarti tidak semua model dapat dikonversi secara langsung. Alat konverter memungkinkan Anda menyertakan operator tambahan, namun mengonversi model dengan cara ini juga mengharuskan Anda memodifikasi lingkungan runtime TensorFlow Lite yang Anda gunakan untuk menjalankan model, yang dapat membatasi kemampuan Anda menggunakan opsi penerapan runtime standar, seperti layanan Google Play .

TensorFlow Lite Converter dirancang untuk menganalisis struktur model dan menerapkan pengoptimalan agar kompatibel dengan operator yang didukung langsung. Misalnya, bergantung pada operator ML dalam model Anda, konverter dapat menghilangkan atau menggabungkan operator tersebut untuk memetakannya ke rekan TensorFlow Lite-nya.

Bahkan untuk operasi yang didukung, pola penggunaan tertentu terkadang diharapkan, karena alasan kinerja. Cara terbaik untuk memahami cara membuat model TensorFlow yang dapat digunakan dengan TensorFlow Lite adalah dengan mempertimbangkan secara cermat cara operasi dikonversi dan dioptimalkan, serta batasan yang dikenakan oleh proses ini.

Operator yang didukung

Operator bawaan TensorFlow Lite adalah subset operator yang merupakan bagian dari pustaka inti TensorFlow. Model TensorFlow Anda juga dapat menyertakan operator khusus dalam bentuk operator gabungan atau operator baru yang Anda tentukan. Diagram di bawah menunjukkan hubungan antara operator-operator ini.

Operator TensorFlow

Dari rangkaian operator model ML ini, terdapat 3 jenis model yang didukung oleh proses konversi:

  1. Model yang hanya memiliki operator bawaan TensorFlow Lite. ( Direkomendasikan )
  2. Model dengan operator bawaan dan operator inti TensorFlow tertentu.
  3. Model dengan operator bawaan, operator inti TensorFlow, dan/atau operator khusus.

Jika model Anda hanya berisi operasi yang secara native didukung oleh TensorFlow Lite, Anda tidak memerlukan tanda tambahan apa pun untuk mengonversinya. Ini adalah jalur yang direkomendasikan karena model jenis ini akan dikonversi dengan lancar dan lebih mudah untuk dioptimalkan dan dijalankan menggunakan runtime TensorFlow Lite default. Anda juga memiliki lebih banyak opsi penerapan untuk model Anda seperti layanan Google Play . Anda dapat memulai dengan panduan konverter TensorFlow Lite . Lihat halaman TensorFlow Lite Ops untuk mengetahui daftar operator bawaan.

Jika Anda perlu menyertakan operasi TensorFlow tertentu dari pustaka inti, Anda harus menentukannya pada saat konversi dan memastikan runtime Anda menyertakan operasi tersebut. Lihat topik Pilih operator TensorFlow untuk mengetahui langkah-langkah selengkapnya.

Jika memungkinkan, hindari opsi terakhir untuk menyertakan operator khusus dalam model konversi Anda. Operator khusus adalah operator yang dibuat dengan menggabungkan beberapa operator inti TensorFlow primitif atau mendefinisikan operator yang benar-benar baru. Saat operator khusus dikonversi, mereka dapat meningkatkan ukuran keseluruhan model dengan menimbulkan dependensi di luar pustaka TensorFlow Lite bawaan. Operasi khusus, jika tidak dibuat khusus untuk penerapan seluler atau perangkat, dapat menghasilkan kinerja yang lebih buruk saat diterapkan ke perangkat dengan sumber daya terbatas dibandingkan dengan lingkungan server. Terakhir, seperti halnya menyertakan operator inti TensorFlow tertentu, operator khusus mengharuskan Anda mengubah lingkungan runtime model yang membatasi Anda dalam memanfaatkan layanan runtime standar seperti layanan Google Play .

Jenis yang didukung

Sebagian besar operasi TensorFlow Lite menargetkan inferensi floating-point ( float32 ) dan terkuantisasi ( uint8 , int8 ), namun banyak operasi yang belum melakukannya untuk tipe lain seperti tf.float16 dan string.

Selain menggunakan versi operasi yang berbeda, perbedaan lain antara model floating-point dan model terkuantisasi adalah cara konversinya. Konversi terkuantisasi memerlukan informasi rentang dinamis untuk tensor. Hal ini memerlukan "kuantisasi palsu" selama pelatihan model, mendapatkan informasi jangkauan melalui kumpulan data kalibrasi, atau melakukan estimasi jangkauan "on-the-fly". Lihat kuantisasi untuk lebih jelasnya.

Konversi langsung, pelipatan dan peleburan konstan

Sejumlah operasi TensorFlow dapat diproses oleh TensorFlow Lite meskipun operasi tersebut tidak memiliki persamaan langsung. Hal ini berlaku untuk operasi yang dapat dengan mudah dihilangkan dari grafik ( tf.identity ), diganti dengan tensor ( tf.placeholder ), atau digabungkan menjadi operasi yang lebih kompleks ( tf.nn.bias_add ). Bahkan beberapa operasi yang didukung terkadang dapat dihapus melalui salah satu proses ini.

Berikut adalah daftar lengkap operasi TensorFlow yang biasanya dihapus dari grafik:

Operasi Eksperimental

Operasi TensorFlow Lite berikut ada, tetapi belum siap untuk model kustom:

  • CALL
  • CONCAT_EMBEDDINGS
  • CUSTOM
  • EMBEDDING_LOOKUP_SPARSE
  • HASHTABLE_LOOKUP
  • LSH_PROJECTION
  • SKIP_GRAM
  • SVDF