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

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

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

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

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

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

ลดขนาด

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

การหาปริมาณ

การ หาปริมาณ ทำงานโดยการลดความแม่นยำของตัวเลขที่ใช้แทนพารามิเตอร์ของแบบจำลอง ซึ่งโดยค่าเริ่มต้นจะเป็นตัวเลขทศนิยม 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 ประโยชน์ของการหาปริมาณแบบจำลองสำหรับรุ่น CNN บางรุ่น

การหาจำนวนเต็มเต็มจำนวนพร้อมการเปิดใช้งาน 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 แผนที่(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

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