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

קל לארגן דפים בעזרת אוספים אפשר לשמור ולסווג תוכן על סמך ההעדפות שלך.

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

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

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

מפעילים נתמכים

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

מפעילי TensorFlow

מתוך מגוון זה של מפעילי מודל ML, ישנם 3 סוגי מודלים הנתמכים על ידי תהליך ההמרה:

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

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

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

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

סוגים נתמכים

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

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

המרות ישרות קדימה, קיפול מתמיד והיתוך

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

הנה רשימה לא ממצה של פעולות TensorFlow שבדרך כלל מוסרות מהגרף:

פעולות ניסוי

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

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