מפעילי TensorFlow נבחרים נתמכים

מפעילי ליבה של TensorFlow

להלן רשימה ממצה של פעולות הליבה של TensorFlow הנתמכות על ידי זמן ריצה של TensorFlow Lite עם התכונה Select TensorFlow Ops.

אופרטורים של TensorFlow Text ו-SenencePiece

האופרטורים הבאים של TensorFlow Text ו- SenencePiece נתמכים אם אתה משתמש ב-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 Text או SentencePiece לאפליקציה הסופית או הבינארית.

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

אם יצרת אופרטורים של TensorFlow משלך , תוכל גם להמיר מודלים המכילים אותם ל-TensorFlow Lite על ידי רישום האופרטורים הנדרשים ב- 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) הוסף את קוד המקור של ליבת המפעיל לכלל BUILD portable_extended_ops_group2 .

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 , הנדרשים בקוד המקור של ליבת המפעיל, עליך להוסיף את קובץ הכותרת לכלל BUILD portable_extended_ops_headers באופן הבא:

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

        ...
    ],
)

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

הרשימה המותרת מוגדרת ב- tensorflow/lite/delegates/flex/allowlisted_flex_ops.cc . יש לרשום את שם אופרטור הליבה של TensorFlow כדי להיות מורשה דרך האפשרות Select 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 TensorFlow Lite runtime with the Select TensorFlow Ops feature.

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

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