ความเข้ากันได้ของตัวดำเนินการ 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 ของคุณอาจรวมตัวดำเนินการที่กำหนดเองในรูปแบบของตัวดำเนินการคอมโพสิตหรือตัวดำเนินการใหม่ที่คุณกำหนด แผนภาพด้านล่างแสดงความสัมพันธ์ระหว่างตัวดำเนินการเหล่านี้

ตัวดำเนินการ TensorFlow

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

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

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

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

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

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

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

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

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

การดำเนินการ TensorFlow จำนวนหนึ่งสามารถประมวลผลได้โดย TensorFlow Lite แม้ว่าการดำเนินการเหล่านั้นจะไม่เทียบเท่าโดยตรงก็ตาม นี่เป็นกรณีของการดำเนินการที่สามารถลบออกจากกราฟ ( 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