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