تحديد مشغلي TensorFlow المدعومين

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

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

مشغلي نص TensorFlow و SentencePiece

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

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

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

عوامل الجملة:

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

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 rule كما يلي:

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

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