ดูแลโดยการปรับโมเดล TensorFlow
การวัดปริมาณมีสองรูปแบบ: การวัดปริมาณหลังการฝึกอบรม และการฝึกอบรมการรับรู้เชิงปริมาณ เริ่มต้นด้วย การวัดปริมาณหลังการฝึกอบรม เนื่องจากใช้งานง่ายกว่า แม้ว่าการฝึกอบรมที่คำนึงถึงปริมาณมักจะดีกว่าสำหรับความแม่นยำของโมเดล
หน้านี้จะแสดงภาพรวมเกี่ยวกับการฝึกอบรมที่คำนึงถึงปริมาณเพื่อช่วยคุณพิจารณาว่าการฝึกอบรมดังกล่าวเหมาะสมกับกรณีการใช้งานของคุณอย่างไร
- หากต้องการเจาะลึกตัวอย่างตั้งแต่ต้นจนจบ โปรดดู ตัวอย่างการฝึกอบรมที่ตระหนักถึงเรื่องปริมาณ
- หากต้องการค้นหา API ที่คุณต้องการสำหรับกรณีการใช้งานของคุณอย่างรวดเร็ว โปรดดู คู่มือการฝึกอบรมที่ครอบคลุมเกี่ยวกับการวัดปริมาณ
ภาพรวม
การฝึกอบรมที่ตระหนักถึงการกำหนดปริมาณจะจำลองการวัดปริมาณตามเวลาอนุมาน โดยสร้างแบบจำลองที่เครื่องมือดาวน์สตรีมจะใช้เพื่อสร้างแบบจำลองเชิงปริมาณจริง โมเดลเชิงปริมาณใช้ความแม่นยำต่ำกว่า (เช่น 8 บิตแทนที่จะเป็นโฟลต 32 บิต) ซึ่งนำไปสู่ประโยชน์ในระหว่างการปรับใช้
ปรับใช้ด้วยการหาปริมาณ
การหาปริมาณนำมาซึ่งการปรับปรุงผ่านการบีบอัดโมเดลและการลดเวลาแฝง ด้วยค่าเริ่มต้นของ API ขนาดโมเดลจะลดลง 4x และโดยทั่วไปเราจะเห็นการปรับปรุงเวลาแฝงของ CPU ระหว่าง 1.5 - 4x ในแบ็กเอนด์ที่ทดสอบ ในที่สุด การปรับปรุงเวลาแฝงก็สามารถมองเห็นได้บนตัวเร่งความเร็วการเรียนรู้ของเครื่องที่เข้ากันได้ เช่น EdgeTPU และ NNAPI
เทคนิคนี้ใช้ในการผลิตในด้านคำพูด การมองเห็น ข้อความ และการแปลกรณีการใช้งาน ขณะนี้โค้ดสนับสนุน ชุดย่อยของโมเดลเหล่านี้
ทดลองกับการหาปริมาณและฮาร์ดแวร์ที่เกี่ยวข้อง
ผู้ใช้สามารถกำหนดค่าพารามิเตอร์การหาปริมาณ (เช่น จำนวนบิต) และอัลกอริธึมพื้นฐานได้ในระดับหนึ่ง โปรดทราบว่าด้วยการเปลี่ยนแปลงเหล่านี้จากค่าเริ่มต้นของ API ขณะนี้ยังไม่มีเส้นทางที่รองรับสำหรับการปรับใช้กับแบ็กเอนด์ ตัวอย่างเช่น การแปลง TFLite และการใช้งานเคอร์เนลรองรับเฉพาะการหาปริมาณ 8 บิต
API เฉพาะสำหรับการกำหนดค่านี้เป็นการทดลองและไม่มีความเข้ากันได้แบบย้อนหลัง
ความเข้ากันได้ของ API
ผู้ใช้สามารถใช้การกำหนดปริมาณกับ API ต่อไปนี้:
- การสร้างโมเดล:
keras
ที่มีเฉพาะโมเดล Sequential และ Functional เท่านั้น - เวอร์ชัน TensorFlow: TF 2.x สำหรับ tf-nightly
- ไม่รองรับ
tf.compat.v1
พร้อมแพ็คเกจ TF 2.X
- ไม่รองรับ
- โหมดการดำเนินการ TensorFlow: การดำเนินการที่กระตือรือร้น
อยู่ในแผนงานของเราในการเพิ่มการสนับสนุนในด้านต่อไปนี้:
- การสร้างโมเดล: ชี้แจงว่าโมเดลคลาสย่อยจำกัดการไม่สนับสนุนอย่างไร
- การฝึกอบรมแบบกระจาย:
tf.distribute
เมทริกซ์สนับสนุนทั่วไป
การสนับสนุนมีอยู่ในด้านต่อไปนี้:
- การครอบคลุมโมเดล: โมเดลที่ใช้ เลเยอร์ที่อนุญาต , BatchNormalization เมื่อเป็นไปตามเลเยอร์ Conv2D และ DepthwiseConv2D และในบางกรณี
Concat
- การเร่งความเร็วด้วยฮาร์ดแวร์: ค่าเริ่มต้น API ของเราเข้ากันได้กับการเร่งความเร็วบนแบ็กเอนด์ EdgeTPU, NNAPI และ TFLite และอื่นๆ ดูคำเตือนในแผนงาน
- ปรับใช้ด้วยการหาปริมาณ: ขณะนี้รองรับเฉพาะการหาปริมาณต่อแกนสำหรับเลเยอร์แบบหมุนวน ไม่ใช่การหาปริมาณต่อเทนเซอร์
อยู่ในแผนงานของเราในการเพิ่มการสนับสนุนในด้านต่อไปนี้:
- ความครอบคลุมของโมเดล: ขยายเพื่อรวม RNN/LSTM และการสนับสนุน Concat ทั่วไป
- การเร่งด้วยฮาร์ดแวร์: ตรวจสอบให้แน่ใจว่าตัวแปลง TFLite สามารถสร้างโมเดลจำนวนเต็มได้ ดู ปัญหานี้ สำหรับรายละเอียด
- ทดลองใช้กรณีการใช้งานเชิงปริมาณ:
- ทดลองกับอัลกอริธึมการหาปริมาณที่ครอบคลุมเลเยอร์ Keras หรือต้องมีขั้นตอนการฝึก
- ทำให้ API เสถียร
ผลลัพธ์
การจำแนกภาพด้วยเครื่องมือ
แบบอย่าง | ความแม่นยำอันดับ 1 แบบไม่เชิงปริมาณ | ความแม่นยำเชิงปริมาณ 8 บิต |
---|---|---|
โมบายเน็ตV1 224 | 71.03% | 71.06% |
รีเน็ต v1 50 | 76.3% | 76.1% |
โมบายเน็ตV2 224 | 70.77% | 70.01% |
โมเดลดังกล่าวได้รับการทดสอบบน Imagenet และประเมินทั้งใน TensorFlow และ TFLite
การจำแนกภาพสำหรับเทคนิค
แบบอย่าง | ความแม่นยำอันดับ 1 แบบไม่เชิงปริมาณ | ความแม่นยำเชิงปริมาณ 8 บิต |
---|---|---|
Nasnet-มือถือ | 74% | 73% |
รีเน็ต-v2 50 | 75.6% | 75% |
โมเดลดังกล่าวได้รับการทดสอบบน Imagenet และประเมินทั้งใน TensorFlow และ TFLite
ตัวอย่าง
นอกเหนือจาก ตัวอย่างการฝึกอบรมที่ตระหนักเรื่องปริมาณแล้ว โปรดดูตัวอย่างต่อไปนี้:
- แบบจำลอง CNN ในงานการจำแนกตัวเลขที่เขียนด้วยลายมือของ MNIST พร้อมการหาปริมาณ: รหัส
สำหรับความเป็นมาของสิ่งที่คล้ายกัน โปรดดู บทความ เรื่อง Quantization and Training of Neural Networks for Efficient Integer-Arithmetic-Only Inference paper บทความนี้จะแนะนำแนวคิดบางประการที่เครื่องมือนี้ใช้ การใช้งานไม่เหมือนกันทุกประการ และมีแนวคิดเพิ่มเติมที่ใช้ในเครื่องมือนี้ (เช่น การหาปริมาณต่อแกน)