โอเปอเรเตอร์หลักของ TensorFlow
ต่อไปนี้คือรายการการดำเนินการหลักของ TensorFlow อย่างละเอียด รองรับโดยรันไทม์ LiteRT ที่มีฟีเจอร์ Select TensorFlow Ops
raw_ops.TokenizerFromLogits
โอเปอเรเตอร์ TensorFlow Text และ SentencePiece
TensorFlow ต่อไปนี้ ข้อความ และ รองรับโอเปอเรเตอร์ SentencePiece หากคุณใช้ Python API ในการแปลงและนำเข้าไลบรารีเหล่านั้น
โอเปอเรเตอร์ 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 หรือ ไลบรารี SentencePiece ลงในแอปหรือไบนารีสุดท้าย
โอเปอเรเตอร์ที่ผู้ใช้กำหนด
หากคุณสร้าง TensorFlow ของคุณเอง
โอเปอเรเตอร์คุณยังสามารถแปลง
ที่มีตัวระบุดังกล่าวไปยัง LiteRT โดยระบุโอเปอเรเตอร์ที่จำเป็นใน
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
ในรายการที่อนุญาต
สามแห่งที่อัปเดตแบบนี้
commit
(1) เพิ่มซอร์สโค้ดเคอร์เนลของโอเปอเรเตอร์ไปยัง portable_extended_ops_group2
สร้างกฎ
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
แกน 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 LiteRT runtime with the Select TensorFlow Ops feature.
...
+* `raw_ops.StringToNumber`
...
เนื่องจากรายการด้านบนมีการจัดเรียงตามลำดับตัวอักษร จึงสามารถวาง ในตำแหน่งที่ถูกต้อง