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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

การแปลงแบบตรงไปตรงมา การพับตลอดเวลา และการเชื่อมเข้าด้วยกัน

LiteRT สามารถประมวลผลการดำเนินการ TensorFlow จำนวนหนึ่งได้แม้กระทั่ง แต่จะไม่มีแอปที่เทียบเท่ากันโดยตรง ในกรณีเช่นนี้ สำหรับการดำเนินการที่สามารถ ถูกนำออกจากกราฟ (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

การดำเนินการทดสอบ

มีการดำเนินการ LiteRT ต่อไปนี้อยู่ แต่ไม่พร้อมสำหรับการกำหนดเอง รุ่น:

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