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

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

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

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

โอเปอเรเตอร์ที่รองรับ

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

โอเปอเรเตอร์ TensorFlow

จากโอเปอเรเตอร์รูปแบบ ML เหล่านี้ รูปแบบที่กระบวนการ Conversion รองรับมี 3 ประเภทดังนี้

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

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

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

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

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

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

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

Conversion แบบตรงไปตรงมา การพับโฆษณาตลอด และการรวม

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

ต่อไปนี้เป็นรายการโดยสังเขปของการดำเนินการ TensorFlow ที่มักนำออกจากกราฟ

  • tf.add
  • tf.debugging.check_numerics
  • tf.constant
  • tf.div
  • tf.divide
  • tf.fake_quant_with_min_max_args
  • tf.fake_quant_with_min_max_vars
  • tf.identity
  • tf.maximum
  • tf.minimum
  • tf.multiply
  • tf.no_op
  • tf.placeholder
  • tf.placeholder_with_default
  • tf.realdiv
  • tf.reduce_max
  • tf.reduce_min
  • tf.reduce_sum
  • tf.rsqrt
  • tf.shape
  • tf.sqrt
  • tf.square
  • tf.subtract
  • tf.tile
  • tf.nn.batch_norm_with_global_normalization
  • tf.nn.bias_add
  • tf.nn.fused_batch_norm
  • tf.nn.relu
  • tf.nn.relu6

การดำเนินการทดลอง

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

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