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.
Dari berbagai operator model ML ini, ada 3 jenis yang didukung oleh proses konversi:
- Model dengan operator bawaan LiteRT saja. (Direkomendasikan)
- Model dengan operator bawaan dan TensorFlow tertentu operator inti.
- 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