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