دعم تحديد مشغلي TensorFlow

مشغلي TensorFlow الأساسيين

فيما يلي قائمة شاملة بعمليات TensorFlow الأساسية التي يدعمها وقت تشغيل TensorFlow Lite مع ميزة Select TensorFlow Ops.

مشغلي TensorFlow Text وSentencePiece

يتم دعم عوامل تشغيل TensorFlow Text و SentencePiece التالية إذا كنت تستخدم Python API لتحويل هذه المكتبات واستيرادها.

عوامل تشغيل نص TF:

  • 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 الخاصة بك ، فيمكنك أيضًا تحويل النماذج التي تحتوي عليها إلى TensorFlow Lite عن طريق إدراج عوامل التشغيل المطلوبة في 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 op إلى القائمة المسموح بها، فهناك ثلاثة أماكن للتحديث مثل هذا الالتزام .

(1) قم بإضافة الكود المصدري لنواة المشغل إلى قاعدة BUILD portable_extended_ops_group2 ops_group2.

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

        ...
    ],
)

من أجل العثور على ملف مصدر kernel للمشغل ذي الصلة ضمن دليل tensorflow/core/kernels ، يمكنك البحث في موقع التعليمات البرمجية المصدر، والذي يحتوي على إعلان kernel التالي مع اسم المشغل:

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

إذا كان هناك أي ملفات رأس ضمن دليل tensorflow/core/kernels ، مطلوبة في كود مصدر kernel للمشغل، فأنت بحاجة إلى إضافة ملف الرأس إلى قاعدة portable_extended_ops_headers BUILD كما يلي:

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

        ...
    ],
)

(2) أضف اسم المشغل إلى القائمة المسموح بها.

يتم تعريف القائمة المسموح بها في tensorflow/lite/delegates/flex/allowlisted_flex_ops.cc . يلزم إدراج اسم المشغل الأساسي TensorFlow حتى يُسمح له من خلال خيار Select TF.

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

بما أن القائمة أعلاه مرتبة أبجديًا، فإنه يتم التأكد من وضع الاسم في المكان الصحيح.