TensorFlow 核心運算子
下方列舉了詳盡的 TensorFlow 核心作業清單 LiteRT 執行階段支援「Select TensorFlow Ops」功能。
raw_ops.TokenizerFromLogits
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`
...
由於上方清單是按字母順序排序,因此務必將 然後放置圖片