การเพิ่มประสิทธิภาพโมเดล

อุปกรณ์ Edge มักมีหน่วยความจำหรือกำลังในการคำนวณที่จำกัด ต่างกันไป ใช้การเพิ่มประสิทธิภาพกับโมเดลเพื่อให้เรียกใช้ภายในโมเดล ข้อจำกัด นอกจากนี้ การเพิ่มประสิทธิภาพบางอย่างยังอนุญาตให้ใช้ ฮาร์ดแวร์สำหรับการอนุมานแบบเร่ง

LiteRT และการเพิ่มประสิทธิภาพโมเดล TensorFlow ชุดเครื่องมือจะเป็นเครื่องมือสำหรับ ลดความซับซ้อนในการเพิ่มประสิทธิภาพการอนุมาน

เราขอแนะนำให้คุณพิจารณาการเพิ่มประสิทธิภาพโมเดลในระหว่างการใช้งาน ขั้นตอนการพัฒนาแอป เอกสารนี้สรุปแนวทางปฏิบัติแนะนำบางส่วนในการเพิ่มประสิทธิภาพ โมเดล TensorFlow สำหรับการทำให้ใช้งานได้กับฮาร์ดแวร์ Edge

เหตุผลที่ควรเพิ่มประสิทธิภาพโมเดล

การเพิ่มประสิทธิภาพโมเดลสามารถช่วยเกี่ยวกับแอปพลิเคชันได้หลายวิธี ที่กำลังพัฒนา

การลดขนาด

การเพิ่มประสิทธิภาพบางรูปแบบสามารถใช้เพื่อลดขนาดโมเดลได้ เล็กลง มีประโยชน์ดังต่อไปนี้

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

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

การลดเวลาในการตอบสนอง

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

ปัจจุบันเราใช้การวัดขนาดเพื่อลดเวลาในการตอบสนองด้วยการทำให้ การคำนวณที่เกิดขึ้นในช่วงการอนุมาน ซึ่งอาจสร้างความเสียหาย ความแม่นยำ

ความเข้ากันได้ของ Accelerator

ตัวเร่งฮาร์ดแวร์บางตัว เช่น Edge TPU สามารถเรียกใช้การอนุมานได้อย่างรวดเร็วมาก ซึ่งได้รับการปรับปรุงอย่างเหมาะสมแล้ว

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

ข้อดีข้อเสีย

การเพิ่มประสิทธิภาพอาจส่งผลให้เกิดการเปลี่ยนแปลงความถูกต้องของโมเดล ซึ่งต้อง ที่นำมาพิจารณาระหว่างขั้นตอนการพัฒนาแอปพลิเคชัน

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

ประเภทของการเพิ่มประสิทธิภาพ

ปัจจุบัน LiteRT รองรับการเพิ่มประสิทธิภาพผ่านการวัดปริมาณ การตัดข้อความ และ คลัสเตอร์

ทั้งหมดนี้เป็นส่วนหนึ่งของการเพิ่มประสิทธิภาพโมเดล TensorFlow ชุดเครื่องมือ ซึ่งมอบ ทรัพยากรสำหรับเทคนิคการเพิ่มประสิทธิภาพโมเดลที่เข้ากันได้กับ TensorFlow Lite

การกำหนดปริมาณ

การกำหนดปริมาณ ทำงานโดยการลดความแม่นยำของตัวเลขที่ใช้แสดง ซึ่งโดยค่าเริ่มต้นจะเป็นเลขทศนิยม 32 บิต ซึ่งทำให้ โมเดลมีขนาดเล็กลงและการคำนวณที่เร็วขึ้น

การแยกปริมาณประเภทต่อไปนี้ใช้ได้ใน LiteRT

เทคนิค ข้อกำหนดด้านข้อมูล การลดขนาด ความแม่นยำ ฮาร์ดแวร์ที่รองรับ
การวัดปริมาณ Float 16 หลังการฝึก ไม่มีข้อมูล สูงสุด 50% การสูญเสียความแม่นยำเล็กน้อย CPU, GPU
การวัดช่วงไดนามิกหลังการฝึก ไม่มีข้อมูล สูงสุด 75% การสูญเสียความแม่นยำน้อยที่สุด CPU, GPU (Android)
การวัดจำนวนเต็มหลังการฝึก ตัวอย่างตัวแทนที่ไม่มีป้ายกำกับ สูงสุด 75% สูญเสียความแม่นยำเล็กน้อย CPU, GPU (Android), EdgeTPU
การฝึกอบรมที่คำนึงถึงปริมาณ ข้อมูลการฝึกที่ติดป้ายกำกับ สูงสุด 75% การสูญเสียความแม่นยำน้อยที่สุด CPU, GPU (Android), EdgeTPU

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

