תאימות של מפעילי TensorFlow Lite ו-TensorFlow

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

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

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

אופרטורים נתמכים

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

אופרטורים של TensorFlow

יש 3 סוגים של מודלים שנתמכים בתהליך ההמרה מתוך טווח האופרטורים של מודלים של למידת מכונה:

  1. דגמים עם מפעיל מובנה ב-TensorFlow Lite בלבד. (מומלץ)
  2. מודלים עם האופרטורים המובנים ואופרטורים נבחרים של TensorFlow.
  3. מודלים עם אופרטורים מובנים, אופרטורים של ליבה של TensorFlow ו/או אופרטורים בהתאמה אישית.

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

אם אתם צריכים לכלול פעולות נבחרות של TensorFlow מספריית הליבה, עליכם לציין זאת בזמן ההמרה ולוודא שזמן הריצה כולל את הפעולות האלה. למידע מפורט, ראו את הנושא Select TensorFlow commands (בחירת אופרטורים של TensorFlow).

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

סוגים נתמכים

רוב הפעולות ב-TensorFlow Lite מיועדות להסקת מסקנות על בסיס נקודה צפה (float32) וגם להסקת כמות (uint8, int8), אבל הרבה פעולות עדיין לא מסוגים אחרים, כמו tf.float16 ומחרוזות.

מלבד השימוש בגרסאות שונות של הפעולות, ההבדל השני בין מודלים של נקודה צפה (floating-point) לבין מודל קוונטיזציה הוא אופן ההמרה שלהם. כדי לבצע המרה כמותית נדרש מידע על הטווח הדינמי של רכיבי ה-tensor. כדי לעשות את זה צריך לבצע "קוונטיזציה מזויפת" במהלך אימון המודל, לקבל מידע על טווח באמצעות קבוצת נתונים כיול או לבצע הערכה של טווח בזמן אמת. פרטים נוספים זמינים במאמר קוונטיזציה.

המרות ישירות, קיפול קבוע והיכה

TensorFlow Lite יכול לעבד כמה פעולות ב-TensorFlow Lite, אפילו שאין להן מקבילה ישירה. זה נכון לגבי פעולות שאפשר פשוט להסיר מהתרשים (tf.identity), להחליף ברכיבי Tensors (tf.placeholder) או למזג אותם לפעולות מורכבות יותר (tf.nn.bias_add). לפעמים יכול להיות שפעולות נתמכות מסוימות יוסרו באמצעות אחד מהתהליכים האלה.

ריכזנו כאן רשימה חלקית של פעולות TensorFlow שבדרך כלל מוסרות מהתרשים:

  • tf.add
  • tf.debugging.check_numerics
  • tf.constant
  • tf.div
  • tf.divide
  • tf.fake_quant_with_min_max_args
  • tf.fake_quant_with_min_max_vars
  • tf.identity
  • tf.maximum
  • tf.minimum
  • tf.multiply
  • tf.no_op
  • tf.placeholder
  • tf.placeholder_with_default
  • tf.realdiv
  • tf.reduce_max
  • tf.reduce_min
  • tf.reduce_sum
  • tf.rsqrt
  • tf.shape
  • tf.sqrt
  • tf.square
  • tf.subtract
  • tf.tile
  • tf.nn.batch_norm_with_global_normalization
  • tf.nn.bias_add
  • tf.nn.fused_batch_norm
  • tf.nn.relu
  • tf.nn.relu6

פעולות ניסיוניות

הפעולות הבאות ב-TensorFlow Lite כבר קיימות, אבל הן לא מוכנות למודלים בהתאמה אישית:

  • CALL
  • CONCAT_EMBEDDINGS
  • CUSTOM
  • EMBEDDING_LOOKUP_SPARSE
  • HASHTABLE_LOOKUP
  • LSH_PROJECTION
  • SKIP_GRAM
  • SVDF