כלי בנצ'מרק
כלי ההשוואה של TensorFlow Lite כיום מודדים ומחשבים נתונים סטטיסטיים עבור מדדי הביצועים החשובים הבאים:
- זמן אתחול
- זמן מסקנות של מצב חימום
- זמן מסקנות של מצב יציב
- שימוש בזיכרון בזמן האתחול
- שימוש כללי בזיכרון
כלי ההשוואה זמינים כאפליקציות בנצ'מרק עבור אנדרואיד ו-iOS וכקבצים בינאריים של שורת פקודה מקוריים, וכולם חולקים את אותה היגיון ליבה למדידת ביצועים. שים לב שהאפשרויות הזמינות ותבניות הפלט שונות במקצת בגלל ההבדלים בסביבת זמן הריצה.
אפליקציית benchmark של אנדרואיד
ישנן שתי אפשרויות לשימוש בכלי ההשוואה עם אנדרואיד. אחת מהן בינארית בנצ'מרק מקורית ואחרת היא אפליקציית בנצ'מרק לאנדרואיד, מדד טוב יותר לביצועי המודל באפליקציה. כך או כך, המספרים מכלי הבנצ'מרק עדיין יהיו שונים במקצת מהמסק עם הדגם באפליקציה בפועל.
לאפליקציית הבנצ'מרק הזו לאנדרואיד אין ממשק משתמש. התקן והפעל אותו באמצעות פקודת adb
ואחזר תוצאות באמצעות פקודת adb logcat
.
הורד או בנה את האפליקציה
הורד את אפליקציות הבנצ'מרק הליליות שנבנו מראש לאנדרואיד באמצעות הקישורים למטה:
באשר לאפליקציות בנצ'מרק לאנדרואיד התומכות ב-TF ops באמצעות Flex delegate , השתמש בקישורים למטה:
אתה יכול גם לבנות את האפליקציה ממקור על ידי ביצוע הוראות אלה.
הכן benchmark
לפני הפעלת אפליקציית הבנצ'מרק, התקן את האפליקציה ודחף את קובץ הדגם למכשיר באופן הבא:
adb install -r -d -g android_aarch64_benchmark_model.apk
adb push your_model.tflite /data/local/tmp
הפעל benchmark
adb shell am start -S \
-n org.tensorflow.lite.benchmark/.BenchmarkModelActivity \
--es args '"--graph=/data/local/tmp/your_model.tflite \
--num_threads=4"'
graph
הוא פרמטר נדרש.
-
graph
:string
הנתיב לקובץ המודל של TFLite.
אתה יכול לציין פרמטרים אופציונליים נוספים להפעלת ה-benchmark.
-
num_threads
:int
(ברירת מחדל=1)
מספר השרשורים לשימוש להפעלת מתורגמן TFLite. -
use_gpu
:bool
(default=false)
השתמש בנציג GPU . -
use_nnapi
:bool
(default=false)
השתמש בנציג NNAPI . -
use_xnnpack
:bool
(default=false
)
השתמש בנציג XNNPACK . -
use_hexagon
:bool
(default=false
)
השתמש בנציג משושה .
בהתאם למכשיר שבו אתה משתמש, ייתכן שחלק מהאפשרויות הללו לא יהיו זמינות או שלא ישפיעו. עיין בפרמטרים לפרמטרים נוספים של ביצועים שתוכל להפעיל עם אפליקציית ההשוואה.
הצג את התוצאות באמצעות הפקודה logcat
:
adb logcat | grep "Inference timings"
תוצאות ההשוואה מדווחות כך:
... tflite : Inference timings in us: Init: 5685, First inference: 18535, Warmup (avg): 14462.3, Inference (avg): 14575.2
Benchmark בינארי מקורי
כלי Benchmark מסופק גם בתור benchmark_model
בינארי מקורי. אתה יכול להפעיל את הכלי הזה משורת פקודה של מעטפת ב-Linux, Mac, מכשירים משובצים ומכשירי אנדרואיד.
הורד או בנה את הבינארי
הורד את הקבצים הבינאריים של שורת הפקודה הלילית שנבנו מראש על ידי ביצוע הקישורים למטה:
לגבי קבצים בינאריים שנבנו מראש ליליים התומכים ב-TF ops באמצעות Flex delegate , השתמש בקישורים למטה:
כדי למדוד עם TensorFlow Lite Hexagon delegate , בנינו מראש גם את הקבצים הנדרשים libhexagon_interface.so
(ראה כאן לפרטים על קובץ זה). לאחר הורדת הקובץ של הפלטפורמה המתאימה מהקישורים למטה, אנא שנה את שם הקובץ ל- libhexagon_interface.so
.
אתה יכול גם לבנות את ה-Native benchmark בינארי ממקור במחשב שלך.
bazel build -c opt //tensorflow/lite/tools/benchmark:benchmark_model
כדי לבנות עם אנדרואיד NDK Toolchain, עליך להגדיר תחילה את סביבת הבנייה על ידי ביצוע מדריך זה, או להשתמש בתמונת docker כמתואר במדריך זה.
bazel build -c opt --config=android_arm64 \
//tensorflow/lite/tools/benchmark:benchmark_model
הפעל benchmark
כדי להפעיל מדדים במחשב שלך, הפעל את הקובץ הבינארי מהמעטפת.
path/to/downloaded_or_built/benchmark_model \
--graph=your_model.tflite \
--num_threads=4
אתה יכול להשתמש באותה סט של פרמטרים כפי שהוזכר לעיל עם שורת הפקודה הבינארי המקורית.
אופציות של מודל פרופילים
המודל הבינארי של מודל ההשוואה מאפשר לך גם ליצור פרופיל אופציות של מודלים ולקבל את זמני הביצוע של כל מפעיל. כדי לעשות זאת, העבירו את הדגל --enable_op_profiling=true
ל- benchmark_model
במהלך הפנייה. פרטים מוסברים כאן .
Benchmark בינארי מקורי עבור אפשרויות ביצועים מרובות בהרצה אחת
בינארי C++ נוח ופשוט מסופק גם כדי למדוד אפשרויות ביצועים מרובות בהפעלה אחת. בינארי זה בנוי על בסיס כלי ההשוואה שהוזכר לעיל שיכול היה לסמן רק אפשרות ביצועים בודדת בכל פעם. הם חולקים את אותו תהליך בנייה/התקנה/הפעלה, אבל שם היעד BUILD של הבינארי הזה הוא benchmark_model_performance_options
והוא דורש כמה פרמטרים נוספים. פרמטר חשוב עבור בינארי זה הוא:
perf_options_list
: string
(default='all')
רשימה מופרדת בפסיקים של אפשרויות ביצועים של TFLite להשוואה.
אתה יכול לקבל מדי לילה בינאריים מובנים מראש עבור הכלי הזה, כמפורט להלן:
אפליקציית benchmark של iOS
כדי להפעיל מדדים במכשיר iOS, עליך לבנות את האפליקציה ממקור . שים את קובץ המודל TensorFlow Lite בספריית benchmark_data של עץ המקור ושנה את הקובץ benchmark_params.json
. קבצים אלה נארזים באפליקציה והאפליקציה קוראת נתונים מהספרייה. בקר באפליקציית benchmark של iOS לקבלת הוראות מפורטות.
מדדי ביצועים עבור דגמים ידועים
סעיף זה מפרט את מדדי הביצועים של TensorFlow Lite בעת הפעלת דגמים ידועים בחלק ממכשירי Android ו- iOS.
מדדי ביצועים של אנדרואיד
מספרי השוואת ביצועים אלה נוצרו עם ה- Native Benchmark בינארי .
עבור מדדי אנדרואיד, זיקת ה-CPU מוגדרת להשתמש בליבות גדולות במכשיר כדי להפחית את השונות (ראה פרטים ).
היא מניחה שהמודלים הורדו ונפתחו לספריית /data/local/tmp/tflite_models
. ה-Benchmark הבינארי נבנה באמצעות הוראות אלה , ובהנחה שהוא נמצא בספריית /data/local/tmp
.
כדי להפעיל את ה-benchmark:
adb shell /data/local/tmp/benchmark_model \
--num_threads=4 \
--graph=/data/local/tmp/tflite_models/${GRAPH} \
--warmup_runs=1 \
--num_runs=50
כדי להפעיל עם napi delegate, הגדר --use_nnapi=true
. כדי להפעיל עם GPU Delegate, הגדר --use_gpu=true
.
ערכי הביצועים שלהלן נמדדים באנדרואיד 10.
שם המודל | התקן | מעבד, 4 חוטים | GPU | NNAPI |
---|---|---|---|---|
Mobilenet_1.0_224(צף) | פיקסל 3 | 23.9 אלפיות השנייה | 6.45 אלפיות השנייה | 13.8 אלפיות השנייה |
פיקסל 4 | 14.0 אלפיות השנייה | 9.0 אלפיות השנייה | 14.8 אלפיות השנייה | |
Mobilenet_1.0_224 (כמותי) | פיקסל 3 | 13.4 אלפיות השנייה | --- | 6.0 אלפיות השנייה |
פיקסל 4 | 5.0 אלפיות השנייה | --- | 3.2 אלפיות השנייה | |
NASNet נייד | פיקסל 3 | 56 אלפיות השנייה | --- | 102 אלפיות השנייה |
פיקסל 4 | 34.5 אלפיות השנייה | --- | 99.0 אלפיות השנייה | |
SqueezeNet | פיקסל 3 | 35.8 אלפיות השנייה | 9.5 אלפיות השנייה | 18.5 אלפיות השנייה |
פיקסל 4 | 23.9 אלפיות השנייה | 11.1 אלפיות השנייה | 19.0 אלפיות השנייה | |
Inception_ResNet_V2 | פיקסל 3 | 422 אלפיות השנייה | 99.8 אלפיות השנייה | 201 אלפיות השנייה |
פיקסל 4 | 272.6 אלפיות השנייה | 87.2 אלפיות השנייה | 171.1 אלפיות השנייה | |
Inception_V4 | פיקסל 3 | 486 אלפיות השנייה | 93 אלפיות השנייה | 292 אלפיות השנייה |
פיקסל 4 | 324.1 אלפיות השנייה | 97.6 אלפיות השנייה | 186.9 אלפיות השנייה |
מדדי ביצועים של iOS
מספרי השוואת ביצועים אלה נוצרו עם אפליקציית ה-benchmark של iOS .
כדי להפעיל מדדי ביצועים של iOS, אפליקציית ה-benchmark שונתה כך שתכלול את הדגם המתאים, ו- benchmark_params.json
שונה כדי להגדיר num_threads
ל-2. כדי להשתמש ב-GPU delegate, "use_gpu" : "1"
ו- "gpu_wait_type" : "aggressive"
היו נוסף גם ל- benchmark_params.json
.
שם המודל | התקן | מעבד, 2 חוטים | GPU |
---|---|---|---|
Mobilenet_1.0_224(צף) | אייפון XS | 14.8 אלפיות השנייה | 3.4 אלפיות השנייה |
Mobilenet_1.0_224 (כמותי) | אייפון XS | 11 אלפיות השנייה | --- |
NASNet נייד | אייפון XS | 30.4 אלפיות השנייה | --- |
SqueezeNet | אייפון XS | 21.1 אלפיות השנייה | 15.5 אלפיות השנייה |
Inception_ResNet_V2 | אייפון XS | 261.1 אלפיות השנייה | 45.7 אלפיות השנייה |
Inception_V4 | אייפון XS | 309 אלפיות השנייה | 54.4 אלפיות השנייה |
עקבו אחר חלקים פנימיים של TensorFlow Lite
עקבו אחר חלקים פנימיים של TensorFlow Lite באנדרואיד
ניתן ללכוד אירועים פנימיים מהמתורגמן TensorFlow Lite של אפליקציית אנדרואיד על ידי כלי מעקב של אנדרואיד . הם אותם אירועים עם Android Trace API, כך שהאירועים שנלכדו מקוד Java/Kotlin נראים יחד עם אירועים פנימיים של TensorFlow Lite.
כמה דוגמאות לאירועים הם:
- הזמנת מפעיל
- שינוי גרף על ידי נציג
- הקצאת טנזור
בין האפשרויות השונות ללכידת עקבות, מדריך זה מכסה את פרופיל המעבד של Android Studio ואת אפליקציית מעקב המערכת. עיין בכלי שורת הפקודה Perfetto או בכלי שורת הפקודה של Systrace לאפשרויות אחרות.
הוספת אירועי מעקב בקוד Java
זהו קטע קוד מאפליקציית דוגמה לסיווג תמונות . מתורגמן TensorFlow Lite פועל בסעיף recognizeImage/runInference
. שלב זה הוא אופציונלי אך הוא שימושי כדי לעזור להבחין היכן מתבצעת שיחת ההסקה.
Trace.beginSection("recognizeImage");
...
// Runs the inference call.
Trace.beginSection("runInference");
tflite.run(inputImageBuffer.getBuffer(), outputProbabilityBuffer.getBuffer().rewind());
Trace.endSection();
...
Trace.endSection();
אפשר מעקב של TensorFlow Lite
כדי להפעיל מעקב של TensorFlow Lite, הגדר את מאפיין מערכת Android debug.tflite.trace
ל-1 לפני הפעלת אפליקציית Android.
adb shell setprop debug.tflite.trace 1
אם מאפיין זה הוגדר כאשר מתורגמן TensorFlow Lite מאותחל, יתבצע מעקב אחר אירועי מפתח (למשל, הפעלת מפעיל) מהמפרש.
לאחר שתפסת את כל העקבות, השבת את המעקב על ידי הגדרת ערך המאפיין ל-0.
adb shell setprop debug.tflite.trace 0
Android Studio CPU Profiler
לכיד עקבות עם Android Studio CPU Profiler על ידי ביצוע השלבים הבאים:
בחר הפעלה > פרופיל 'אפליקציה' מהתפריטים העליונים.
לחץ במקום כלשהו בציר הזמן של CPU כאשר חלון Profiler מופיע.
בחר 'מעקב אחר שיחות מערכת' בין מצבי פרופיל המעבד.
לחץ על כפתור 'הקלט'.
לחץ על כפתור 'עצור'.
חקור את תוצאת המעקב.
בדוגמה זו, אתה יכול לראות את ההיררכיה של אירועים בשרשור וסטטיסטיקות עבור כל זמן מפעיל וגם לראות את זרימת הנתונים של האפליקציה כולה בין השרשורים.
אפליקציית מעקב אחר מערכת
צלם עקבות ללא Android Studio על ידי ביצוע השלבים המפורטים באפליקציית מעקב מערכת .
בדוגמה זו, אותם אירועי TFLite נלכדו ונשמרו בפורמט Perfetto או Systrace בהתאם לגרסת מכשיר האנדרואיד. ניתן לפתוח את קבצי המעקב שנלכדו בממשק המשתמש של Perfetto .
עקבו אחר חלקים פנימיים של TensorFlow Lite ב-iOS
ניתן ללכוד אירועים פנימיים מהמתורגמן TensorFlow Lite של אפליקציית iOS באמצעות כלי Instruments הכלול ב-Xcode. הם אירועי השלט של iOS, כך שהאירועים שנלכדו מקוד Swift/Objective-C נראים יחד עם אירועים פנימיים של TensorFlow Lite.
כמה דוגמאות לאירועים הם:
- הזמנת מפעיל
- שינוי גרף על ידי נציג
- הקצאת טנזור
אפשר מעקב של TensorFlow Lite
הגדר את משתנה הסביבה debug.tflite.trace
על ידי ביצוע השלבים הבאים:
בחר מוצר > תכנית > ערוך תכנית... מהתפריטים העליונים של Xcode.
לחץ על 'פרופיל' בחלונית השמאלית.
בטל את הסימון בתיבת הסימון 'השתמש בארגומנטים ומשתני הסביבה של הפעולה הרץ'.
הוסף את
debug.tflite.trace
בקטע 'משתני סביבה'.
אם ברצונך לא לכלול אירועים של TensorFlow Lite בעת יצירת פרופיל של אפליקציית iOS, השבת את המעקב על ידי הסרת משתנה הסביבה.
XCode Instruments
ללכוד עקבות על ידי ביצוע השלבים הבאים:
בחר מוצר > פרופיל מהתפריטים העליונים של Xcode.
לחץ על רישום בין תבניות פרופיל כאשר הכלי Instruments מופעל.
לחץ על כפתור 'התחל'.
לחץ על כפתור 'עצור'.
לחץ על 'os_signpost' כדי להרחיב את פריטי תת-מערכת רישום מערכת ההפעלה.
לחץ על 'org.tensorflow.lite' מערכת תת-מערכת רישום מערכת הפעלה.
חקור את תוצאת המעקב.
בדוגמה זו, אתה יכול לראות את ההיררכיה של אירועים וסטטיסטיקות עבור כל זמן מפעיל.
שימוש בנתוני המעקב
נתוני המעקב מאפשרים לך לזהות צווארי בקבוק בביצועים.
הנה כמה דוגמאות לתובנות שתוכלו לקבל מהפרופילים ופתרונות פוטנציאליים לשיפור הביצועים:
- אם מספר ליבות ה-CPU הזמינות קטן ממספר פתילי ההסקה, תקורה של תזמון ה-CPU יכולה להוביל לביצועים נמוכים יותר. אתה יכול לתזמן מחדש משימות אינטנסיביות אחרות של CPU ביישום שלך כדי למנוע חפיפה להסקת המודל שלך או לצבוט את מספר שרשורי המתורגמנים.
- אם המפעילים אינם מואצים במלואם, אז חלקים מסוימים של גרף המודל מבוצעים על ה-CPU ולא על מאיץ החומרה הצפוי. אתה יכול להחליף את האופרטורים הלא נתמכים באופרטורים נתמכים דומים.