Membangun dan mengonversi model

Mikrokontroler memiliki RAM dan penyimpanan yang terbatas, yang membatasi ukuran model machine learning. Selain itu, LiteRT untuk Mikrokontroler saat ini mendukung subset operasi terbatas, sehingga tidak semua arsitektur model dapat dilakukan.

Dokumen ini menjelaskan proses mengonversi model TensorFlow agar dapat berjalan di mikrokontroler. Dokumen ini juga menguraikan operasi yang didukung dan memberikan beberapa panduan tentang mendesain dan melatih model agar sesuai dengan memori terbatas.

Untuk contoh end-to-end yang dapat dijalankan dalam membangun dan mengonversi model, lihat contoh Hello World.

Konversi model

Untuk mengonversi model TensorFlow terlatih agar dapat berjalan di mikrokontroler, Anda harus menggunakan LiteRT converter Python API. Tindakan ini akan mengonversi model menjadi FlatBuffer, mengurangi ukuran model, dan mengubahnya untuk menggunakan operasi LiteRT.

Untuk mendapatkan ukuran model terkecil, Anda harus mempertimbangkan penggunaan kuantisasi pasca-pelatihan.

Mengonversi ke array C

Banyak platform mikrokontroler tidak memiliki dukungan sistem file native. Cara termudah untuk menggunakan model dari program Anda adalah dengan menyertakannya sebagai array C dan mengompilasinya ke dalam program Anda.

Perintah Unix berikut akan menghasilkan file sumber C yang berisi model LiteRT sebagai array char:

xxd -i converted_model.tflite > model_data.cc

Output-nya akan terlihat mirip dengan berikut ini:

unsigned char converted_model_tflite[] = {
  0x18, 0x00, 0x00, 0x00, 0x54, 0x46, 0x4c, 0x33, 0x00, 0x00, 0x0e, 0x00,
  // <Lines omitted>
};
unsigned int converted_model_tflite_len = 18200;

Setelah membuat file, Anda dapat menyertakannya dalam program. Penting untuk mengubah deklarasi array menjadi const agar efisiensi memori lebih baik di platform sematan.

Untuk contoh cara menyertakan dan menggunakan model dalam program Anda, lihat hello_world_test.cc dalam contoh Hello World.

Arsitektur dan pelatihan model

Saat mendesain model untuk digunakan pada mikrokontroler, penting untuk mempertimbangkan ukuran model, workload, dan operasi yang digunakan.

Ukuran model

Model harus cukup kecil agar muat dalam memori perangkat target bersama program Anda lainnya, baik sebagai biner maupun saat runtime.

Untuk membuat model yang lebih kecil, Anda dapat menggunakan lebih sedikit lapisan yang lebih kecil dalam arsitektur Anda. Namun, model kecil lebih cenderung mengalami kurang cocok (underfitting). Artinya, untuk banyak masalah, sebaiknya coba gunakan model terbesar yang akan muat dalam memori. Namun, penggunaan model yang lebih besar juga akan menyebabkan peningkatan beban kerja prosesor.

Workload

Ukuran dan kompleksitas model berdampak pada workload. Model yang besar dan kompleks dapat menghasilkan siklus tugas yang lebih tinggi, yang berarti prosesor perangkat Anda menghabiskan lebih banyak waktu untuk bekerja dan lebih sedikit waktu dalam kondisi tidak aktif. Hal ini akan meningkatkan konsumsi daya dan output panas, yang mungkin menjadi masalah bergantung pada aplikasi Anda.

Dukungan operasi

LiteRT for Microcontrollers saat ini mendukung subset operasi TensorFlow yang terbatas, yang memengaruhi arsitektur model yang dapat dijalankan. Kami sedang berupaya memperluas dukungan operasi, baik dalam hal penerapan referensi maupun pengoptimalan untuk arsitektur tertentu.

Operasi yang didukung dapat dilihat dalam file micro_mutable_ops_resolver.h