แนวทางปฏิบัติแนะนำด้านประสิทธิภาพ

อุปกรณ์เคลื่อนที่และอุปกรณ์ฝังตัวมีทรัพยากรการคำนวณที่จำกัด ดังนั้นคุณจึงควรทำให้แอปพลิเคชันใช้ทรัพยากรอย่างมีประสิทธิภาพ เราได้รวบรวมรายการ แนวทางปฏิบัติและกลยุทธ์ที่ดีที่สุดที่คุณสามารถใช้เพื่อปรับปรุงประสิทธิภาพโมเดล TensorFlow Lite

เลือกโมเดลที่ดีที่สุดสำหรับงาน

คุณจะต้องสร้างสมดุลระหว่างความซับซ้อนของโมเดลกับขนาดของโมเดล ทั้งนี้ขึ้นอยู่กับงาน หากงานของคุณต้องการความแม่นยำสูง คุณอาจต้องใช้โมเดลขนาดใหญ่และ ซับซ้อน สำหรับงานที่ไม่ต้องการความแม่นยำมากนัก ควรใช้โมเดลที่มีขนาดเล็กกว่า เนื่องจากไม่เพียงแต่ใช้พื้นที่ในดิสก์และหน่วยความจำน้อยลงเท่านั้น แต่ยังโดยทั่วไปแล้วยังเร็วกว่าและประหยัดพลังงานมากกว่าด้วย ตัวอย่างเช่น กราฟด้านล่างแสดง การแลกเปลี่ยนความถูกต้องกับเวลาในการตอบสนองสำหรับโมเดลการแยกประเภทรูปภาพที่ใช้กันทั่วไปบางโมเดล

กราฟขนาดโมเดลเทียบกับความแม่นยำ

กราฟความแม่นยำเทียบกับเวลาในการตอบสนอง

ตัวอย่างหนึ่งของโมเดลที่ได้รับการเพิ่มประสิทธิภาพสำหรับอุปกรณ์เคลื่อนที่คือ MobileNets ซึ่งได้รับการเพิ่มประสิทธิภาพสำหรับแอปพลิเคชันด้านวิชันซิสเต็มในอุปกรณ์เคลื่อนที่ Kaggle Models แสดงโมเดลอื่นๆ อีกหลายรายการ ที่ได้รับการเพิ่มประสิทธิภาพสำหรับอุปกรณ์เคลื่อนที่และอุปกรณ์ฝังโดยเฉพาะ

คุณฝึกโมเดลที่ระบุไว้ในชุดข้อมูลของคุณเองได้อีกครั้งโดยใช้การเรียนรู้แบบถ่ายโอน

ทำโปรไฟล์โมเดล

เมื่อเลือกโมเดลที่เหมาะสมกับงานแล้ว แนวทางปฏิบัติที่ดีคือการสร้างโปรไฟล์และเปรียบเทียบโมเดล เครื่องมือ การเปรียบเทียบ LiteRT มี Profiler ในตัวที่แสดงสถิติการจัดทำโปรไฟล์ต่อโอเปอเรเตอร์ ซึ่งจะช่วยให้เข้าใจคอขวดด้านประสิทธิภาพและโอเปอเรเตอร์ที่ใช้เวลาในการคำนวณมากที่สุด

นอกจากนี้ คุณยังใช้การติดตาม LiteRT เพื่อสร้างโปรไฟล์ โมเดลในแอปพลิเคชัน Android โดยใช้การติดตามระบบ Android มาตรฐาน และเพื่อแสดงภาพการเรียกใช้ตัวดำเนินการตามเวลาด้วยเครื่องมือสร้างโปรไฟล์ที่ใช้ GUI ได้ด้วย

สร้างโปรไฟล์และเพิ่มประสิทธิภาพตัวดำเนินการในกราฟ

หากโอเปอเรเตอร์หนึ่งๆ ปรากฏในโมเดลบ่อยครั้ง และจากการทำโปรไฟล์ คุณพบว่าโอเปอเรเตอร์นั้นใช้เวลามากที่สุด คุณสามารถพิจารณาเพิ่มประสิทธิภาพโอเปอเรเตอร์นั้นได้ สถานการณ์นี้ไม่ค่อยเกิดขึ้นเนื่องจาก TensorFlow Lite มีเวอร์ชันที่เพิ่มประสิทธิภาพสำหรับตัวดำเนินการส่วนใหญ่ อย่างไรก็ตาม คุณอาจเขียน Op ที่กำหนดเองเวอร์ชันที่เร็วกว่าได้หากทราบข้อจำกัดที่ใช้ในการดำเนินการตัวดำเนินการ ดูคู่มือตัวดำเนินการที่กำหนดเอง

เพิ่มประสิทธิภาพโมเดลของคุณ

การเพิ่มประสิทธิภาพโมเดลมีเป้าหมายเพื่อสร้างโมเดลขนาดเล็กที่โดยทั่วไปแล้วจะเร็วกว่าและ ประหยัดพลังงานมากกว่า เพื่อให้สามารถนําไปใช้ในอุปกรณ์เคลื่อนที่ได้ LiteRT รองรับเทคนิคการเพิ่มประสิทธิภาพหลายอย่าง เช่น การหาปริมาณ

ดูรายละเอียดได้ที่เอกสารการเพิ่มประสิทธิภาพโมเดล

