อุปกรณ์ 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-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% |
DeepSpeech 0.5.1 (ยกเลิกการฉาย) | CER | 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) |
เลื่อยตัดกิ่งไม้
ตัดผลงานโดย การนำพารามิเตอร์ภายในโมเดลที่ส่งผลกระทบเพียงเล็กน้อยต่อโมเดล การคาดการณ์ โมเดลที่ตัดแล้วมีขนาดเท่ากันบนดิสก์และมีรันไทม์เหมือนกัน เวลาในการตอบสนอง แต่สามารถบีบอัดได้อย่างมีประสิทธิภาพมากกว่า ซึ่งทำให้การตัดแต่งกิ่งมีประโยชน์ ในการลดขนาดการดาวน์โหลดโมเดล
ในอนาคต LiteRT จะลดเวลาในการตอบสนองสำหรับโมเดลที่ถูกตัดออก
การคลัสเตอร์
การคลัสเตอร์ ทำงานโดยการจัดกลุ่มน้ำหนักของแต่ละเลเยอร์ในโมเดลเป็นจำนวนที่กำหนดไว้ล่วงหน้า ของคลัสเตอร์ แล้วแชร์ค่าเซนทรอยด์สำหรับน้ำหนักของคลัสเตอร์ แต่ละคลัสเตอร์ ซึ่งจะลดจำนวนค่าน้ำหนักที่ไม่ซ้ำในโมเดล จึงช่วยลดความซับซ้อนได้
ด้วยเหตุนี้ คุณจะบีบอัดโมเดลคลัสเตอร์ได้อย่างมีประสิทธิภาพมากขึ้น โดยมอบ ประโยชน์จากการทำให้ใช้งานได้ที่คล้ายกับการตัดออก
เวิร์กโฟลว์การพัฒนา
ลองเริ่มต้นด้วยการตรวจสอบว่าโมเดลในโฮสต์ โมเดลที่ใช้ได้กับแอปพลิเคชันของคุณ หากไม่ เราจะ แนะนำให้ผู้ใช้เริ่มต้นด้วยการวัดปริมาณหลังการฝึก ที่นำไปใช้ได้ในวงกว้าง ไม่จำเป็นต้องใช้ข้อมูลการฝึก
สำหรับกรณีที่ไม่บรรลุเป้าหมายความแม่นยำและเวลาในการตอบสนอง หรือ การรองรับ Accelerator เป็นสิ่งสำคัญ คำนึงถึงปริมาณ การฝึกอบรม ทางเลือกที่ดีกว่า ดูเทคนิคการเพิ่มประสิทธิภาพเพิ่มเติมภายใต้ การเพิ่มประสิทธิภาพโมเดล TensorFlow ชุดเครื่องมือ
หากคุณต้องการลดขนาดโมเดลลงอีก คุณสามารถลองตัดแต่งกิ่งได้ และ/หรือคลัสเตอร์ก่อนที่จะวัดปริมาณโมเดล