ตัวดำเนินการแมชชีนเลิร์นนิง (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 ที่เลือกจากไลบรารีหลัก คุณต้องระบุเมื่อทำการแปลง และตรวจสอบให้แน่ใจว่ารันไทม์ของคุณรวมการดำเนินการเหล่านั้น ดูหัวข้อ ตัวดำเนินการ Select TensorFlow สำหรับขั้นตอนโดยละเอียด
หลีกเลี่ยงตัวเลือกสุดท้ายในการรวมโอเปอเรเตอร์แบบกำหนดเองในแบบจำลองที่แปลงของคุณเมื่อทำได้ ตัวดำเนินการแบบกำหนดเอง คือตัวดำเนินการที่สร้างขึ้นโดยการรวมตัวดำเนินการหลัก TensorFlow ดั้งเดิมหลายตัวหรือกำหนดตัวดำเนินการใหม่ทั้งหมด เมื่อโอเปอเรเตอร์แบบกำหนดเองถูกแปลง พวกมันสามารถเพิ่มขนาดของโมเดลโดยรวมโดยทำให้เกิดการพึ่งพาภายนอกไลบรารี TensorFlow Lite ในตัว Custom ops หากไม่ได้สร้างมาเพื่อการใช้งานอุปกรณ์เคลื่อนที่หรืออุปกรณ์โดยเฉพาะ อาจส่งผลให้ประสิทธิภาพการทำงานแย่ลงเมื่อปรับใช้กับอุปกรณ์ที่มีข้อจำกัดด้านทรัพยากร เมื่อเทียบกับสภาพแวดล้อมของเซิร์ฟเวอร์ สุดท้าย เช่นเดียวกับการรวมตัวดำเนินการหลักของ TensorFlow ตัวดำเนินการที่กำหนดเองต้องการให้คุณ แก้ไขสภาพแวดล้อมรันไทม์ของโมเดล ซึ่งจำกัดคุณจากการใช้ประโยชน์จากบริการรันไทม์มาตรฐาน เช่น บริการ Google Play
ประเภทที่รองรับ
การดำเนินการ TensorFlow Lite ส่วนใหญ่กำหนดเป้าหมายทั้งทศนิยม ( float32
) และการอนุมานเชิงปริมาณ ( uint8
, int8
) แต่ ops จำนวนมากยังไม่มีประเภทอื่นๆ เช่น tf.float16
และ strings
นอกเหนือจากการใช้เวอร์ชันต่างๆ ของการดำเนินการแล้ว ความแตกต่างอื่นๆ ระหว่างรูปแบบจุดลอยตัวและแบบจำลองเชิงปริมาณคือวิธีการแปลง การแปลงเชิงปริมาณต้องการข้อมูลช่วงไดนามิกสำหรับเทนเซอร์ สิ่งนี้ต้องใช้ "การหาปริมาณปลอม" ระหว่างการฝึกโมเดล การเรียกข้อมูลช่วงผ่านชุดข้อมูลการสอบเทียบ หรือการประเมินช่วง "ทันที" ดู quantization สำหรับรายละเอียดเพิ่มเติม
การแปลงแบบตรงไปตรงมา การพับคงที่และการหลอมรวม
TensorFlow Lite สามารถประมวลผลการดำเนินการของ TensorFlow จำนวนหนึ่งได้ แม้ว่าจะไม่มีการเทียบเท่าโดยตรงก็ตาม นี่เป็นกรณีของการดำเนินการที่สามารถลบออกจากกราฟได้ง่ายๆ ( tf.identity
) แทนที่ด้วยเทนเซอร์ ( tf.placeholder
) หรือรวมเข้ากับการดำเนินการที่ซับซ้อนมากขึ้น ( tf.nn.bias_add
) แม้แต่การดำเนินการที่ได้รับการสนับสนุนในบางครั้งอาจถูกลบออกผ่านหนึ่งในกระบวนการเหล่านี้
ต่อไปนี้คือรายการโดยย่อของการดำเนินการ TensorFlow ที่มักจะถูกลบออกจากกราฟ:
-
tf.add
-
tf.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