האופרטורים של למידת מכונה (ML) שבהם אתם משתמשים במודל יכולים להשפיע תהליך המרה ממודל TensorFlow לפורמט LiteRT. ממיר LiteRT תומך במספר מוגבל של פעולות TensorFlow שנמצאות בשימוש משותף כלומר, לא כל מודל ניתן להמרה באופן ישיר. כלי הממיר מאפשר לכלול אופרטורים נוספים, אבל לבצע המרה מודל כזה דורש גם לשנות את זמן הריצה של LiteRT שבה משתמשים כדי להפעיל את המודל, מה שעלול להגביל את היכולת שלך להשתמש באפשרויות סטנדרטיות לפריסה בסביבת זמן ריצה, כמו Google Play Services.
ממיר LiteRT נועד לנתח מודל לבנות וליישם אופטימיזציות כדי שהוא יתאים אופרטורים שנתמכים באופן ישיר. לדוגמה, בהתאם לאופרטורים של למידת מכונה של המודל, הממיר עשוי להסיר או למזג אותם כדי למפות אותם למקבילות שלהם ב-LiteRT.
גם לפעולות נתמכות, לפעמים צפויים דפוסי שימוש ספציפיים מסיבות של ביצועים. הדרך הטובה ביותר להבין איך לפתח TensorFlow שאפשר להשתמש בו יחד עם LiteRT הוא לבחון בקפידה את האופן שבו מתבצעת המרה של פעולות לבצע אופטימיזציה בנוסף למגבלות שהתהליך הזה מטיל.
אופרטורים נתמכים
האופרטורים המובנים של LiteRT הם קבוצת משנה של האופרטורים שהם חלק מספריית הליבה של TensorFlow. יכול להיות שמודל TensorFlow לכלול גם אופרטורים מותאמים אישית בצורת אופרטורים מורכבים או אופרטורים חדשים שהגדרתם. בתרשים הבא מוצגים קשרי הגומלין בין האופרטורים האלה.
בטווח האופרטורים של מודלים של למידת מכונה יש 3 סוגים של מודלים הנתמכים בתהליך ההמרה:
- בדגמים שבהם פועל רק מפעיל מובנה של LiteRT. (מומלץ)
- מודלים עם האופרטורים המובנים ובוחרים את TensorFlow אופרטורים של ליבה.
- מודלים עם האופרטורים המובנים, האופרטורים הליבה של 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