{i>Microcontroller<i} memiliki RAM dan penyimpanan yang terbatas, yang menempatkan batasan pada ukuran model machine learning. Selain itu, LiteRT untuk Saat ini mikrokontroler mendukung subset operasi yang terbatas, sehingga tidak arsitektur model, dimungkinkan.
Dokumen ini menjelaskan proses konversi model TensorFlow untuk dijalankan mikrokontroler. Panduan ini juga menguraikan operasi yang didukung dan memberikan beberapa panduan tentang merancang dan melatih model agar sesuai dengan memori yang terbatas.
Untuk contoh menyeluruh yang dapat dijalankan untuk membuat dan mengonversi model, lihat Halo Dunia contoh.
Konversi model
Untuk mengonversi model TensorFlow terlatih agar berjalan pada mikrokontroler, Anda harus menggunakan
tindakan
API Python pengonversi LiteRT.
Tindakan ini akan mengubah model menjadi
FlatBuffer
, mengurangi ukuran model,
dan memodifikasinya untuk menggunakan operasi LiteRT.
Untuk mendapatkan ukuran model sekecil mungkin, sebaiknya pertimbangkan untuk menggunakan kuantisasi pasca-pelatihan.
Mengonversi ke array C
Banyak platform mikrokontroler yang tidak memiliki dukungan sistem file asli. Tujuan cara termudah untuk menggunakan model dari program Anda adalah dengan memasukkannya ke dalam {i>array <i}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 seperti berikut:
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 Anda membuat file, Anda dapat menyertakannya ke dalam program Anda. Penting
penting untuk mengubah deklarasi array menjadi const
agar memori lebih baik
efisiensi pada platform tersemat.
Untuk contoh cara menyertakan dan menggunakan model dalam program Anda, lihat
hello_world_test.cc
dalam contoh Hello World.
Arsitektur model dan pelatihan
Ketika merancang model untuk digunakan pada mikrokontroler, penting untuk mempertimbangkan ukuran model, beban kerja, dan operasi yang digunakan.
Ukuran model
Model harus cukup kecil agar pas dengan memori perangkat target bersama bagian lain dari program Anda, baik sebagai biner maupun saat {i>runtime<i}.
Untuk membuat model yang lebih kecil, Anda dapat menggunakan lebih sedikit dan lebih kecil lapisan tentang arsitektur ini. Namun, model kecil lebih mungkin mengalami underfitting. Artinya, untuk banyak masalah, masuk akal untuk mencoba dan menggunakan model yang akan muncul dalam memori. Namun, menggunakan model yang lebih besar juga akan mengarah peningkatan beban kerja prosesor.
Workload
Ukuran dan kompleksitas model berdampak pada beban kerja. Besar dan kompleks model mungkin menghasilkan siklus tugas yang lebih tinggi, yang berarti prosesor perangkat Anda menghabiskan lebih banyak waktu untuk bekerja dan lebih sedikit waktu menganggur. Ini akan menambah daya dan output kalor, yang mungkin menjadi masalah bergantung pada aplikasi.
Dukungan operasi
LiteRT untuk {i>Microcontrollers<i} saat ini mendukung subset terbatas dari Operasi TensorFlow, yang memengaruhi arsitektur model yang mungkin dilakukan untuk dijalankan. Kami sedang berupaya memperluas dukungan operasi, baik dalam hal implementasi referensi dan pengoptimalan untuk arsitektur tertentu.
Operasi yang didukung dapat dilihat dalam file
micro_mutable_ops_resolver.h