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

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

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

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

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

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

การลดขนาด

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

การแบ่งปริมาณที่มีให้เลือกใน TensorFlow Lite มีดังนี้

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

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

ต้นไม้ตัดสินใจเชิงปริมาณ

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

รุ่น ความแม่นยำอันดับ 1 (ต้นฉบับ) ความแม่นยำอันดับต้นๆ 1 (วัดปริมาณหลังการฝึก) ความแม่นยำอันดับ 1 (การฝึกอบรมแบบรับรู้ปริมาณ) เวลาในการตอบสนอง (เดิม) (มิลลิวินาที) เวลาในการตอบสนอง (วัดปริมาณหลังการฝึกอบรม) (มิลลิวินาที) เวลาในการตอบสนอง (การฝึกอบรมแบบ Quantization Aware) (มิลลิวินาที) ขนาด (ดั้งเดิม) (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%
Deep Speech 0.5.1 (เลิกปักหมุด)เซร์6.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

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

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

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

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

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

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

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

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

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

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