Kompatibilitas operator LiteRT dan TensorFlow

Operator machine learning (ML) yang Anda gunakan dalam model dapat memengaruhi proses konversi model TensorFlow ke format LiteRT. Pengonversi LiteRT mendukung operasi TensorFlow dalam jumlah terbatas yang digunakan model inferensi, yang berarti tidak semua model dapat dikonversi secara langsung. Alat pengonversi memungkinkan Anda menyertakan operator tambahan, namun model dengan cara ini juga mengharuskan Anda memodifikasi runtime LiteRT yang digunakan untuk mengeksekusi model, yang dapat membatasi kemampuan menggunakan opsi deployment runtime standar, seperti Layanan Google Play.

Konverter LiteRT dirancang untuk menganalisis model dan menerapkan pengoptimalan agar kompatibel dengan operator yang didukung secara langsung. Misalnya, bergantung pada operator ML di model, konverter mungkin elide atau fuse operator untuk memetakan mereka ke rekan LiteRT mereka.

Bahkan untuk operasi yang didukung, terkadang ada pola penggunaan tertentu yang diharapkan, untuk alasan performa. Cara terbaik untuk memahami cara membangun TensorFlow yang dapat digunakan bersama LiteRT adalah untuk mempertimbangkan dengan cermat bagaimana operasi dikonversi dan dioptimalkan, bersama dengan keterbatasan yang dikenakan oleh proses ini.

Operator yang didukung

Operator bawaan LiteRT adalah subset dari operator yang merupakan bagian dari library inti TensorFlow. Model TensorFlow mungkin juga menyertakan operator khusus dalam bentuk operator gabungan atau operator baru yang Anda tetapkan. Diagram di bawah ini menunjukkan hubungan antara operator tersebut.

Operator TensorFlow

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

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

Jika model Anda hanya berisi operasi yang didukung secara native oleh LiteRT, Anda tidak memerlukan tanda tambahan untuk mengonversinya. Ini adalah jalur yang direkomendasikan karena jenis model ini akan mengonversi dengan lancar dan lebih mudah dioptimalkan serta dijalankan dengan runtime LiteRT default. Anda juga memiliki lebih banyak opsi deployment untuk model Anda seperti Layanan Google Play. Anda dapat mulai menggunakan Panduan konverter LiteRT. Lihat halaman Operasi LiteRT untuk menyediakan daftar operator bawaan.

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

Bila memungkinkan, hindari opsi terakhir untuk menyertakan operator khusus di model yang dikonversi. Operator kustom adalah operator yang dibuat dengan menggabungkan beberapa operator inti TensorFlow primitif atau menentukan yang benar-benar baru. Ketika operator kustom dikonversi, mereka dapat meningkatkan ukuran model dengan menimbulkan dependensi di luar library LiteRT bawaan. Jika tidak dibuat khusus untuk deployment seluler atau perangkat, dapat mengakibatkan performa yang lebih buruk saat di-deploy ke perangkat dengan resource terbatas dibandingkan dengan lingkungan server. Terakhir, sama seperti menyertakan operator inti TensorFlow tertentu, operator kustom mengharuskan Anda untuk mengubah lingkungan runtime model yang membatasi Anda agar tidak memanfaatkan layanan runtime standar seperti layanan Google Play.

Jenis yang didukung

Sebagian besar operasi LiteRT menargetkan floating point (float32) dan inferensi terkuantisasi (uint8, int8), tetapi banyak operasi yang belum untuk jenis lainnya seperti tf.float16 dan string.

Selain menggunakan versi operasi yang berbeda, perbedaan lainnya antara model floating point dan terkuantisasi adalah cara mereka dikonversi. Konversi terkuantisasi memerlukan informasi rentang dinamis untuk tensor. Ini memerlukan "kuantisasi palsu" selama pelatihan model, mendapatkan informasi rentang melalui set data kalibrasi, atau melakukan "dengan cepat" estimasi rentang. Lihat kuantisasi untuk mengetahui detail selengkapnya.

Konversi langsung, pelipatan konstan, dan penggabungan

Sejumlah operasi TensorFlow dapat diproses oleh LiteRT bahkan meskipun mereka tidak memiliki padanan langsung. Hal ini berlaku untuk operasi yang dapat dihapus 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-proses tersebut.

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

Ada operasi LiteRT berikut, tetapi tidak siap untuk operasi kustom model:

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