پشتیبانی از اپراتورهای انتخابی TensorFlow

عملگرهای هسته TensorFlow

در زیر لیست کاملی از عملیات هسته TensorFlow است که توسط TensorFlow Lite با ویژگی Select TensorFlow Ops پشتیبانی می شود.

عملگرهای 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 ، مدل‌های حاوی آنها را به TensorFlow Lite تبدیل کنید:

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 TensorFlow Lite runtime with the Select TensorFlow Ops feature.

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

از آنجایی که لیست بالا به ترتیب حروف الفبا مرتب شده است، مطمئن شوید که نام را در جای مناسب قرار دهید.