ปรับจำนวนเธรด

LiteRT รองรับเคอร์เนลแบบหลายเธรดสำหรับตัวดำเนินการจำนวนมาก คุณสามารถเพิ่ม จำนวนเธรดและเร่งความเร็วในการดำเนินการของโอเปอเรเตอร์ได้ อย่างไรก็ตาม การเพิ่มจำนวนเธรดจะทำให้โมเดลใช้ทรัพยากรและพลังงานมากขึ้น

สำหรับแอปพลิเคชันบางอย่าง ความหน่วงอาจมีความสำคัญมากกว่าประสิทธิภาพการใช้พลังงาน คุณ เพิ่มจำนวนเธรดได้โดยการตั้งค่าจำนวนเธรดของอินเทอร์พรีเตอร์ อย่างไรก็ตาม การดำเนินการแบบหลายเธรดจะทำให้ประสิทธิภาพมีความผันผวนมากขึ้น ขึ้นอยู่กับว่ามีการดำเนินการอื่นพร้อมกันหรือไม่ โดยเฉพาะอย่างยิ่งสำหรับแอปบนอุปกรณ์เคลื่อนที่ ตัวอย่างเช่น การทดสอบแบบแยกอาจแสดงการเพิ่มความเร็ว 2 เท่า เมื่อเทียบกับแบบ Single-Thread แต่หากแอปอื่นทำงานพร้อมกัน อาจส่งผลให้ประสิทธิภาพแย่กว่าแบบ Single-Thread

กำจัดการคัดลอกที่ซ้ำซ้อน

หากออกแบบแอปพลิเคชันไม่รอบคอบ อาจมีสำเนาที่ซ้ำกัน เมื่อป้อนอินพุตและอ่านเอาต์พุตจากโมเดล โปรด ลบสำเนาที่ซ้ำกัน หากใช้ API ระดับสูงกว่า เช่น Java โปรดตรวจสอบเอกสารประกอบอย่างละเอียดเพื่อดูข้อควรระวังด้านประสิทธิภาพ เช่น Java API จะเร็วกว่ามากหากใช้ ByteBuffers เป็นอินพุต

สร้างโปรไฟล์แอปพลิเคชันด้วยเครื่องมือเฉพาะแพลตฟอร์ม

เครื่องมือเฉพาะแพลตฟอร์ม เช่น Android Profiler และ Instruments มีข้อมูลการสร้างโปรไฟล์มากมายที่ใช้ในการแก้ไขข้อบกพร่องของแอปได้ บางครั้งข้อบกพร่องด้านประสิทธิภาพอาจไม่ได้อยู่ในโมเดล แต่อยู่ในส่วนของโค้ดแอปพลิเคชันที่โต้ตอบกับโมเดล โปรดทำความคุ้นเคยกับเครื่องมือการสร้างโปรไฟล์เฉพาะแพลตฟอร์มและแนวทางปฏิบัติแนะนำสำหรับแพลตฟอร์มของคุณ

ประเมินว่าโมเดลของคุณได้รับประโยชน์จากการใช้ตัวเร่งฮาร์ดแวร์ที่มีในอุปกรณ์หรือไม่

LiteRT ได้เพิ่มวิธีใหม่ๆ ในการเร่งความเร็วโมเดลด้วยฮาร์ดแวร์ที่เร็วขึ้น เช่น GPU DSP และตัวเร่งประสาท โดยปกติแล้ว ตัวเร่งความเร็วเหล่านี้จะแสดงผ่านโมดูลย่อย delegate ที่จะเข้ามาควบคุมส่วนต่างๆ ของการดำเนินการของอินเทอร์พรีเตอร์ LiteRT สามารถใช้ผู้รับมอบสิทธิ์ได้โดยทำดังนี้

  • ตัวแทน GPU พร้อมใช้งานบน Android และ iOS โดยใช้ OpenGL/OpenCL และ Metal ตามลำดับ หากต้องการลองใช้ ให้ดูตัวแทน GPU
  • คุณสร้างผู้มอบสิทธิ์ของคุณเองได้หากมีสิทธิ์เข้าถึง ฮาร์ดแวร์ที่ไม่เป็นไปตามมาตรฐาน ดูข้อมูลเพิ่มเติมได้ที่ผู้รับมอบสิทธิ์ LiteRT

โปรดทราบว่า Accelerator บางตัวเหมาะกับโมเดลบางประเภทมากกว่า ผู้แทนบางรายรองรับเฉพาะโมเดลแบบลอยหรือโมเดลที่ได้รับการเพิ่มประสิทธิภาพในลักษณะที่เฉพาะเจาะจง คุณควรเปรียบเทียบผู้รับมอบสิทธิ์แต่ละรายเพื่อดูว่าผู้รับมอบสิทธิ์รายนั้นเป็นตัวเลือกที่ดีสำหรับแอปพลิเคชันของคุณหรือไม่ เช่น หากคุณมีโมเดลขนาดเล็กมาก การมอบหมายโมเดลไปยัง GPU อาจไม่คุ้มค่า ในทางกลับกัน Accelerator เป็น ตัวเลือกที่ยอดเยี่ยมสำหรับโมเดลขนาดใหญ่ที่มีความเข้มของการคำนวณสูง