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

Toán tử cốt lõi TensorFlow

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

Toán tử Văn bản và Câu văn TensorFlow

TensorFlow Văn bản và Hỗ trợ các toán tử SentencePiece 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 biết cách chuyển đổi mô hình bằng 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ề thời gian chạy, bạn cũng phải liên kết Văn bản TensorFlow hoặc Thư viện Sentence Piece thành ứng dụng hoặc tệp nhị phân hoàn chỉnh.

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

Nếu bạn đã tạo TensorFlow của riêng mình toán tử, bạn cũng có thể chuyển đổi các mô hình chứa chúng vào LiteRT 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 phải liên kết thư viện toán tử với ứng dụng hoặc tệp nhị phân hoàn chỉnh.

Thêm các toán tử cố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ử cốt lõi TensorFlow không thuộc các trường hợp trên danh sách được phép, bạn có thể báo cáo yêu cầu về tính năng tại đây cùng với tên của Các toán tử cốt lõi TensorFlow không có trong danh sách được phép.

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

(1) Thêm mã nguồn hạt nhân của toán tử vào portable_extended_ops_group2 XÂY DỰNG quy tắc.

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

        ...
    ],
)

Để tìm tệp nguồn hạt nhân của toán tử có liên quan trong tensorflow/core/kernels, bạn có thể tìm kiếm vị trí của mã nguồn, chứa nội dung khai báo nhân sau đây kèm theo 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, bắt buộc trong mã nguồn hạt nhân 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 toán tử 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. Lõi TensorFlow cần liệt kê tên nhà vận hành để được phép thông qua tính năng Chọn TF .

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

        ...
    });

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

(3) Thêm tên toán tử vào trang hướng dẫn này.

Để cho các nhà phát triển khác thấy được tên nhà vận hành, trang hướng dẫn này phải cũng sẽ đượ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 LiteRT runtime with the Select TensorFlow Ops feature.

...
+*   `raw_ops.StringToNumber`
...

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