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