มีคำถาม? เชื่อมต่อกับชุมชนที่ฟอรัม TensorFlow เยี่ยมชมฟอรัม

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

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

TensorFlow Lite และ TensorFlow Model Optimization Toolkit เป็น เครื่องมือที่ช่วยลดความซับซ้อนของการอนุมานให้เหมาะสมที่สุด

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

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

มีหลายวิธีหลัก ๆ ที่การเพิ่มประสิทธิภาพแบบจำลองสามารถช่วยในการพัฒนาแอปพลิเคชัน

การลดขนาด

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

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

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

การลดเวลาแฝง

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

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

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

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

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

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

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

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

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

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

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

ปริมาณ

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

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

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

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

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

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

รุ่น ความแม่นยำอันดับ 1 (ดั้งเดิม) ความแม่นยำอันดับ 1 (ปริมาณการฝึกหลังการฝึก) ความแม่นยำอันดับ 1 (การฝึกอบรมการรับรู้ปริมาณ) เวลาแฝง (ดั้งเดิม) (มิลลิวินาที) Latency (Post Training Quantized) (มิลลิวินาที) Latency (Quantization Aware Training) (มิลลิวินาที) ขนาด (ต้นฉบับ) (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
ตารางที่ 1 ประโยชน์ของการหาจำนวนแบบจำลองสำหรับรุ่น CNN ที่เลือก

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

Quantization ที่มีการเปิดใช้งาน 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 แผนที่ (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)
ตารางที่ 2 ประโยชน์ของการหาจำนวนแบบจำลองด้วยการเปิดใช้งาน int16

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

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

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

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

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

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

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

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

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

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