หน้านี้ได้รับการแปลโดย Cloud Translation API
Switch to English

การฝึกอบรมการตระหนักถึงปริมาณ

ดูแลโดย TensorFlow Model Optimization

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

หน้านี้ให้ภาพรวมเกี่ยวกับการฝึกอบรมการตระหนักถึงการหาปริมาณเพื่อช่วยคุณพิจารณาว่าเหมาะสมกับกรณีการใช้งานของคุณอย่างไร

ภาพรวม

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

ปรับใช้ด้วย quantization

Quantization นำมาซึ่งการปรับปรุงผ่านการบีบอัดโมเดลและการลดเวลาแฝง ด้วยค่าเริ่มต้นของ API ขนาดของโมเดลจะลดลง 4x และโดยทั่วไปเราจะเห็นว่าการปรับปรุงเวลาในการตอบสนองของ CPU อยู่ระหว่าง 1.5 - 4 เท่าในแบ็กเอนด์ที่ทดสอบ ในที่สุดการปรับปรุงเวลาในการตอบสนองสามารถเห็นได้ในตัวเร่งการเรียนรู้ของเครื่องที่เข้ากันได้เช่น EdgeTPU และ NNAPI

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

ทดลองกับการหาปริมาณและฮาร์ดแวร์ที่เกี่ยวข้อง

ผู้ใช้สามารถกำหนดค่าพารามิเตอร์ quantization (เช่นจำนวนบิต) และอัลกอริทึมพื้นฐานในระดับหนึ่ง ด้วยการเปลี่ยนแปลงเหล่านี้จากค่าเริ่มต้นของ API จึงไม่มีเส้นทางที่รองรับในการปรับใช้

API เฉพาะสำหรับการกำหนดค่านี้เป็นแบบทดลองและไม่มีความเข้ากันได้แบบย้อนหลัง

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

ผู้ใช้สามารถใช้ quantization กับ API ต่อไปนี้:

  • การสร้างโมเดล: tf.keras มีเฉพาะโมเดลตามลำดับและฟังก์ชันเท่านั้น
  • TensorFlow เวอร์ชัน: TF 2.x สำหรับ tf-nightly
  • โหมดการดำเนินการ TensorFlow: การดำเนินการอย่างกระตือรือร้น

อยู่ในแผนงานของเราที่จะเพิ่มการสนับสนุนในด้านต่อไปนี้:

  • การสร้างแบบจำลอง: ชี้แจงว่าโมเดลคลาสย่อยมีข้อ จำกัด ไม่ให้รองรับได้อย่างไร
  • การฝึกอบรมแบบกระจาย: tf.distribute

เมทริกซ์การสนับสนุนทั่วไป

การสนับสนุนมีให้บริการในพื้นที่ต่อไปนี้:

  • ความครอบคลุมของโมเดล: โมเดลที่ใช้ เลเยอร์ที่ อนุญาต BatchNormalization เมื่อเป็นไปตามเลเยอร์ Conv2D และ DepthwiseConv2D และ Concat ในบางกรณี
  • การเร่งฮาร์ดแวร์: ค่าเริ่มต้น API ของเราเข้ากันได้กับการเร่งความเร็วบนแบ็กเอนด์ EdgeTPU, NNAPI และ TFLite และอื่น ๆ ดูข้อแม้ในโรดแมป
  • ปรับใช้ด้วยการหาปริมาณ: ปัจจุบันรองรับเฉพาะการหาปริมาณต่อแกนสำหรับเลเยอร์ Convolutional ไม่ใช่การหาปริมาณต่อเทนเซอร์เท่านั้น

อยู่ในแผนงานของเราที่จะเพิ่มการสนับสนุนในด้านต่อไปนี้:

  • ความครอบคลุมของรุ่น: ขยายเพื่อรวม RNN / LSTM และการสนับสนุน Concat ทั่วไป
  • การเร่งฮาร์ดแวร์: ตรวจสอบให้แน่ใจว่าตัวแปลง TFLite สามารถสร้างแบบจำลองจำนวนเต็มเต็มได้ ดู ปัญหานี้ สำหรับรายละเอียด
  • ทดลองกับกรณีการใช้งานเชิงปริมาณ:
    • ทดลองกับอัลกอริธึมการหาปริมาณที่ครอบคลุมเลเยอร์ Keras หรือต้องใช้ขั้นตอนการฝึกอบรม
    • ทำให้ API เสถียร

ผล

การจำแนกภาพด้วยเครื่องมือ

รุ่น ความแม่นยำอันดับ 1 ที่ไม่ได้วัดปริมาณ ความแม่นยำเชิงปริมาณ 8 บิต
MobilenetV1 224 71.03% 71.06%
Resnet v1 50 76.3% 76.1%
MobilenetV2 224 70.77% 70.01%

แบบจำลองได้รับการทดสอบบน Imagenet และได้รับการประเมินทั้งใน TensorFlow และ TFLite

การจำแนกภาพสำหรับเทคนิค

รุ่น ความแม่นยำอันดับ 1 ที่ไม่ได้วัดปริมาณ ความแม่นยำเชิงปริมาณ 8 บิต
Nasnet-Mobile 74% 73%
Resnet-v2 50 75.6% 75%

แบบจำลองได้รับการทดสอบบน Imagenet และได้รับการประเมินทั้งใน TensorFlow และ TFLite

ตัวอย่าง

นอกเหนือจาก ตัวอย่างการฝึกอบรมการรับรู้ปริมาณ แล้วดูตัวอย่างต่อไปนี้:

  • แบบจำลอง CNN บนภารกิจการจำแนกตัวเลขหลักที่เขียนด้วยลายมือของ MNIST ด้วยการกำหนดจำนวน: รหัส

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