תאימות למפעילים של LiteRT ו-TensorFlow

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

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

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

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

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

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

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

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

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

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

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

סוגים נתמכים

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

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

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

יש כמה פעולות TensorFlow שאפשר לעבד אפילו ב-LiteRT למרות שאין להם מקבילה ישירה. זה המצב כשמדובר בפעולות שיכולות פשוט יוסרו מהתרשים (tf.identity), יוחלפו בדגשונים (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

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

פעולות LiteRT הבאות קיימות, אבל לא מוכנות להתאמה אישית :

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