เนื่องจากไลบรารีโอเปอเรเตอร์ LiteRT ในตัวรองรับเฉพาะ จำนวนโอเปอเรเตอร์ TensorFlow ไม่ใช่บางโมเดลที่แปลงได้ โปรดดูรายละเอียด ดูความเข้ากันได้ของโอเปอเรเตอร์
หากต้องการอนุญาตการแปลง ผู้ใช้สามารถเปิดใช้งานการใช้งาน TensorFlow บางอย่าง Ops ในโมเดล LiteRT อย่างไรก็ตาม การใช้ โมเดล LiteRT ที่มีการดำเนินการ TensorFlow ต้องมีการดึงแกน รันไทม์ของ TensorFlow ซึ่งจะเพิ่มขนาดไบนารีของอินเทอร์พรีเตอร์ LiteRT สำหรับ Android คุณหลีกเลี่ยงปัญหานี้ได้โดยการเลือกสร้างเฉพาะ Tensorflow ที่จำเป็น การดำเนินการ ดูรายละเอียดได้ที่ลดไบนารี ขนาด
เอกสารนี้สรุปวิธีแปลง เรียกใช้โมเดล LiteRT ที่มี TensorFlow Ops บน แพลตฟอร์มที่คุณเลือก และจะพูดถึงประสิทธิภาพและขนาด เมตริกและข้อจำกัดที่ทราบ
แปลงโมเดล
ตัวอย่างต่อไปนี้แสดงวิธีสร้างโมเดล LiteRT โดยเลือก Ops ของ TensorFlow
import tensorflow as tf
converter = tf.lite.TFLiteConverter.from_saved_model(saved_model_dir)
converter.target_spec.supported_ops = [
tf.lite.OpsSet.TFLITE_BUILTINS, # enable LiteRT ops.
tf.lite.OpsSet.SELECT_TF_OPS # enable TensorFlow ops.
]
tflite_model = converter.convert()
open("converted_model.tflite", "wb").write(tflite_model)
เรียกใช้การอนุมาน
เมื่อใช้โมเดล LiteRT ที่มีการแปลงโดยรองรับ เลือกการดำเนินการของ TensorFlow ไคลเอ็นต์ต้องใช้รันไทม์ LiteRT ที่ มีไลบรารีที่จำเป็นของ TensorFlow Ops
AAR ของ Android
หากต้องการลดขนาดไบนารี โปรดสร้างไฟล์ AAR ที่กำหนดเองตามคำแนะนําใน ส่วนถัดไป หากขนาดไบนารีไม่ใช่ เราขอแนะนำให้ใช้ AAR พร้อม TensorFlow ที่มีการสร้างขึ้นล่วงหน้า โฮสต์ที่ MavenCentral.
คุณระบุข้อมูลนี้ในทรัพยากร Dependency ของ build.gradle
ได้โดยเพิ่มไปพร้อมๆ กัน
LiteRT AAR มาตรฐานดังต่อไปนี้
dependencies {
implementation 'org.tensorflow:tensorflow-lite:0.0.0-nightly-SNAPSHOT'
// This dependency adds the necessary TF op support.
implementation 'org.tensorflow:tensorflow-lite-select-tf-ops:0.0.0-nightly-SNAPSHOT'
}
หากต้องการใช้สแนปชอตยามค่ำคืน ให้ตรวจสอบว่าคุณได้เพิ่มสแนปชอต Sponatype แล้ว ที่เก็บ
เมื่อเพิ่มทรัพยากร Dependency แล้ว ผู้รับมอบสิทธิ์ที่จำเป็นต่อการจัดการ ควรติดตั้ง TensorFlow ของกราฟโดยอัตโนมัติสำหรับกราฟที่ต้องใช้ ให้พวกเขา
หมายเหตุ: ทรัพยากร Dependency ของ TensorFlow ค่อนข้างใหญ่
ต้องการกรอง ABI x86 ที่ไม่จำเป็นในไฟล์ .gradle
ออกโดยการตั้งค่า
abiFilters
android {
defaultConfig {
ndk {
abiFilters 'armeabi-v7a', 'arm64-v8a'
}
}
}
การสร้าง Android AAR
สำหรับการลดขนาดไบนารีหรือกรณีขั้นสูงอื่นๆ คุณยังสามารถสร้าง ไลบรารีด้วยตนเองได้อีกด้วย สมมติว่าบิลด์ LiteRT ที่ใช้งานได้ สภาพแวดล้อม สร้าง Android AAR ที่มีการเลือก TensorFlow เป็น ดังต่อไปนี้:
sh tensorflow/lite/tools/build_aar.sh \
--input_models=/a/b/model_one.tflite,/c/d/model_two.tflite \
--target_archs=x86,x86_64,arm64-v8a,armeabi-v7a
การดำเนินการนี้จะสร้างไฟล์ AAR bazel-bin/tmp/tensorflow-lite.aar
สำหรับ
LiteRT ในตัวและระบบปฏิบัติการที่กำหนดเอง และสร้างไฟล์ AAR
bazel-bin/tmp/tensorflow-lite-select-tf-ops.aar
สำหรับการดำเนินการของ TensorFlow หากคุณ
ไม่มีสภาพแวดล้อมของบิลด์ที่ใช้งานได้ คุณยังสามารถสร้างไฟล์เหนือไฟล์ด้วย
Docker
จากที่นั่น คุณจะนำเข้าไฟล์ AAR ไปยังโปรเจ็กต์โดยตรง หรือ เผยแพร่ไฟล์ AAR ที่กําหนดเองไปยังที่เก็บ Maven ในเครื่องของคุณ โดยทำดังนี้
mvn install:install-file \
-Dfile=bazel-bin/tmp/tensorflow-lite.aar \
-DgroupId=org.tensorflow \
-DartifactId=tensorflow-lite -Dversion=0.1.100 -Dpackaging=aar
mvn install:install-file \
-Dfile=bazel-bin/tmp/tensorflow-lite-select-tf-ops.aar \
-DgroupId=org.tensorflow \
-DartifactId=tensorflow-lite-select-tf-ops -Dversion=0.1.100 -Dpackaging=aar
สุดท้าย ในbuild.gradle
ของแอป ตรวจสอบว่าคุณมีmavenLocal()
และแทนที่ทรัพยากร Dependency แบบ LiteRT มาตรฐานด้วย
รองรับการดำเนินการ TensorFlow ที่เลือก:
allprojects {
repositories {
mavenCentral()
maven { // Only for snapshot artifacts
name 'ossrh-snapshot'
url 'https://oss.sonatype.org/content/repositories/snapshots'
}
mavenLocal()
}
}
dependencies {
implementation 'org.tensorflow:tensorflow-lite:0.1.100'
implementation 'org.tensorflow:tensorflow-lite-select-tf-ops:0.1.100'
}
iOS
การใช้ CocoaPods
LiteRT มอบ CocoaPods สำหรับ TF Ops บางรายการที่สร้างไว้ล่วงหน้าทุกคืนสำหรับ arm64
ซึ่งคุณสามารถใช้ควบคู่กับ TensorFlowLiteSwift
หรือ
CocoaPods TensorFlowLiteObjC
รายการ
หมายเหตุ: หากคุณต้องการใช้การดำเนินการ TF ที่เลือกในเครื่องจำลอง x86_64
คุณสามารถสร้าง
เลือกเฟรมเวิร์กการดำเนินการด้วยตนเอง ดูการใช้ Bazel + Xcode
เพื่อดูรายละเอียดเพิ่มเติม
# In your Podfile target:
pod 'TensorFlowLiteSwift' # or 'TensorFlowLiteObjC'
pod 'TensorFlowLiteSelectTfOps', '~> 0.0.1-nightly'
หลังจากเรียกใช้ pod install
คุณต้องแจ้ง Flager เพิ่มเติมสำหรับ
บังคับโหลดเฟรมเวิร์ก TF Ops ที่เลือกลงในโปรเจ็กต์ของคุณ ในโปรเจ็กต์ Xcode
ไปที่ Build Settings
-> Other Linker Flags
และเพิ่ม:
สำหรับเวอร์ชัน >= 2.9.0:
-force_load $(SRCROOT)/Pods/TensorFlowLiteSelectTfOps/Frameworks/TensorFlowLiteSelectTfOps.xcframework/ios-arm64/TensorFlowLiteSelectTfOps.framework/TensorFlowLiteSelectTfOps
สำหรับเวอร์ชัน < 2.9.0:
-force_load $(SRCROOT)/Pods/TensorFlowLiteSelectTfOps/Frameworks/TensorFlowLiteSelectTfOps.framework/TensorFlowLiteSelectTfOps
คุณจึงสามารถเรียกใช้โมเดลที่แปลงด้วย SELECT_TF_OPS
ใน
แอป iOS ของคุณ เช่น คุณสามารถแก้ไขการจัดประเภทรูปภาพสำหรับ iOS
แอป
เพื่อทดสอบฟีเจอร์การดำเนินการของ TF ที่เลือก
- แทนที่ไฟล์โมเดลด้วยไฟล์ที่แปลงพร้อมเปิดใช้
SELECT_TF_OPS
- เพิ่มการอ้างอิง
TensorFlowLiteSelectTfOps
ไปยังPodfile
ตามวิธีการ - เพิ่มแฟล็ก Linker เพิ่มเติมตามด้านบน
- เรียกใช้แอปตัวอย่างและดูว่าโมเดลทำงานได้อย่างถูกต้องหรือไม่
การใช้ Bazel + Xcode
LiteRT กับการดำเนินการ TensorFlow ที่เลือกสำหรับ iOS สร้างได้โดยใช้ Bazel
ขั้นแรก ให้ทำตามวิธีการของบิลด์ iOS เพื่อกำหนดค่า
Bazel Workspace และไฟล์ .bazelrc
อย่างถูกต้อง
เมื่อคุณกำหนดค่าพื้นที่ทำงานที่เปิดใช้การสนับสนุน iOS แล้ว คุณสามารถใช้
ต่อไปนี้เพื่อสร้างเฟรมเวิร์กส่วนเสริม TF Ops ซึ่งสามารถเพิ่มได้
เพิ่มเติมจาก TensorFlowLiteC.framework
ปกติ โปรดทราบว่าการดำเนินการของ TF ที่เลือก
สร้างเฟรมเวิร์กสำหรับสถาปัตยกรรม i386
ไม่ได้ คุณจึงต้องดำเนินการ
ระบุรายการสถาปัตยกรรมเป้าหมายโดยยกเว้น i386
bazel build -c opt --config=ios --ios_multi_cpus=arm64,x86_64 \
//tensorflow/lite/ios:TensorFlowLiteSelectTfOps_framework
การดำเนินการนี้จะสร้างเฟรมเวิร์กภายใต้ bazel-bin/tensorflow/lite/ios/
ไดเรกทอรี คุณสามารถเพิ่มเฟรมเวิร์กใหม่นี้ลงในโปรเจ็กต์ Xcode ของคุณโดยทำตามขั้นตอนต่อไปนี้
ขั้นตอนที่คล้ายกันซึ่งอธิบายไว้ในหัวข้อโครงการ Xcode
การตั้งค่าใน
คู่มือการสร้าง iOS
หลังจากเพิ่มเฟรมเวิร์กลงในโปรเจ็กต์แอปแล้ว แฟล็ก Linker เพิ่มเติม
ควรระบุในโปรเจ็กต์แอปเพื่อบังคับให้โหลดการดำเนินการ TF ที่เลือก
ในโปรเจ็กต์ Xcode ให้ไปที่ Build Settings
-> Other Linker
Flags
และเพิ่ม:
-force_load <path/to/your/TensorFlowLiteSelectTfOps.framework/TensorFlowLiteSelectTfOps>
C/C++
หากคุณใช้ Bazel หรือ CMake เพื่อสร้าง LiteRT ล่าม คุณเปิดใช้ตัวแทน Flex ได้โดยลิงก์ LiteRT Flex มอบสิทธิ์ไลบรารีที่ใช้ร่วมกัน คุณสร้างช่องดังกล่าวได้โดยใช้ Bazel ตามคำสั่งต่อไปนี้
bazel build -c opt --config=monolithic tensorflow/lite/delegates/flex:tensorflowlite_flex
คำสั่งนี้สร้างไลบรารีที่ใช้ร่วมกันต่อไปนี้ใน
bazel-bin/tensorflow/lite/delegates/flex
แพลตฟอร์ม | ชื่อห้องสมุด |
---|---|
Linux | libtensorflowlite_flex.so |
macOS | libtensorflowlite_flex.dylib |
Windows | tensorflowlite_flex.dll |
โปรดทราบว่า TfLiteDelegate
ที่จำเป็นจะได้รับการติดตั้งโดยอัตโนมัติเมื่อ
สร้างล่ามขณะรันไทม์ตราบใดที่มีการลิงก์ไลบรารีที่ใช้ร่วมกัน ทั้งนี้
ไม่จำเป็นต้องติดตั้งอินสแตนซ์ที่มอบสิทธิ์อย่างชัดเจนเหมือนโดยทั่วไป
ที่จำเป็นสำหรับผู้รับมอบสิทธิ์ประเภทอื่นๆ
หมายเหตุ: ฟีเจอร์นี้มีให้บริการตั้งแต่เวอร์ชัน 2.7
Python
LiteRT ที่มีการดำเนินการ TensorFlow ที่เลือกจะติดตั้งโดยอัตโนมัติด้วย แพ็กเกจ PIP ของ TensorFlow คุณสามารถ หรือเลือกติดตั้งเฉพาะ PIP ของ LiteRT Interpreter แพ็กเกจ
เมตริก
ประสิทธิภาพ
เมื่อใช้การดำเนินการทั้ง 2 แบบในตัวและการเลือก TensorFlow ร่วมกัน ทั้งหมดนี้จะทำงานเหมือนกัน การเพิ่มประสิทธิภาพ LiteRT และการดำเนินการที่ได้รับการเพิ่มประสิทธิภาพในตัวจะพร้อมใช้งาน และ ใช้ได้กับโมเดลที่แปลงแล้ว
ตารางต่อไปนี้อธิบายเวลาเฉลี่ยที่ใช้ในการเรียกใช้การอนุมาน
MobileNet บน Pixel 2 เวลาที่แสดงคือการวิ่งโดยเฉลี่ย 100 ครั้ง เหล่านี้
เป้าหมายที่สร้างขึ้นสำหรับ Android โดยใช้ค่าสถานะ: --config=android_arm64 -c opt
สร้าง | เวลา (มิลลิวินาที) |
---|---|
การดำเนินการในตัวเท่านั้น (TFLITE_BUILTIN ) |
260.7 |
การใช้เพียงการดำเนินการของ TF เท่านั้น (SELECT_TF_OPS ) |
264.5 |
ขนาดไบนารี
ตารางต่อไปนี้อธิบายขนาดไบนารีของ LiteRT สำหรับแต่ละบิลด์
เป้าหมายเหล่านี้สร้างขึ้นสำหรับ Android โดยใช้ --config=android_arm -c opt
สร้าง | ขนาดไบนารี C++ | ขนาด APK ของ Android |
---|---|---|
การดำเนินการในตัวเท่านั้น | 796 กิโลไบต์ | 561 กิโลไบต์ |
Ops ในตัว + การดำเนินการของ TF | 23.0 MB | 8.0 MB |
การดำเนินการในตัว + TF Ops (1) | 4.1 MB | 1.8 เมกะไบต์ |
(1) ไลบรารีเหล่านี้ได้รับการสร้างขึ้นสำหรับ i3d-kinetics-400 โมเดล มาพร้อม TFLite ในตัว 8 ตัวและ Tensorflow 3 แบบ โปรดดูรายละเอียดเพิ่มเติมที่ ลดขนาดไบนารี LiteRT
ข้อจำกัดที่ทราบ
- ประเภทที่ไม่รองรับ: การดำเนินการ TensorFlow บางอย่างอาจไม่รองรับชุดคำสั่งทั้งชุด ประเภทอินพุต/เอาต์พุตที่มักมีอยู่ใน TensorFlow
อัปเดต
- เวอร์ชัน 2.6
- รองรับโอเปอเรเตอร์ตามแอตทริบิวต์ GraphDef และทรัพยากร HashTable การเริ่มต้นได้รับการปรับปรุง
- เวอร์ชัน 2.5
- คุณสามารถใช้การเพิ่มประสิทธิภาพที่เรียกว่าหลังการฝึกอบรม การวัดขนาด
- เวอร์ชัน 2.4
- ปรับปรุงความเข้ากันได้กับผู้รับมอบสิทธิ์ที่เร่งฮาร์ดแวร์แล้ว