ไมโครคอนโทรลเลอร์มี RAM และพื้นที่เก็บข้อมูลจำกัด ซึ่งทำให้ขนาดของโมเดลแมชชีนเลิร์นนิงมีข้อจำกัด นอกจากนี้ LiteRT สำหรับไมโครคอนโทรลเลอร์ ยังรองรับการดำเนินการบางอย่างเท่านั้น จึงอาจใช้กับสถาปัตยกรรมโมเดล บางอย่างไม่ได้
เอกสารนี้อธิบายกระบวนการแปลงโมเดล TensorFlow เพื่อเรียกใช้ใน ไมโครคอนโทรลเลอร์ นอกจากนี้ ยังระบุการดำเนินการที่รองรับและให้คำแนะนำบางอย่างเกี่ยวกับการออกแบบและการฝึกโมเดลให้พอดีกับหน่วยความจำที่จำกัด
ดูตัวอย่างที่สร้างและแปลงโมเดลได้ตั้งแต่ต้นจนจบและเรียกใช้ได้ที่ตัวอย่าง Hello World
การแปลงโมเดล
หากต้องการแปลงโมเดล TensorFlow ที่ฝึกแล้วให้ทำงานบนไมโครคอนโทรลเลอร์ คุณควรใช้ LiteRT converter Python API ซึ่งจะ
แปลงโมเดลเป็น FlatBuffer
ลดขนาดโมเดล และแก้ไขให้ใช้การดำเนินการ LiteRT
หากต้องการให้โมเดลมีขนาดเล็กที่สุดเท่าที่จะเป็นไปได้ คุณควรพิจารณาใช้การวัดปริมาณหลังการฝึก
แปลงเป็นอาร์เรย์ C
แพลตฟอร์มไมโครคอนโทรลเลอร์จำนวนมากไม่รองรับระบบไฟล์เนทีฟ วิธีที่ง่ายที่สุดในการใช้โมเดลจากโปรแกรมคือการรวมไว้เป็นอาร์เรย์ C และ คอมไพล์ลงในโปรแกรม
คำสั่ง Unix ต่อไปนี้จะสร้างไฟล์ต้นฉบับ C ที่มีโมเดล
LiteRT เป็นอาร์เรย์ char
xxd -i converted_model.tflite > model_data.cc
เอาต์พุตจะมีลักษณะคล้ายกับตัวอย่างต่อไปนี้
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;
เมื่อสร้างไฟล์แล้ว คุณจะรวมไฟล์ไว้ในโปรแกรมได้ คุณควรเปลี่ยนการประกาศอาร์เรย์เป็น const เพื่อให้ใช้หน่วยความจำได้อย่างมีประสิทธิภาพมากขึ้นในแพลตฟอร์มแบบฝัง
ดูตัวอย่างวิธีรวมและใช้โมเดลในโปรแกรมได้ที่
hello_world_test.cc
ในตัวอย่าง Hello World
สถาปัตยกรรมและการฝึกโมเดล
เมื่อออกแบบโมเดลเพื่อใช้ในไมโครคอนโทรลเลอร์ สิ่งสำคัญที่ต้องพิจารณาคือ ขนาดของโมเดล ปริมาณงาน และการดำเนินการที่ใช้
ขนาดโมเดล
โมเดลต้องมีขนาดเล็กพอที่จะอยู่ในหน่วยความจำของอุปกรณ์เป้าหมายพร้อมกับ ส่วนที่เหลือของโปรแกรม ทั้งในรูปแบบไบนารีและที่รันไทม์
หากต้องการสร้างโมเดลขนาดเล็ก คุณสามารถใช้เลเยอร์ที่เล็กลงและมีจำนวนน้อยลงในสถาปัตยกรรม อย่างไรก็ตาม โมเดลขนาดเล็กมีแนวโน้มที่จะเกิดการปรับให้พอดีน้อยกว่า ซึ่งหมายความว่าสำหรับปัญหาหลายอย่าง การลองใช้โมเดลที่ใหญ่ที่สุด ซึ่งจะพอดีกับหน่วยความจำจึงเป็นเรื่องสมเหตุสมผล อย่างไรก็ตาม การใช้โมเดลขนาดใหญ่ขึ้นจะทำให้ภาระงานของโปรเซสเซอร์เพิ่มขึ้นด้วย
ภาระงาน
ขนาดและความซับซ้อนของโมเดลส่งผลต่อภาระงาน โมเดลขนาดใหญ่และซับซ้อน อาจส่งผลให้รอบการทำงานสูงขึ้น ซึ่งหมายความว่าโปรเซสเซอร์ของอุปกรณ์ ใช้เวลาทำงานมากขึ้นและเวลาที่ไม่ได้ใช้งานน้อยลง ซึ่งจะเพิ่มการใช้พลังงาน และเอาต์พุตความร้อน ซึ่งอาจเป็นปัญหาขึ้นอยู่กับ แอปพลิเคชันของคุณ
การสนับสนุนการปฏิบัติงาน
ปัจจุบัน LiteRT for Microcontrollers รองรับการดำเนินการของ TensorFlow บางส่วนเท่านั้น ซึ่งส่งผลต่อสถาปัตยกรรมของโมเดลที่สามารถเรียกใช้ได้ เรา กำลังขยายการรองรับการทำงาน ทั้งในแง่ของการอ้างอิง การใช้งานและการเพิ่มประสิทธิภาพสำหรับสถาปัตยกรรมที่เฉพาะเจาะจง
การดำเนินการที่รองรับจะแสดงในไฟล์
micro_mutable_ops_resolver.h