למכשירים ניידים ולמכשירים מוטמעים יש משאבי חישוב מוגבלים, כדי לשמור על היעילות של משאבי האפליקציה שלכם. יצרנו רשימה שיטות מומלצות ואסטרטגיות שיעזרו לכם לשפר את TensorFlow ביצועי מודל Lite.
בחירת המודל המתאים ביותר למשימה
בהתאם למשימה, תצטרכו למצוא את האיזון בין מורכבות המודל ועד גודל. אם המשימה דורשת רמת דיוק גבוהה, יכול להיות שצריך הוא מודל מורכב. למשימות שדורשות פחות דיוק, עדיף להשתמש קטן יותר, כי הם לא רק משתמשים בפחות מקום בדיסק ובזיכרון, אלא גם גם באופן כללי מהיר ויעיל יותר אנרגטית. לדוגמה, בתרשימים הבאים אפשר לראות הדיוק וזמן האחזור במודלים נפוצים של סיווג תמונות.
אחת הדוגמאות למודלים שעברו אופטימיזציה למכשירים ניידים היא MobileNets, שעברו אופטימיזציה לנייד של ראייה ממוחשבת. Kaggle יש מודלים שעברו אופטימיזציה במיוחד למכשירים ניידים ולמכשירים מוטמעים.
אפשר לאמן מחדש את המודלים הרשומים במערך נתונים משלכם באמצעות העברה למידת מכונה.
יצירת פרופיל למודל
אחרי שבחרתם מודל מתאים שמתאים למשימה שלכם, היא שיטה טובה ליצור פרופיל ולהגדיר את המודל שלכם כנקודת השוואה. השוואה לשוק של LiteRT כלי כולל כלי מובנה מובנה שמציג נתונים סטטיסטיים לכל מפעיל. מי יכול עזרה בהבנת צווארי בקבוק בביצועים ואילו אופרטורים שולטים בזמן החישוב.
אפשר גם להשתמש ב-LiteRT מתבצע מעקב לפרופיל את המודל באפליקציה ל-Android, באמצעות מעקב סטנדרטי במערכת Android, ולהציג באופן חזותי את הפעלות האופרטור לפי זמן באמצעות פרופיל מבוסס GUI הכלים שלנו.
הצגת פרופיל ואופטימיזציה של האופרטורים בתרשים
אם אופרטור מסוים מופיע לעיתים קרובות במודל, ועל סמך פרופיל, תראו שהמפעיל צורך הכי הרבה זמן, תוכלו לבדוק לבצע אופטימיזציה של האופרטור הזה. התרחיש הזה צריך להיות נדיר כי TensorFlow בגרסת Lite יש גרסאות אופטימליות לרוב האופרטורים. עם זאת, ייתכן שתוכלו לכתוב גרסה מהירה יותר של פעולה מותאמת אישית אם אתם יודעים את המגבלות שבהן על האופרטור. מומלץ לעיין במדריך לאופרטורים מותאמים אישית.
אופטימיזציה של המודל
מטרת האופטימיזציה של המודלים היא ליצור מודלים קטנים יותר, שהם בדרך כלל מהירים יותר יעילות יותר אנרגטית, כדי שניתן יהיה לפרוס אותן במכשירים ניידים. LiteRT תומך במספר טכניקות אופטימיזציה, כמו כימות.
פרטים נוספים זמינים במסמכים לאופטימיזציה של מודלים.
לשנות את מספר השרשורים
ב-LiteRT יש תמיכה בליבות מרובות שרשורים לאופרטורים רבים. אפשר להגדיל את מספר השרשורים ולהאיץ את הביצוע של האופרטורים. במגמת עלייה אך מספר השרשורים יגרום למודל להשתמש ביותר משאבים חשמל.
באפליקציות מסוימות, זמן האחזור עשוי להיות חשוב יותר מצריכת אנרגיה. שלך יכול להגדיל את מספר השרשורים על ידי הגדרה של מספר המתורגמן threads. עם זאת, ביצוע ריבוי תהליכונים כרוך בתשלום של ביצועים משופרים שונות בהתאם למה שמתבצע בו-זמנית. הדבר במיוחד במקרה של אפליקציות לנייד. לדוגמה, בדיקות מבודדות עשויות להציג פי 2 מהירות גבוהה יותר לעומת פרוטוקול עם שרשור יחיד, אבל אם אפליקציה אחרת פועלת באותו זמן, הוא עלול להוביל לביצועים פחות טובים בהשוואה לשרשורים עם שרשור יחיד.
הסירו עותקים מיותרים
אם האפליקציה לא תוכננה בקפידה, יכולים להיות עותקים מיותרים
כשמזינים את הקלט אל המודל וקוראים את הפלט מהמודל. צריך לוודא
למחוק עותקים מיותרים. אם אתם משתמשים בממשקי API ברמה גבוהה יותר, כמו Java, צריך ליצור
הקפידו לבדוק בקפידה את התיעוד אם יש בו אזהרות לגבי הביצועים. לדוגמה,
Java API מהיר בהרבה אם משתמשים ב-ByteBuffers
קלט.
יצירת פרופיל של האפליקציה באמצעות כלים ספציפיים לפלטפורמה
כלים ספציפיים לפלטפורמה, כמו Android Profiler וגם שפע הכלים של מידע פרופיילינג שיכול לשמש לניפוי באגים באפליקציה שלך. לפעמים ייתכן שהבאג בביצועים לא יופיע במודל, אלא בחלקים של קוד האפליקציה לקיים אינטראקציה עם המודל. חשוב להכיר את הפלטפורמה בכלים ובשיטות מומלצות ליצירת פרופילים ספציפיים לפלטפורמה שלכם.
בדיקה אם הדגם שלכם מפיק תועלת משימוש באיצי חומרה שזמינים במכשיר
ב-LiteRT נוספו דרכים חדשות להאצת מודלים באמצעות חומרה מהירה יותר כמו מעבדי GPU, מעבדי DSP ומאיצים נוירונים. בדרך כלל המאיצים האלה נחשף דרך מודולים משניים של הענקת גישה שמשתלטים על באימון של המתרגם. מערכת LiteRT יכולה להשתמש במשתמשים עם הרשאות גישה בדרכים הבאות:
- הגישה ל-GPU זמינה ב-Android וב-iOS, באמצעות OpenGL/OpenCL ו- Metal, בהתאמה. כדי לנסות אותם, צריך לעיין במאמר מקבל ההרשאה ל-GPU.
- תהיה לך אפשרות ליצור נציג מורשה משלך אם יש לך גישה אל חומרה לא סטנדרטית. ראו LiteRT נציגים. למידע נוסף.
חשוב לדעת שמאיצים מסוימים פועלים טוב יותר בסוגים שונים של דגמים. במידה מסוימת משתמשים שקיבלו גישה תומכים רק במודלים צפים או במודלים שעברו אופטימיזציה באופן ספציפי. זה כן חשוב לעשות נקודות השוואה לכל נציג כדי לראות אם זו שיטה טובה עבור האפליקציה שלך. לדוגמה, אם יש לכם מודל קטן מאוד, ייתכן שלא כדאי להאציל את המודל ל-GPU. לעומת זאת, מאיצים בחירה מצוינת עבור מודלים גדולים עם עוצמת אריתמטית גבוהה.