הכשרה מודעת לקוונטיזציה

מתוחזק על ידי TensorFlow Model Optimization

קיימות שתי צורות של קוונטיזציה: קוונטיזציה לאחר אימון ואימון מודע לכימות. התחל עם קוונטיזציה שלאחר האימון מכיוון שהוא קל יותר לשימוש, אם כי אימון מודע לכימות הוא לרוב טוב יותר לדיוק המודל.

דף זה מספק סקירה כללית על הכשרה מודע לקוונטיזציה כדי לעזור לך לקבוע כיצד הוא מתאים למקרה השימוש שלך.

סקירה כללית

אימון מודע לכיוונטיזציה מחקה קוונטיזציה בזמן היסק, ויוצר מודל שכלים במורד הזרם ישתמשו בו כדי לייצר מודלים מקוונטים בפועל. המודלים הקוונטיים משתמשים ברמת דיוק נמוכה יותר (למשל 8-bit במקום 32-bit float), מה שמוביל ליתרונות במהלך הפריסה.

פרוס עם קוונטיזציה

קוונטיזציה מביאה שיפורים באמצעות דחיסת מודל והפחתת זמן השהייה. עם ברירות המחדל של ה-API, גודל הדגם מצטמצם פי 4, ובדרך כלל אנו רואים שיפורים בין פי 1.5 ל-4 פעמים בהשהיית ה-CPU בקצה האחורי שנבדק. בסופו של דבר, ניתן לראות שיפורים בהשהייה במאיצי למידת מכונה תואמים, כגון EdgeTPU ו-NNAPI.

הטכניקה משמשת בהפקה בדיבור, חזון, טקסט ותרגום מקרי שימוש. הקוד תומך כרגע בקבוצת משנה של דגמים אלה .

ניסוי עם קוונטיזציה וחומרה קשורה

משתמשים יכולים להגדיר את פרמטרי הקוונטיזציה (למשל מספר ביטים) ובמידה מסוימת את האלגוריתמים הבסיסיים. שים לב שעם שינויים אלה מברירות המחדל של ה-API, אין כרגע נתיב נתמך לפריסה ל-backend. לדוגמה, המרת TFLite ויישומי ליבה תומכים רק בקוונטיזציה של 8 סיביות.

ממשקי API ספציפיים לתצורה זו הם ניסיוניים ואינם כפופים לתאימות לאחור.

תאימות API

משתמשים יכולים להחיל קוונטיזציה עם ממשקי ה-API הבאים:

  • בניית מודל: keras עם מודלים רצפים ופונקציונליים בלבד.
  • גרסאות TensorFlow: TF 2.x עבור tf-nightly.
  • מצב ביצוע TensorFlow: ביצוע להוט

זה במפת הדרכים שלנו להוסיף תמיכה בתחומים הבאים:

  • בניית מודלים: הבהירו כיצד דגמי תת-סיווג הוגבלו עד ללא תמיכה
  • הכשרה מבוזרת: tf.distribute

מטריצת תמיכה כללית

תמיכה זמינה בתחומים הבאים:

  • כיסוי מודל: מודלים המשתמשים בשכבות ברשימה מותרת , BatchNormalization כאשר הוא עוקב אחר שכבות Conv2D ו-DepthwiseConv2D, ובמקרים מוגבלים, Concat .
  • האצת חומרה: ברירת המחדל של ה-API שלנו תואמת להאצה ב-EdgeTPU, NNAPI ו-TFLite, בין היתר. ראה את ההסתייגות במפת הדרכים.
  • פריסה עם קוונטיזציה: רק קוונטיזציה לפי ציר עבור שכבות קונבולוציוניות, לא קוונטיזציה לפי טנזור, נתמכת כעת.

זה במפת הדרכים שלנו להוסיף תמיכה בתחומים הבאים:

  • כיסוי הדגם: מורחב כך שיכלול RNN/LSTMs ותמיכה כללית ב-Concat.
  • האצת חומרה: ודא שממיר TFLite יכול לייצר דגמים שלמים מלאים. עיין בנושא זה לפרטים.
  • ניסוי עם מקרי שימוש בקוונטיזציה:
    • ניסוי עם אלגוריתמי קוונטיזציה המשתרעים על שכבות Keras או דורשים את שלב האימון.
    • ייצוב ממשקי API.

תוצאות

סיווג תמונה עם כלים

דֶגֶם דיוק Top-1 לא מקומת דיוק כמותי של 8 סיביות
MobilenetV1 224 71.03% 71.06%
Resnet v1 50 76.3% 76.1%
MobilenetV2 224 70.77% 70.01%

המודלים נבדקו ב-Imagenet והוערכו גם ב-TensorFlow וגם ב-TFLite.

סיווג תמונה לטכניקה

דֶגֶם דיוק Top-1 ללא כמותיות דיוק כמותי של 8 סיביות
Nasnet-Mobile 74% 73%
Resnet-v2 50 75.6% 75%

המודלים נבדקו ב-Imagenet והוערכו גם ב-TensorFlow וגם ב-TFLite.

דוגמאות

בנוסף לדוגמא לאימון מודע לכימות , ראה את הדוגמאות הבאות:

  • מודל CNN על משימת סיווג הספרות בכתב יד של MNIST עם קוונטיזציה: קוד

לקבלת רקע על משהו דומה, עיין במאמר קוונטיזציה והכשרה של רשתות עצביות להסקת מסקנות שלמות-אריתמטיות בלבד . מאמר זה מציג כמה מושגים שכלי זה משתמש בהם. היישום אינו זהה לחלוטין, וישנם מושגים נוספים המשמשים בכלי זה (למשל קוונטיזציה לפי ציר).