שיטות מומלצות לשיפור הביצועים

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

בחירת המודל המתאים ביותר למשימה

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

תרשים של גודל המודל לעומת דיוק

תרשים של דיוק לעומת זמן אחזור

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

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

יצירת פרופיל למודל

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

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

הצגת פרופיל ואופטימיזציה של האופרטורים בתרשים

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

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

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

פרטים נוספים זמינים במסמכים לאופטימיזציה של מודלים.

לשנות את מספר השרשורים

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

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

הסירו עותקים מיותרים

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

יצירת פרופיל של האפליקציה באמצעות כלים ספציפיים לפלטפורמה

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

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

ב-TensorFlow Lite נוספו דרכים חדשות להאצת מודלים באמצעות חומרה מהירה יותר, כמו מעבדי GPU, מערכות DSP ומאיצים נוירונים. בדרך כלל המאיצים האלה נחשפים דרך מודולים משניים של הענקת גישה, שמשתלטים על חלקים מביצוע התרגום בתרגום. TensorFlow Lite יכול להשתמש במשתמשים עם הרשאות גישה בדרכים הבאות:

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