支援的 Select TensorFlow 運算子

TensorFlow 核心運算子

下方列舉了詳盡的 TensorFlow 核心作業清單 LiteRT 執行階段支援「Select TensorFlow Ops」功能。

TensorFlow Text 和 SentencePiece 運算子

下列 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 Text 或 將 SentencePiece 程式庫寫入最終應用程式或二進位檔。

使用者定義的運算子

如果您建立自己的 TensorFlow 運算子,也可以將 方法是列出必要運算子, 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 目錄底下有任何標頭檔案, 您需要新增標頭檔案 轉換為 portable_extended_ops_headers 建構規則,如下所示:

filegroup(
    name = "portable_extended_ops_headers",
    srcs = [
        ...
+   "string_util.h",

        ...
    ],
)

(2) 將業者名稱加入允許清單。

允許清單是 tensorflow/lite/delegates/flex/allowlisted_flex_ops.cc。TensorFlow 核心 必須列出運算子名稱,才能透過 Select TF 使用 如果有需要 SQL 指令的分析工作負載 則 BigQuery 可能是最佳選擇

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`
...

由於上方清單是按字母順序排序,因此務必將 然後放置圖片