ตัวดำเนินการแมชชีนเลิร์นนิง (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 ประเภทที่สนับสนุนโดยกระบวนการแปลง:
- รุ่นที่มีตัวดำเนินการในตัว TensorFlow Lite เท่านั้น ( ที่แนะนำ )
- โมเดลที่มีตัวดำเนินการในตัวและเลือกตัวดำเนินการหลัก TensorFlow
- โมเดลที่มีตัวดำเนินการในตัว ตัวดำเนินการหลัก 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 โดยสังเขปซึ่งโดยปกติจะถูกลบออกจากกราฟ:
-
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