אופרטורים של ליבה של TensorFlow
בהמשך מופיעה רשימה מקיפה של פעולות הליבה של TensorFlow שנתמכות בסביבת זמן הריצה של LiteRT באמצעות התכונה Select TensorFlow Ops.
raw_ops.TokenizerFromLogits
אופרטורים של טקסט ו- SentencePiece של TensorFlow
ב-TensorFlow הבא טקסט ו יש תמיכה באופרטורים של SentencePiece אם משתמשים ב-Python API להמרות ומייבאים את הספריות האלה.
אופרטורים של TF.Text:
CaseFoldUTF8ConstrainedSequenceMaxSpanningTreeNormalizeUTF8NormalizeUTF8WithOffsetsMapRegexSplitWithOffsetsRougeLSentenceFragmentsSentencepieceOpSentencepieceTokenizeOpSentencepieceTokenizeWithOffsetsOpSentencepieceDetokenizeOpSentencepieceVocabSizeOpSplitMergeTokenizeWithOffsetsUnicodeScriptTokenizeWithOffsetsWhitespaceTokenizeWithOffsetsWordpieceTokenizeWithOffsets
אופרטורים של SentencePiece:
SentencepieceGetPieceSizeSentencepiecePieceToIdSentencepieceIdToPieceSentencepieceEncodeDenseSentencepieceEncodeSparseSentencepieceDecode
בקטע הקוד הבא אפשר לראות איך להמיר מודלים באמצעות האופרטורים שלמעלה:
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`
...
מאחר שהרשימה שלמעלה ממוינת בסדר אלפביתי, חשוב להציב את במקום הנכון.