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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

שינוי מספר השרשורים

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

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

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

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

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

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

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

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

  • התכונה 'הענקת גישה ל-GPU' זמינה ב-Android וב-iOS באמצעות OpenGL/OpenCL ו- Metal, בהתאמה. כדי לנסות את האפשרויות האלה, כדאי לעיין במאמר הענקת גישה ל-GPU.
  • יש לכם אפשרות להעניק גישה משלכם אם יש לכם גישה לחומרה לא סטנדרטית. מידע נוסף זמין במאמר נציגים של TensorFlow Lite.

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