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

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

בחר את הדגם הטוב ביותר עבור המשימה

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

Graph of model size vs accuracy

Graph of accuracy vs latency

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

אתה יכול לאמן מחדש את המודלים המפורטים במערך הנתונים שלך על ידי שימוש בלמידה של העברה. עיין במדריכי לימוד העברה באמצעות TensorFlow Lite Model Maker .

צור פרופיל של הדגם שלך

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

צריך עוד עזרה

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