Google I/O הוא עטיפה! התעדכן בהפעלות של TensorFlow. צפה בהפעלות

אופטימיזציה של מודלים

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

TensorFlow לייט ואת Toolkit אופטימיזציה דגם TensorFlow לספק כלים כדי למזער את המורכבות של אופטימיזציה היקש.

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

מדוע צריך לייעל את הדגמים

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

הקטנת גודל

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

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

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

הפחתת חביון

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

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

תאימות מאיץ

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

באופן כללי, סוגים אלה של מכשירים דורשים לכמת מודלים בצורה ספציפית. עיין בתיעוד של כל מאיץ חומרה למידע נוסף על הדרישות שלהם.

פשרות

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

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

סוגי אופטימיזציה

TensorFlow Lite תומך כיום באופטימיזציה באמצעות כימות, גיזום ואשכולות.

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

כימות

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

הסוגים הבאים של כימות זמינים ב- TensorFlow Lite:

טֶכנִיקָה דרישות נתונים הקטנת גודל דיוק חומרה נתמכת
כימות float16 שלאחר האימון אין מידע עד 50% אובדן דיוק לא משמעותי מעבד, GPU
כימות טווח דינמי לאחר אימון אין מידע עד 75% אובדן הדיוק הקטן ביותר מעבד, GPU (אנדרואיד)
כימות שלם לאחר אימון מדגם מייצג ללא תווית עד 75% אובדן דיוק קטן מעבד, GPU (אנדרואיד), EdgeTPU, משושה DSP
אימון מודע לכמות נתוני אימון מסומנים עד 75% אובדן הדיוק הקטן ביותר מעבד, GPU (אנדרואיד), EdgeTPU, משושה DSP

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

כימות-החלטה-עץ

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

דֶגֶם דיוק ראשון (מקורי) דיוק 1 (הכשרה לאחר הכשרה) דיוק ראשון (אימון מודע לכמות) חביון (מקורי) (ms) חביון (הכשרה לאחר הכשרה) (ms) איחורים (אימון מודע לכמות) (ms) גודל (מקורי) (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
התחלה_ v3 0.78 0.772 0.775 1130 845 543 95.7 23.9
Resnet_v2_101 0.770 0.768 N/A 3973 2868 N/A 178.3 44.9
1 יתרונות ענייני קוונטיזציה מודל בדגמים נבחרים CNN

כימות שלמה מלאה עם הפעלות 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 דיוק ראשון 0.7062 0.694 0.6936
MobileNetV2 דיוק ראשון 0.718 0.7126 0.7137
MobileBert F1 (התאמה מדויקת) 88.81 (81.23) 2.08 (0) 88.73 (81.15)
טבלה 2 יתרונות של קוונטיזציה דגם עם הפעלות int16

קִצוּץ

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

בעתיד, TensorFlow Lite תספק הפחתת חביון לדגמים גזומים.

אשכולות

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

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

זרימת עבודה לפיתוח

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

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

אם אתה רוצה לצמצם את גודל המודל שלך, אתה יכול לנסות גיזום ו / או באשכולות לפני quantizing המודלים שלך.