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

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

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

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

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

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

การลดขนาด

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

การควอนไทซ์

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

การหาปริมาณประเภทต่อไปนี้พร้อมใช้งานใน LiteRT

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

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

quantization-decision-tree

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

รุ่น ความแม่นยำสูงสุด (เดิม) ความแม่นยำระดับสูงสุด (หลังการฝึกแบบควอนไทซ์) ความแม่นยำสูงสุด (การฝึกที่คำนึงถึงการหาปริมาณ) เวลาในการตอบสนอง (เดิม) (มิลลิวินาที) เวลาในการตอบสนอง (หลังการฝึกแบบควอนไทซ์) (มิลลิวินาที) เวลาในการตอบสนอง (การฝึกที่คำนึงถึงการหาปริมาณ) (มิลลิวินาที) ขนาด (ต้นฉบับ) (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 (unrolled)CER6.13%43.67% 6.52%
YoloV3mAP(IOU=0.5)0.5770.563 0.574
MobileNetV1ความแม่นยำสูงสุด0.70620.694 0.6936
MobileNetV2ความแม่นยำสูงสุด0.7180.7126 0.7137
MobileBertF1(การทำงานแบบตรงทั้งหมด)88.81(81.23)2.08(0) 88.73(81.15)
ตารางที่ 2 ประโยชน์ของการหาปริมาณโมเดลด้วยการเปิดใช้งาน int16

การตัดแต่ง

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

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

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

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

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

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

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

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

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