ความเข้ากันได้ของตัวดำเนินการ TensorFlow Lite และ TensorFlow

จัดทุกอย่างให้เป็นระเบียบอยู่เสมอด้วยคอลเล็กชัน บันทึกและจัดหมวดหมู่เนื้อหาตามค่ากำหนดของคุณ

ตัวดำเนินการแมชชีนเลิร์นนิง (ML) ที่คุณใช้ในโมเดลของคุณอาจส่งผลต่อกระบวนการแปลงโมเดล TensorFlow เป็นรูปแบบ TensorFlow Lite ตัวแปลง TensorFlow Lite รองรับการดำเนินการ TensorFlow ในจำนวนที่จำกัดซึ่งใช้ในแบบจำลองการอนุมานทั่วไป ซึ่งหมายความว่าไม่ใช่ทุกรุ่นที่จะแปลงได้โดยตรง เครื่องมือตัวแปลงช่วยให้คุณรวมโอเปอเรเตอร์เพิ่มเติมได้ แต่การแปลงโมเดลด้วยวิธีนี้ คุณต้องแก้ไขสภาพแวดล้อมรันไทม์ TensorFlow Lite ที่คุณใช้เพื่อรันโมเดลของคุณ ซึ่งสามารถจำกัดความสามารถของคุณในการใช้ตัวเลือกการปรับใช้รันไทม์มาตรฐาน เช่น บริการ Google Play

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

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

ตัวดำเนินการที่รองรับ

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

ตัวดำเนินการเทนเซอร์โฟลว์

จากตัวดำเนินการโมเดล ML นี้ มีโมเดล 3 ประเภทที่สนับสนุนโดยกระบวนการแปลง:

  1. รุ่นที่มีโอเปอเรเตอร์ในตัว TensorFlow Lite เท่านั้น ( แนะนำ )
  2. โมเดลที่มีโอเปอเรเตอร์ในตัวและเลือกโอเปอเรเตอร์หลักของ TensorFlow
  3. โมเดลที่มีโอเปอเรเตอร์ในตัว ตัวดำเนินการหลักของ TensorFlow และ/หรือโอเปอเรเตอร์แบบกำหนดเอง

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

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

หลีกเลี่ยงตัวเลือกสุดท้ายในการรวมโอเปอเรเตอร์แบบกำหนดเองในแบบจำลองที่แปลงของคุณเมื่อทำได้ ตัวดำเนินการแบบกำหนดเอง คือตัวดำเนินการที่สร้างขึ้นโดยการรวมตัวดำเนินการหลัก TensorFlow ดั้งเดิมหลายตัวหรือกำหนดตัวดำเนินการใหม่ทั้งหมด เมื่อโอเปอเรเตอร์แบบกำหนดเองถูกแปลง พวกมันสามารถเพิ่มขนาดของโมเดลโดยรวมโดยทำให้เกิดการพึ่งพาภายนอกไลบรารี TensorFlow Lite ในตัว Custom ops หากไม่ได้สร้างมาเพื่อการใช้งานอุปกรณ์เคลื่อนที่หรืออุปกรณ์โดยเฉพาะ อาจส่งผลให้ประสิทธิภาพการทำงานแย่ลงเมื่อปรับใช้กับอุปกรณ์ที่มีข้อจำกัดด้านทรัพยากร เมื่อเทียบกับสภาพแวดล้อมของเซิร์ฟเวอร์ สุดท้าย เช่นเดียวกับการรวมตัวดำเนินการหลักของ TensorFlow ตัวดำเนินการที่กำหนดเองต้องการให้คุณ แก้ไขสภาพแวดล้อมรันไทม์ของโมเดล ซึ่งจำกัดคุณจากการใช้ประโยชน์จากบริการรันไทม์มาตรฐาน เช่น บริการ Google Play

ประเภทที่รองรับ

การดำเนินการ TensorFlow Lite ส่วนใหญ่กำหนดเป้าหมายทั้งทศนิยม ( float32 ) และการอนุมานเชิงปริมาณ ( uint8 , int8 ) แต่ ops จำนวนมากยังไม่มีประเภทอื่นๆ เช่น tf.float16 และ strings

นอกเหนือจากการใช้เวอร์ชันต่างๆ ของการดำเนินการแล้ว ความแตกต่างอื่นๆ ระหว่างรูปแบบจุดลอยตัวและแบบจำลองเชิงปริมาณคือวิธีการแปลง การแปลงเชิงปริมาณต้องการข้อมูลช่วงไดนามิกสำหรับเทนเซอร์ สิ่งนี้ต้องใช้ "การหาปริมาณปลอม" ระหว่างการฝึกโมเดล การเรียกข้อมูลช่วงผ่านชุดข้อมูลการสอบเทียบ หรือการประเมินช่วง "ทันที" ดู quantization สำหรับรายละเอียดเพิ่มเติม

การแปลงแบบตรงไปตรงมา การพับคงที่และการหลอมรวม

TensorFlow Lite สามารถประมวลผลการดำเนินการของ TensorFlow จำนวนหนึ่งได้ แม้ว่าจะไม่มีการเทียบเท่าโดยตรงก็ตาม นี่เป็นกรณีของการดำเนินการที่สามารถลบออกจากกราฟได้ง่ายๆ ( tf.identity ) แทนที่ด้วยเทนเซอร์ ( tf.placeholder ) หรือรวมเข้ากับการดำเนินการที่ซับซ้อนมากขึ้น ( tf.nn.bias_add ) แม้แต่การดำเนินการที่ได้รับการสนับสนุนในบางครั้งอาจถูกลบออกผ่านหนึ่งในกระบวนการเหล่านี้

ต่อไปนี้คือรายการโดยย่อของการดำเนินการ TensorFlow ที่มักจะถูกลบออกจากกราฟ:

ปฏิบัติการทดลอง

มีการดำเนินการ TensorFlow Lite ต่อไปนี้ แต่ไม่พร้อมสำหรับรุ่นที่กำหนดเอง:

  • CALL
  • CONCAT_EMBEDDINGS
  • CUSTOM
  • EMBEDDING_LOOKUP_SPARSE
  • HASHTABLE_LOOKUP
  • LSH_PROJECTION
  • SKIP_GRAM
  • SVDF