ขอขอบคุณที่เข้าร่วม Google I/O ดูเซสชั่นทั้งหมดตามความต้องการ ดูตามความต้องการ

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

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

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

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

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

การดำเนินการ 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