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

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

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

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

เหตุใดจึงควรปรับโมเดลให้เหมาะสม

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

การลดขนาด

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

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

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

การลดความหน่วง

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

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

ความเข้ากันได้ของตัวเร่งความเร็ว

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

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

การแลกเปลี่ยน

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

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

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

ปัจจุบัน TensorFlow Lite รองรับการปรับให้เหมาะสมผ่านการหาปริมาณ การตัด และการจัดกลุ่ม

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

การหาปริมาณ

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

การหาปริมาณประเภทต่อไปนี้มีอยู่ใน TensorFlow Lite:

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

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

การหาปริมาณ-ต้นไม้การตัดสินใจ

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

แบบอย่าง ความแม่นยำอันดับ 1 (ต้นฉบับ) ความแม่นยำอันดับ 1 (ปริมาณหลังการฝึกอบรม) ความแม่นยำอันดับ 1 (การฝึกอบรมการรับรู้เชิงปริมาณ) เวลาแฝง (ดั้งเดิม) (มิลลิวินาที) เวลาแฝง (หลังการฝึกอบรมเชิงปริมาณ) (มิลลิวินาที) เวลาแฝง (การฝึกอบรมการรับรู้เชิงปริมาณ) (มิลลิวินาที) ขนาด (ต้นฉบับ) (MB) ขนาด (เพิ่มประสิทธิภาพ) (MB)
โมบายเน็ต-v1-1-224 0.709 0.657 0.70 124 112 64 16.9 4.3
โมบายเน็ต-v2-1-224 0.719 0.637 0.709 89 98 54 14 3.6
การเริ่มต้น_v3 0.78 0.772 0.775 1130 845 543 95.7 23.9
เรสเน็ต_v2_101 0.770 0.768 ไม่มี 3973 2868 ไม่มี 178.3 44.9
ตารางที่ 1 ประโยชน์ของการหาปริมาณโมเดลสำหรับโมเดล CNN บางรุ่น

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

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

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

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

แบบอย่าง ประเภทเมตริกความแม่นยำ ความแม่นยำ (การเปิดใช้งาน float32) ความแม่นยำ (การเปิดใช้งาน int8) ความแม่นยำ (การเปิดใช้งาน int16)
Wav2letter แวร์ 6.7% 7.7% 7.2%
DeepSpeech 0.5.1 (ไม่ได้เปิดใช้งาน) ซีอีอาร์ 6.13% 43.67% 6.52%
โยโลV3 เอ็มเอพี(IOU=0.5) 0.577 0.563 0.574
โมบายเน็ตV1 ความแม่นยำอันดับ 1 0.7062 0.694 0.6936
โมบายเน็ทV2 ความแม่นยำอันดับ 1 0.718 0.7126 0.7137
โมบายเบิร์ต F1(ตรงทั้งหมด) 88.81(81.23) 2.08(0) 88.73(81.15)
ตารางที่ 2 ประโยชน์ของการหาปริมาณโมเดลด้วยการเปิดใช้งาน int16

การตัดแต่งกิ่ง

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

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

การจัดกลุ่ม

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

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

ขั้นตอนการพัฒนา

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

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

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