عملگرهای هسته TensorFlow
در زیر لیست کاملی از عملیات هسته TensorFlow است که توسط LiteRT با ویژگی Select TensorFlow Ops پشتیبانی می شود.
raw_ops.TokenizerFromLogits
عملگرهای TensorFlow Text و SentencePiece
اپراتورهای TensorFlow Text و 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 Text یا کتابخانه SentencePiece را به برنامه نهایی یا باینری پیوند دهید.
اپراتورهای تعریف شده توسط کاربر
اگر عملگرهای TensorFlow خود را ایجاد کردهاید ، میتوانید با فهرست کردن عملگرهای مورد نیاز در experimental_select_user_tf_ops
، مدلهای حاوی آنها را به LiteRT تبدیل کنید:
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
وجود دارد که در کد منبع هسته اپراتور مورد نیاز است، باید فایل هدر را به قانون 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 باید لیست شود تا از طریق گزینه 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 LiteRT runtime with the Select TensorFlow Ops feature.
...
+* `raw_ops.StringToNumber`
...
از آنجایی که لیست بالا به ترتیب حروف الفبا مرتب شده است، مطمئن شوید که نام را در جای مناسب قرار دهید.