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

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

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

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

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

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

הפחתת גודל

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

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

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

הפחתת זמן האחזור

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

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

תאימות לשיפור המאיץ

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

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

עסקאות טרייד-אוף

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

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

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

LiteRT תומך כרגע באופטימיזציה באמצעות כימות, קיצוץ וקיבוץ לאשכולות.

הנתונים האלה הם חלק מהאופטימיזציה של מודל TensorFlow , שמספק משאבים לשיטות אופטימיזציה של מודלים שתואמים ל-TensorFlow Lite.

כימות

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

סוגי הכמויות הבאים זמינים ב-LiteRT:

טכניקה הדרישות לגבי הנתונים הפחתת גודל דיוק חומרה נתמכת
קוונטיזציה של float16 אחרי האימון אין נתונים עד 50% אובדן משמעותי של רמת הדיוק מעבד (CPU), GPU
קוונטיזציה של טווח דינמי אחרי האימון אין נתונים עד 75% אובדן הדיוק הקטן ביותר מעבד (CPU), GPU (Android)
כימות מספרים שלמים אחרי האימון דגימה מייצגת ללא תווית עד 75% אובדן דיוק קטן מעבד (CPU), GPU (Android), EdgeTPU
הדרכה מבוססת-כמות נתוני אימון מתויגים עד 75% אובדן הדיוק הקטן ביותר מעבד (CPU), GPU (Android), EdgeTPU

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

עץ החלטות-קוונטיזציה

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

דגם רמת דיוק מובילה (מקורי) רמת דיוק מובילה (לאחר כמות האימון) רמת דיוק ראשונה (אימון מודעוּת לכמות) זמן אחזור (מקורי) (באלפיות שנייה) זמן אחזור (באימון פוסט כמותי) (אלפיות שנייה) זמן אחזור (הדרכה מבוססת-Quantization) (אלפיות שנייה) גודל (מקורי) (MB) גודל (אופטימיזציה) (MB)
Mobilenet-v1-1-2240.7090.6570.70 1241126416.94.3
Mobilenet-v2-1-2240.7190.6370.709 899854143.6
Inception_v30.780.7720.775 113084554395.723.9
Resnet_v2_1010.7700.768לא רלוונטי 39732868לא רלוונטי178.344.9
טבלה 1 היתרונות של כימות מודלים למודלים נבחרים של CNN

כימות של מספרים שלמים מלאים עם הפעלות int16 ומשקולות int8

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

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

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

דגם סוג מדד הדיוק דיוק (הפעלות של מספר ממשי (float32)) דיוק (הפעלות של int8) דיוק (הפעלות של int16)
Wav2letterמלח6.7%7.7% 7.2%
DeepSpeech 0.5.1 (ללא סרטון)CER6.13%43.67% 6.52%
YoloV3mAP(IOU=0.5)0.5770.563 0.574
MobileNetV1רמת דיוק ראשונה0.70620.694 0.6936
MobileNetV2רמת דיוק ראשונה0.7180.7126 0.7137
MobileBertF1(התאמה מדויקת)88.81(81.23)2.08(0) 88.73(81.15)
טבלה 2 היתרונות של כימות מודל עם הפעלות int16

חיתוך

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

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

סידור באשכול

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

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

תהליך עבודה של פיתוח

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

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

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