אופרטורים נבחרים של TensorFlow

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

בהמשך מופיעה רשימה מקיפה של פעולות הליבה של TensorFlow שנתמכות בסביבת זמן הריצה של LiteRT באמצעות התכונה Select TensorFlow Ops.

אופרטורים של טקסט ו- SentencePiece של TensorFlow

ב-TensorFlow הבא טקסט ו יש תמיכה באופרטורים של SentencePiece אם משתמשים ב-Python API להמרות ומייבאים את הספריות האלה.

אופרטורים של TF.Text:

  • CaseFoldUTF8
  • ConstrainedSequence
  • MaxSpanningTree
  • NormalizeUTF8
  • NormalizeUTF8WithOffsetsMap
  • RegexSplitWithOffsets
  • RougeL
  • SentenceFragments
  • SentencepieceOp
  • SentencepieceTokenizeOp
  • SentencepieceTokenizeWithOffsetsOp
  • SentencepieceDetokenizeOp
  • SentencepieceVocabSizeOp
  • SplitMergeTokenizeWithOffsets
  • UnicodeScriptTokenizeWithOffsets
  • WhitespaceTokenizeWithOffsets
  • WordpieceTokenizeWithOffsets

אופרטורים של SentencePiece:

  • SentencepieceGetPieceSize
  • SentencepiecePieceToId
  • SentencepieceIdToPiece
  • SentencepieceEncodeDense
  • SentencepieceEncodeSparse
  • SentencepieceDecode

בקטע הקוד הבא אפשר לראות איך להמיר מודלים באמצעות האופרטורים שלמעלה:

import tensorflow as tf
# These imports are required to load operators' definition.
import tensorflow_text as tf_text
import sentencepiece as spm

converter = tf.lite.TFLiteConverter.from_keras_model(your_model)
converter.target_spec.supported_ops = [
  tf.lite.OpsSet.TFLITE_BUILTINS, tf.lite.OpsSet.SELECT_TF_OPS
]
model_data = converter.convert()

בצד של סביבת זמן הריצה, הוא נדרש גם לקשר את טקסט TensorFlow את ספריית SentencePiece באפליקציה הסופית או בקובץ הבינארי.

האופרטורים המוגדרים על ידי המשתמש

אם יצרתם TensorFlow משלכם , אפשר גם להמיר שמכילים אותם ב-LiteRT על ידי ציון האופרטורים הנדרשים experimental_select_user_tf_ops בתור:

import tensorflow as tf

ops_module = tf.load_op_library('./your_ops_library.so')

converter = tf.lite.TFLiteConverter.from_saved_model(your_model)
converter.target_spec.supported_ops = [
  tf.lite.OpsSet.TFLITE_BUILTINS, tf.lite.OpsSet.SELECT_TF_OPS
]
converter.target_spec.experimental_select_user_tf_ops = [
    'your_op_name1',
    'your_op_name2'
]
model_data = converter.convert()

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

צריך להוסיף אופרטורים של ליבה של TensorFlow לרשימת ההיתרים.

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

אפשר גם ליצור בקשת משיכה משלכם מקוד המקור. לדוגמה, אם אתם רוצים להוסיף את הפעולה raw_ops.StringToNumber לרשימת ההיתרים, שלושה מקומות לעדכון הזה commit.

(1) מוסיפים את קוד המקור של הליבה של האופרטור ל-portable_extended_ops_group2 כלל BUILD.

filegroup(
    name = "portable_extended_ops_group2",
    srcs = [
        ...
+   "string_to_number_op.cc",

        ...
    ],
)

כדי למצוא את קובץ מקור הליבה של האופרטור הרלוונטי מתחת tensorflow/core/kernels, אפשר לחפש את המיקום של קוד המקור, שמכיל את הצהרת הליבה הבאה עם שם האופרטור:

REGISTER_KERNEL_BUILDER(Name("StringToNumber")                 \
                            .Device(DEVICE_CPU)                \
                            .TypeConstraint<type>("out_type"), \
                        StringToNumberOp<type>)

אם יש קובצי כותרת בספרייה tensorflow/core/kernels, נדרש בקוד המקור של הליבה (kernel) של האופרטור, צריך להוסיף את קובץ הכותרת לכלל portable_extended_ops_headers BUILD באופן הבא:

filegroup(
    name = "portable_extended_ops_headers",
    srcs = [
        ...
+   "string_util.h",

        ...
    ],
)

(2) מוסיפים את שם האופרטור לרשימת ההיתרים.

רשימת ההיתרים מוגדרת בקטע tensorflow/lite/delegates/flex/allowlisted_flex_ops.cc הליבה של TensorFlow יש לציין את שם המפעיל כדי לקבל אותו בלחיצה על TF כאפשרות.

static const std::set<std::string>* allowlisted_flex_ops =
    new std::set<std::string>({
        ...
+   "StringToNumber",

        ...
    });

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

(3) מוסיפים את שם האופרטור לדף המדריך הזה.

כדי להציג למפתחים האחרים את האפשרות לכלול את האופרטור, דף המדריך הזה צריך יעודכנו גם כן. הדף הזה נמצא ב tensorflow/lite/g3doc/guide/op_select_allowlist.md

## TensorFlow core operators

The following is an exhaustive list of TensorFlow core operations that are
supported by LiteRT runtime with the Select TensorFlow Ops feature.

...
+*   `raw_ops.StringToNumber`
...

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