지원되는 Select TensorFlow 연산자

주의: 연산자 목록은 자주 업데이트됩니다.

TensorFlow 핵심 연산자

다음은 TensorFlow Ops 선택 기능과 함께 TensorFlow Lite 런타임에서 지원하는 TensorFlow 핵심 연산자의 전체 목록입니다.

TensorFlow 텍스트 및 SentencePiece 연산자

변환에 Python API를 사용하고 해당 라이브러리를 가져오는 경우, 다음 TensorFlow TextSentencePiece 연산자가 지원됩니다.

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 2.5 버전에서만 사용할 수 있습니다.

고유한 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을 추가하려는 경우 이 커밋과 같이 업데이트할 위치가 세 곳 있습니다.

(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 BUILD 규칙에 추가해야 합니다.

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

        ...
    ],
)

(2) 허용 목록에 연산자 이름을 추가합니다.

허용 목록은 tensorflow/lite/delegates/flex/allowlisted_flex_ops.cc에 정의되어 있습니다. TF 선택 옵션을 통해 허용하려면 TensorFlow 핵심 연산자 이름을 나열해야 합니다.

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

위의 목록은 알파벳 순으로 정렬되어 있으므로 이름이 올바른 위치에 있는지 확인합니다.