Основные операторы TensorFlow
Ниже приведен исчерпывающий список основных операций TensorFlow, которые поддерживаются средой выполнения LiteRT с помощью функции Select TensorFlow Ops.
raw_ops.TokenizerFromLogits
Операторы TensorFlow Text и SentencePiece
Следующие операторы TensorFlow Text и SentencePiece поддерживаются, если вы используете API Python для преобразования и импорта этих библиотек.
Операторы 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 , вы также можете преобразовать содержащие их модели в 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
в список разрешенных, есть три места для обновления, например этот коммит .
(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 должно быть указано в списке, чтобы его можно было разрешить с помощью опции «Выбрать 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`
...
Поскольку приведенный выше список отсортирован в алфавитном порядке, имя обязательно будет размещено в нужном месте.