Kompatibilitas operator TensorFlow dan TensorFlow Lite

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

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

Bahkan untuk operasi yang didukung, pola penggunaan tertentu terkadang diharapkan, untuk alasan performa. Cara terbaik untuk memahami cara membuat model TensorFlow yang dapat digunakan dengan TensorFlow Lite adalah dengan cermat mempertimbangkan bagaimana operasi dikonversi dan dioptimalkan, beserta batasan yang diberlakukan oleh proses ini.

Operator yang didukung

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

Operator TensorFlow

Dari berbagai operator model ML ini, ada 3 jenis model yang didukung oleh proses konversi:

  1. Model dengan operator bawaan TensorFlow Lite saja. (Direkomendasikan)
  2. Model dengan operator bawaan dan operator inti TensorFlow tertentu.
  3. Model dengan operator bawaan, operator inti TensorFlow, dan/atau operator kustom.

Jika model Anda hanya berisi operasi yang secara native didukung oleh TensorFlow Lite, Anda tidak memerlukan flag tambahan untuk mengonversinya. Jalur ini direkomendasikan karena jenis model ini akan melakukan konversi dengan lancar dan lebih mudah untuk dioptimalkan serta dijalankan menggunakan runtime TensorFlow Lite default. Anda juga memiliki lebih banyak opsi deployment untuk model Anda, seperti layanan Google Play. Anda dapat memulai dengan panduan pengonversi TensorFlow Lite. Lihat halaman Operasi TensorFlow Lite untuk mengetahui daftar operator bawaan.

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

Jika memungkinkan, hindari opsi terakhir untuk menyertakan operator kustom dalam model yang dikonversi. Operator kustom adalah operator yang dibuat dengan menggabungkan beberapa operator inti TensorFlow primitif atau menentukan operator yang benar-benar baru. Saat dikonversi, operator kustom dapat meningkatkan ukuran keseluruhan model dengan menimbulkan dependensi di luar library TensorFlow Lite bawaan. Operasi kustom, jika tidak dibuat secara khusus untuk deployment seluler atau perangkat, dapat mengakibatkan performa yang lebih buruk saat di-deploy ke perangkat dengan resource yang terbatas dibandingkan dengan lingkungan server. Terakhir, seperti halnya menyertakan operator inti TensorFlow tertentu, operator kustom mengharuskan Anda untuk mengubah lingkungan runtime model sehingga Anda tidak dapat 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), tetapi banyak operasi yang belum melakukannya untuk jenis lain seperti tf.float16 dan string.

Selain menggunakan berbagai versi operasi, 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 rentang melalui set data kalibrasi, atau melakukan estimasi rentang "on-the-fly". Lihat kuantisasi untuk detail selengkapnya.

Konversi yang mudah diproses, pelipatan konstan, dan penggabungan

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

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

  • tf.add
  • tf.debugging.check_numerics
  • tf.constant
  • tf.div
  • tf.divide
  • tf.fake_quant_with_min_max_args
  • tf.fake_quant_with_min_max_vars
  • tf.identity
  • tf.maximum
  • tf.minimum
  • tf.multiply
  • tf.no_op
  • tf.placeholder
  • tf.placeholder_with_default
  • tf.realdiv
  • tf.reduce_max
  • tf.reduce_min
  • tf.reduce_sum
  • tf.rsqrt
  • tf.shape
  • tf.sqrt
  • tf.square
  • tf.subtract
  • tf.tile
  • tf.nn.batch_norm_with_global_normalization
  • tf.nn.bias_add
  • tf.nn.fused_batch_norm
  • tf.nn.relu
  • tf.nn.relu6

Operasi Eksperimental

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

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