อุปกรณ์ 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-224 | 0.709 | 0.657 | 0.70 | 124 | 112 | 64 | 16.9 | 4.3 |
Mobilenet-v2-1-224 | 0.719 | 0.637 | 0.709 | 89 | 98 | 54 | 14 | 3.6 |
Inception_v3 | 0.78 | 0.772 | 0.775 | 1130 | 845 | 543 | 95.7 | 23.9 |
Resnet_v2_101 | 0.770 | 0.768 | ไม่มีข้อมูล | 3973 | 2868 | ไม่มีข้อมูล | 178.3 | 44.9 |
การหาปริมาณจำนวนเต็มที่มีการเปิดใช้งาน int16 และน้ำหนัก int8
การหาปริมาณด้วยการเปิดใช้งาน int16 เป็นรูปแบบการคำนวณจำนวนเต็มที่มีการเปิดใช้งานใน int16 และน้ำหนักใน int8 โหมดนี้จะช่วยปรับปรุงความแม่นยำของโมเดลที่เล็กลงเมื่อเทียบกับรูปแบบจำนวนเต็มจำนวนเต็มที่มีการเปิดใช้งานและการถ่วงน้ำหนักใน int8 เพื่อรักษาขนาดโมเดลให้ใกล้เคียงกัน ขอแนะนำให้ใช้เมื่อการเปิดใช้งานเป็นเรื่องที่ละเอียดอ่อน ต่อการคำนวณ
หมายเหตุ: ปัจจุบันมีเพียงการใช้งานเคอร์เนลอ้างอิงที่ไม่ได้เพิ่มประสิทธิภาพเท่านั้นที่พร้อมใช้งานใน TFLite สำหรับรูปแบบการวัดปริมาณนี้ ดังนั้นโดยค่าเริ่มต้น ประสิทธิภาพการทำงานจะช้าเมื่อเทียบกับเคอร์เนล int8 ในปัจจุบัน คุณเข้าถึงข้อดีทั้งหมดของโหมดนี้ได้ผ่านฮาร์ดแวร์เฉพาะหรือซอฟต์แวร์ที่กำหนดเอง
ด้านล่างนี้คือผลความแม่นยำสำหรับบางรุ่นที่ได้ประโยชน์จากโหมดนี้
รุ่น | ประเภทเมตริกความแม่นยำ | ความแม่นยำ (การเปิดใช้งาน Float32) | ความแม่นยำ (การเปิดใช้งาน int8) | ความแม่นยำ (การเปิดใช้งาน int16) |
---|---|---|---|---|
Wav2letter | WER | 6.7% | 7.7% | 7.2% |
Deep Speech 0.5.1 (เลิกปักหมุด) | เซร์ | 6.13% | 43.67% | 6.52% |
YoloV3 | MAP(IOU=0.5) | 0.577 | 0.563 | 0.574 |
MobileNetV1 | ความแม่นยำอันดับ 1 | 0.7062 | 0.694 | 0.6936 |
MobileNetV2 | ความแม่นยำอันดับ 1 | 0.718 | 0.7126 | 0.7137 |
MobileBert | F1(การทำงานแบบตรงทั้งหมด) | 88.81(81.23) | 2.08(0) | 88.73(81.15) |
เลื่อยตัดกิ่งไม้
การตัดทอนทำงานโดยนำพารามิเตอร์ภายในโมเดลออกที่มีผลกระทบเล็กน้อยต่อการคาดการณ์เท่านั้น โมเดลที่ถูกตัดออกจะมีขนาดเท่ากันบนดิสก์และตอบสนองระหว่างรันไทม์เหมือนกัน แต่สามารถบีบอัดได้อย่างมีประสิทธิภาพมากกว่า วิธีนี้จึงเป็นเทคนิคที่มีประโยชน์ ในการลดขนาดการดาวน์โหลดโมเดล
ในอนาคต TensorFlow Lite จะลดเวลาในการตอบสนองสำหรับโมเดลที่ตัดให้สั้นลง
การคลัสเตอร์
คลัสเตอร์ทำงานโดยการจัดกลุ่มน้ำหนักของแต่ละเลเยอร์ในโมเดลเป็นจำนวนคลัสเตอร์ที่กำหนดไว้ล่วงหน้า จากนั้นจึงแชร์ค่าเซนทรอยด์สำหรับน้ำหนักของแต่ละคลัสเตอร์ วิธีนี้จะลดจำนวนค่าน้ำหนักที่ไม่ซ้ำในโมเดล ซึ่งช่วยลดความซับซ้อน
ผลที่ได้คือระบบจะบีบอัดโมเดลคลัสเตอร์ได้อย่างมีประสิทธิภาพมากขึ้น โดยให้ประโยชน์ในการติดตั้งใช้งานคล้ายกับการตัดออก
เวิร์กโฟลว์ในการพัฒนา
ให้ตรวจสอบว่าโมเดลในโมเดลที่โฮสต์ใช้งานกับแอปพลิเคชันของคุณได้หรือไม่ หากไม่ เราขอแนะนำให้ผู้ใช้เริ่มต้นด้วยเครื่องมือวัดปริมาณหลังการฝึก เนื่องจากใช้ได้อย่างกว้างขวางและไม่ต้องใช้ข้อมูลการฝึก
ในกรณีที่ไม่สามารถบรรลุเป้าหมายด้านความแม่นยำและเวลาในการตอบสนอง หรือการสนับสนุนตัวเร่งฮาร์ดแวร์มีความสำคัญ การฝึกที่คำนึงถึงปริมาณอินเทอร์เน็ตคือตัวเลือกที่ดีกว่า ดูเทคนิคการเพิ่มประสิทธิภาพเพิ่มเติมใต้ชุดเครื่องมือเพิ่มประสิทธิภาพโมเดล TensorFlow
หากต้องการลดขนาดโมเดลมากขึ้น คุณสามารถลองตัด และ/หรือคลัสเตอร์ก่อนที่จะกำหนดจำนวนโมเดล