ปริมาณการตัดสินใจ-แผนผัง

ด้านล่างนี้คือผลลัพธ์เกี่ยวกับเวลาในการตอบสนองและความแม่นยำสำหรับการวัดปริมาณหลังการฝึก และ การฝึกที่คำนึงถึงปริมาณในโมเดล 2-3 รายการ ตัวเลขเวลาในการตอบสนองทั้งหมดจะวัดในวันที่ อุปกรณ์ Pixel 2 ที่ใช้ CPU แกนเดียวขนาดใหญ่ เมื่อชุดเครื่องมือมีการพัฒนามากขึ้น ตัวเลขตรงนี้

รุ่น ความถูกต้องสูงสุด 1 (ต้นฉบับ) ความถูกต้องสูงสุด 1 (วัดระดับหลังการฝึก) ความแม่นยำสูงสุด 1 (การฝึกอบรมการรับรู้เกี่ยวกับการวัดปริมาณ) เวลาในการตอบสนอง (ดั้งเดิม) (มิลลิวินาที) เวลาในการตอบสนอง (ปริมาณหลังการฝึก) (มิลลิวินาที) เวลาในการตอบสนอง (การฝึกทราบถึงปริมาณ) (มิลลิวินาที) ขนาด (ดั้งเดิม) (MB) ขนาด (เพิ่มประสิทธิภาพ) (MB)
Mobilenet-v1-1-2240.7090.6570.70 1241126416.94.3
Mobilenet-v2-1-2240.7190.6370.709 899854143.6
Inception_v30.780.7720.775 113084554395.723.9
Resnet_v2_1010.7700.768ไม่มี 39732868ไม่มี178.344.9
ตารางที่ 1 ประโยชน์ของการวัดปริมาณโมเดลสำหรับโมเดล CNN ที่เลือก

การวัดจำนวนเต็มแบบเต็มที่มีการเปิดใช้งาน int16 และน้ำหนัก int8

การวัดด้วยการเปิดใช้งาน int16 คือแผนการแปลงจำนวนเต็มที่มีจำนวนเต็มที่มีการเปิดใช้งานใน int16 และการถ่วงน้ำหนักใน int8 โหมดนี้จะช่วยเพิ่มความแม่นยำของโมเดลที่เล็กลงเมื่อเทียบกับ แผนการแปลงจำนวนเต็มที่เป็นจำนวนเต็ม ซึ่งมีทั้งการเปิดใช้งานและการถ่วงน้ำหนักใน int8 ที่รักษาขนาดโมเดลให้ใกล้เคียงกัน ขอแนะนำให้ใช้วิธีนี้เมื่อการเปิดใช้งานมีความละเอียดอ่อน กับการวัดปริมาณ

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

ด้านล่างคือผลลัพธ์ความแม่นยําของบางรุ่นที่ใช้ประโยชน์จากโหมดนี้

รุ่น ประเภทเมตริกความแม่นยำ ความแม่นยำ (การเปิดใช้งาน Float32) ความแม่นยำ (การเปิดใช้งาน int8) ความแม่นยำ (การเปิดใช้งาน int16)
Wav2letterWER6.7%7.7% 7.2%
DeepSpeech 0.5.1 (ยกเลิกการฉาย)CER6.13%43.67% 6.52%
YoloV3mAP(IOU=0.5)0.5770.563 0.574
MobileNetV1ความถูกต้องสูงสุด 10.70620.694 0.6936
MobileNetV2ความถูกต้องสูงสุด 10.7180.7126 0.7137
MobileBertF1(การทำงานแบบตรงทั้งหมด)88.81(81.23)2.08(0) 88.73(81.15)
ตารางที่ 2 ประโยชน์ของการวัดปริมาณโมเดลที่มีการเปิดใช้งาน int16

เลื่อยตัดกิ่งไม้

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

ในอนาคต LiteRT จะลดเวลาในการตอบสนองสำหรับโมเดลที่ถูกตัดออก

การคลัสเตอร์

การคลัสเตอร์ ทำงานโดยการจัดกลุ่มน้ำหนักของแต่ละเลเยอร์ในโมเดลเป็นจำนวนที่กำหนดไว้ล่วงหน้า ของคลัสเตอร์ แล้วแชร์ค่าเซนทรอยด์สำหรับน้ำหนักของคลัสเตอร์ แต่ละคลัสเตอร์ ซึ่งจะลดจำนวนค่าน้ำหนักที่ไม่ซ้ำในโมเดล จึงช่วยลดความซับซ้อนได้

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

เวิร์กโฟลว์การพัฒนา

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

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

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