מתוחזק על ידי Arm ML Tooling
מסמך זה מספק סקירה כללית של ממשקי API ניסיוניים לשילוב טכניקות שונות כדי לייעל מודלים של למידת מכונה לפריסה.
סקירה כללית
אופטימיזציה שיתופית היא תהליך כולל הכולל טכניקות שונות לייצור מודל שבפריסה מציג את האיזון הטוב ביותר בין מאפייני יעד כגון מהירות הסקה, גודל דגם ודיוק.
הרעיון של אופטימיזציות שיתופיות הוא לבנות על טכניקות בודדות על ידי יישום שלהן בזו אחר זו כדי להשיג את אפקט האופטימיזציה המצטבר. שילובים שונים של האופטימיזציות הבאות אפשריים:
הבעיה המתעוררת כאשר מנסים לשרשר את הטכניקות הללו יחד היא שיישום של אחת מהן בדרך כלל הורס את התוצאות של הטכניקה הקודמת, ומקלקל את התועלת הכוללת של יישום כולן בו זמנית; לדוגמה, חיבור לא שומר על הדלילות שהציג ממשק ה-API לגזם. כדי לפתור בעיה זו, אנו מציגים את טכניקות האופטימיזציה הניסיוניות הבאות:
- דלילות שימור אשכולות
- אימון מודע לכיוונט לשימור דלילות (PQAT)
- אימון מודע לקוונטיזציה לשימור אשכולות (CQAT)
- אימון מודע לכיוונטיזציה דלילות ושימור אשכול
אלה מספקים מספר נתיבי פריסה שניתן להשתמש בהם כדי לדחוס מודל למידת מכונה ולנצל את האצת החומרה בזמן הסקת מסקנות. התרשים שלהלן מדגים מספר נתיבי פריסה שניתן לחקור בחיפוש אחר המודל עם מאפייני הפריסה הרצויים, כאשר צמתי העלים הם מודלים מוכנים לפריסה, כלומר הם מקומתים באופן חלקי או מלא ובפורמט tflite. המילוי הירוק מציין שלבים שבהם נדרש אימון מחדש/כוונן עדין וגבול אדום מקווקו מדגיש את שלבי האופטימיזציה המשותפת. הטכניקה המשמשת להשגת מודל בצומת נתון מצוינת בתווית המתאימה.
נתיב הפריסה הישיר, לכימות בלבד (אחרי אימון או QAT) מושמט באיור שלמעלה.
הרעיון הוא להגיע למודל הממוטב במלואו ברמה השלישית של עץ הפריסה לעיל; עם זאת, כל אחת מרמות האופטימיזציה האחרות עשויה להוכיח את עצמה כמשביעת רצון ולהשיג את הפשרה הנדרשת בין זמן חביון/דיוק להסקת מסקנות, ובמקרה זה אין צורך באופטימיזציה נוספת. תהליך ההכשרה המומלץ יהיה לעבור באופן איטרטיבי על הרמות של עץ הפריסה הרלוונטי לתרחיש פריסת היעד ולראות אם המודל ממלא את דרישות ההשהיה של מסקנות, ואם לא, להשתמש בטכניקת האופטימיזציה השיתופית המתאימה כדי לדחוס את המודל ולחזור על עצמו. עד לאופטימיזציה מלאה של המודל (גזם, מקבץ ומכומת), במידת הצורך.
האיור שלהלן מציג את עלילות הצפיפות של גרעין משקל המדגם שעוברים בצינור האופטימיזציה השיתופי.
התוצאה היא מודל פריסה כמותי עם מספר מופחת של ערכים ייחודיים וכן מספר משמעותי של משקלים דלילים, בהתאם לדלילות היעד שצוינה בזמן האימון. מלבד יתרונות הדחיסה המשמעותיים של המודל, תמיכת חומרה ספציפית יכולה לנצל את המודלים הדלילים והמקובצים הללו כדי להפחית משמעותית את זמן ההסקה.
תוצאות
להלן כמה תוצאות דיוק ודחיסה שהשגנו בעת ניסויים עם נתיבי אופטימיזציה משותפים של PQAT ו-CQAT.
אימון מודע לכיוונט לשימור דלילות (PQAT)
דֶגֶם | פריטים | קו בסיס | דגם גזום (50% דלילות) | דגם QAT | דגם PQAT |
---|---|---|---|---|---|
DS-CNN-L | דיוק FP32 Top1 | 95.23% | 94.80% | (INT8 מזויף) 94.721% | (INT8 מזויף) 94.128% |
קוונטיזציה מלאה של מספרים שלמים INT8 | 94.48% | 93.80% | 94.72% | 94.13% | |
דְחִיסָה | 528,128 → 434,879 (17.66%) | 528,128 → 334,154 (36.73%) | 512,224 → 403,261 (21.27%) | 512,032 → 303,997 (40.63%) | |
Mobilenet_v1-224 | דיוק FP32 Top 1 | 70.99% | 70.11% | (INT8 מזויף) 70.67% | (INT8 מזויף) 70.29% |
קוונטיזציה מלאה של מספרים שלמים INT8 | 69.37% | 67.82% | 70.67% | 70.29% | |
דְחִיסָה | 4,665,520 → 3,880,331 (16.83%) | 4,665,520 → 2,939,734 (37.00%) | 4,569,416 → 3,808,781 (16.65%) | 4,569,416 → 2,869,600 (37.20%) |
אימון מודע לכיוונטיזציה לשימור אשכולות (CQAT)
דֶגֶם | פריטים | קו בסיס | דגם מקובץ | דגם QAT | דגם CQAT |
---|---|---|---|---|---|
Mobilenet_v1 ב-CIFAR-10 | דיוק FP32 Top1 | 94.88% | 94.48% | (INT8 מזויף) 94.80% | (INT8 מזויף) 94.60% |
קוונטיזציה מלאה של מספרים שלמים INT8 | 94.65% | 94.41% | 94.77% | 94.52% | |
גודל | 3.00 מגה-בייט | 2.00 מגה-בייט | 2.84 מגה-בייט | 1.94 מגה-בייט | |
Mobilenet_v1 ב-ImageNet | דיוק FP32 Top 1 | 71.07% | 65.30% | (INT8 מזויף) 70.39% | (INT8 מזויף) 65.35% |
קוונטיזציה מלאה של מספרים שלמים INT8 | 69.34% | 60.60% | 70.35% | 65.42% | |
דְחִיסָה | 4,665,568 → 3,886,277 (16.7%) | 4,665,568 → 3,035,752 (34.9%) | 4,569,416 → 3,804,871 (16.7%) | 4,569,472 → 2,912,655 (36.25%) |
תוצאות CQAT ו-PCQAT עבור דגמים מקובצים לפי ערוץ
התוצאות להלן מתקבלות עם טכניקת אשכול לערוץ . הם ממחישים שאם שכבות קונבולוציוניות של המודל מקובצות לפי ערוץ, אזי דיוק המודל גבוה יותר. אם למודל שלך יש הרבה שכבות קונבולוציוניות, אז אנו ממליצים לאסוף לפי ערוץ. יחס הדחיסה נשאר זהה, אך דיוק הדגם יהיה גבוה יותר. צינור האופטימיזציה של המודל הוא 'מקבץ -> שמירה על אשכולות -> קוונטיזציה לאחר אימון, int8' בניסויים שלנו. דֶגֶם אשכול -> CQAT, quantized int8 אשכול לכל ערוץ -> CQAT, int8 quantized DS-CNN-L 95.949% 96.44% MobileNet-V2 71.538% 72.638% MobileNet-V2 (גזם) 71.45% 71.901%
דוגמאות
לדוגמאות מקצה לקצה של טכניקות האופטימיזציה השיתופיות המתוארות כאן, עיין במחברות הדוגמאות של CQAT , PQAT , אשכול שמירה על דלילות ומחברות PCQAT .