Được hỗ trợ Chọn toán tử TensorFlow

Toán tử lõi TensorFlow

Sau đây là danh sách đầy đủ các hoạt động cốt lõi của TensorFlow được hỗ trợ bởi thời gian chạy TensorFlow Lite với tính năng Chọn TensorFlow Ops.

Toán tử TensorFlow Text và SentencePiece

Các toán tử TensorFlow TextSentencePiece sau đây được hỗ trợ nếu bạn sử dụng API Python để chuyển đổi và nhập các thư viện đó.

Toán tử TF.Text:

  • CaseFoldUTF8
  • ConstrainedSequence
  • MaxSpanningTree
  • NormalizeUTF8
  • NormalizeUTF8WithOffsetsMap
  • RegexSplitWithOffsets
  • RougeL
  • SentenceFragments
  • SentencepieceOp
  • SentencepieceTokenizeOp
  • SentencepieceTokenizeWithOffsetsOp
  • SentencepieceDetokenizeOp
  • SentencepieceVocabSizeOp
  • SplitMergeTokenizeWithOffsets
  • UnicodeScriptTokenizeWithOffsets
  • WhitespaceTokenizeWithOffsets
  • WordpieceTokenizeWithOffsets

Toán tử SentencePiece:

  • SentencepieceGetPieceSize
  • SentencepiecePieceToId
  • SentencepieceIdToPiece
  • SentencepieceEncodeDense
  • SentencepieceEncodeSparse
  • SentencepieceDecode

Đoạn mã sau đây cho thấy cách chuyển đổi mô hình với các toán tử trên:

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()

Về phía thời gian chạy, cũng cần phải liên kết thư viện TensorFlow Text hoặc SentencePiece với ứng dụng hoặc tệp nhị phân cuối cùng.

Toán tử do người dùng xác định

Nếu bạn đã tạo toán tử TensorFlow của riêng mình , bạn cũng có thể chuyển đổi các mô hình chứa chúng thành TensorFlow Lite bằng cách liệt kê các toán tử bắt buộc trong experimental_select_user_tf_ops như sau:

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()

Về phía thời gian chạy, bạn cũng cần phải liên kết thư viện toán tử của mình với ứng dụng hoặc tệp nhị phân cuối cùng.

Thêm toán tử lõi TensorFlow vào danh sách được phép.

Nếu bạn gặp trường hợp các toán tử lõi TensorFlow không có trong danh sách được phép ở trên, bạn có thể báo cáo yêu cầu tính năng tại đây với tên của các toán tử lõi TensorFlow, không được liệt kê trong danh sách được phép.

Bạn cũng có thể tạo yêu cầu kéo của riêng mình từ mã nguồn. Ví dụ: nếu bạn muốn thêm raw_ops.StringToNumber op vào danh sách được phép, có ba nơi để cập nhật như cam kết này.

(1) Thêm mã nguồn kernel của toán tử vào quy tắc BUILD portable_extended_ops_group2 .

filegroup(
    name = "portable_extended_ops_group2",
    srcs = [
        ...
+       "string_to_number_op.cc",

        ...
    ],
)

Để tìm tệp nguồn kernel của toán tử có liên quan trong thư mục tensorflow/core/kernels , bạn có thể tìm kiếm vị trí mã nguồn chứa khai báo kernel sau với tên toán tử:

REGISTER_KERNEL_BUILDER(Name("StringToNumber")                 \
                            .Device(DEVICE_CPU)                \
                            .TypeConstraint<type>("out_type"), \
                        StringToNumberOp<type>)

Nếu có bất kỳ tệp tiêu đề nào trong thư mục tensorflow/core/kernels , được yêu cầu trong mã nguồn kernel của toán tử, bạn cần thêm tệp tiêu đề vào quy tắc BUILD portable_extended_ops_headers như sau:

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

        ...
    ],
)

(2) Thêm tên nhà điều hành vào danh sách được phép.

Danh sách được phép được xác định trong tensorflow/lite/delegates/flex/allowlisted_flex_ops.cc . Tên toán tử lõi TensorFlow cần phải được liệt kê để được phép thông qua tùy chọn Chọn TF.

static const std::set<std::string>* allowlisted_flex_ops =
    new std::set<std::string>({
        ...
+       "StringToNumber",

        ...
    });

Vì danh sách trên được sắp xếp theo thứ tự bảng chữ cái nên đảm bảo đặt tên vào đúng vị trí.

(3) Thêm tên nhà điều hành vào trang hướng dẫn này.

Để hiển thị sự tham gia của nhà điều hành cho các nhà phát triển khác, trang hướng dẫn này cũng phải được cập nhật. Trang này nằm ở 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`
...

Vì danh sách trên được sắp xếp theo thứ tự bảng chữ cái nên đảm bảo đặt tên vào đúng vị trí.