ช่วยปกป้อง Great Barrier Reef กับ TensorFlow บน Kaggle เข้าร่วมท้าทาย

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

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

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

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

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

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

ลดขนาด

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

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

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

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

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

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

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

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

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

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

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

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

ประเภทของการปรับให้เหมาะสม

ปัจจุบัน TensorFlow Lite รองรับการปรับให้เหมาะสมผ่าน quantization, pruning และ clustering

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

การหาปริมาณ

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

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

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

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

quantization-decision-tree

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

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

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

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

หมายเหตุ: ขณะนี้มีเพียงไม่เหมาะสมอ้างอิงการใช้งานเคอร์เนลที่มีอยู่ใน TFLite สำหรับโครงการ quantization นี้จึงเริ่มต้นโดยผลการดำเนินงานจะช้าเมื่อเทียบกับเมล็ด 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 จะให้การลดเวลาในการตอบสนองสำหรับโมเดลที่ถูกตัดทอน

การจัดกลุ่ม

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

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

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

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

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

ถ้าคุณต้องการที่จะลดขนาดรูปแบบของคุณคุณสามารถลอง ตัดแต่งกิ่ง และ / หรือ การจัดกลุ่ม ก่อนที่จะ quantizing รุ่นของคุณ