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