از آنجایی که کتابخانه اپراتور داخلی LiteRT تنها از تعداد محدودی از اپراتورهای TensorFlow پشتیبانی می کند، هر مدلی قابل تبدیل نیست. برای جزئیات، به سازگاری اپراتور مراجعه کنید.
برای اجازه دادن به تبدیل، کاربران می توانند استفاده از برخی عملیات های TensorFlow را در مدل LiteRT خود فعال کنند. با این حال، اجرای مدلهای LiteRT با عملیات TensorFlow نیاز به کشیدن هسته اجرا TensorFlow دارد که باعث افزایش اندازه باینری مفسر LiteRT میشود. برای اندروید، میتوانید با ساختن انتخابی تنها عملیات مورد نیاز Tensorflow از این امر جلوگیری کنید. برای جزئیات، به کاهش اندازه باینری مراجعه کنید.
این سند نحوه تبدیل و اجرای یک مدل LiteRT حاوی عملیات TensorFlow را بر روی پلتفرم مورد نظر شما شرح می دهد. همچنین معیارهای عملکرد و اندازه و محدودیت های شناخته شده را مورد بحث قرار می دهد.
یک مدل را تبدیل کنید
مثال زیر نحوه تولید یک مدل LiteRT را با گزینه های 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 است.
Android AAR
برای کاهش اندازه باینری، لطفاً فایلهای AAR سفارشی خود را طبق راهنمایی در بخش بعدی بسازید. اگر اندازه باینری نگرانی قابل توجهی نیست، توصیه می کنیم از AAR از پیش ساخته شده با عملیات TensorFlow که در MavenCentral میزبانی شده است استفاده کنید.
میتوانید این را در وابستگیهای 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'
}
برای استفاده از عکسهای فوری شبانه، مطمئن شوید که مخزن عکس فوری Sonatype را اضافه کردهاید.
هنگامی که وابستگی را اضافه کردید، نماینده لازم برای مدیریت عملیات TensorFlow گراف باید به طور خودکار برای نمودارهایی که به آنها نیاز دارند نصب شود.
توجه : وابستگی TensorFlow ops نسبتاً زیاد است، بنابراین احتمالاً میخواهید با تنظیم abiFilters
، ABIهای x86 غیرضروری را در فایل .gradle
. خود فیلتر کنید.
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 ops ایجاد کنید. اگر محیط ساخت کار ندارید، می توانید فایل های بالا را با 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()
را دارید و وابستگی استاندارد 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 برای arm64
شبانه TF ops CocoaPods از پیش ساخته شده را ارائه می دهد که می توانید در کنار TensorFlowLiteSwift
یا TensorFlowLiteObjC
CocoaPods به آنها وابسته باشید.
توجه : اگر نیاز به استفاده از Select TF ops در شبیه ساز x86_64
دارید، می توانید چارچوب Select ops را خودتان بسازید. برای جزئیات بیشتر به بخش استفاده از Bazel + Xcode مراجعه کنید.
# In your Podfile target:
pod 'TensorFlowLiteSwift' # or 'TensorFlowLiteObjC'
pod 'TensorFlowLiteSelectTfOps', '~> 0.0.1-nightly'
پس از اجرای pod install
، باید یک پرچم پیوند دهنده اضافی برای بارگذاری چارچوب انتخابی 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 ops تغییر دهید.
- فایل مدل را با فایل تبدیل شده با
SELECT_TF_OPS
جایگزین کنید. - طبق دستور، وابستگی
TensorFlowLiteSelectTfOps
را بهPodfile
اضافه کنید. - پرچم پیوند دهنده اضافی را مانند بالا اضافه کنید.
- برنامه نمونه را اجرا کنید و ببینید آیا مدل درست کار می کند یا خیر.
با استفاده از Bazel + Xcode
LiteRT با گزینههای TensorFlow برای iOS میتواند با استفاده از Bazel ساخته شود. ابتدا دستورالعمل های ساخت iOS را دنبال کنید تا فضای کاری Bazel و فایل .bazelrc
خود را به درستی پیکربندی کنید.
هنگامی که فضای کاری را با فعال بودن پشتیبانی iOS پیکربندی کردید، میتوانید از دستور زیر برای ساخت چارچوب افزونه انتخابی TF ops استفاده کنید که میتواند در بالای TensorFlowLiteC.framework
معمولی اضافه شود. توجه داشته باشید که چارچوب انتخاب TF ops را نمی توان برای معماری 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 در راهنمای ساخت iOS توضیح داده شده است، می توانید این چارچوب جدید را به پروژه Xcode خود اضافه کنید.
پس از افزودن فریم ورک به پروژه برنامه خود، یک پرچم پیوند دهنده اضافی باید در پروژه برنامه شما مشخص شود تا چارچوب انتخابی TF ops بارگذاری شود. در پروژه Xcode خود، به Build Settings
-> Other Linker Flags
بروید و اضافه کنید:
-force_load <path/to/your/TensorFlowLiteSelectTfOps.framework/TensorFlowLiteSelectTfOps>
C/C++
اگر از Bazel یا CMake برای ساخت مترجم LiteRT استفاده میکنید، میتوانید Flex delegate را با پیوند دادن یک کتابخانه مشترک LiteRT Flex فعال کنید. می توانید آن را با Bazel به عنوان دستور زیر بسازید.
bazel build -c opt --config=monolithic tensorflow/lite/delegates/flex:tensorflowlite_flex
این دستور کتابخانه مشترک زیر را در bazel-bin/tensorflow/lite/delegates/flex
ایجاد میکند.
پلت فرم | نام کتابخانه |
---|---|
لینوکس | libtensorflowlite_flex.so |
macOS | libtensorflowlite_flex.dylib |
ویندوز | tensorflowlite_flex.dll |
توجه داشته باشید که TfLiteDelegate
ضروری هنگام ایجاد مفسر در زمان اجرا تا زمانی که کتابخانه مشترک پیوند داده شده باشد به طور خودکار نصب می شود. نیازی به نصب صریح نمونه نماینده نیست، همانطور که معمولاً در مورد سایر انواع نماینده مورد نیاز است.
توجه: این ویژگی از نسخه 2.7 در دسترس است.
پایتون
LiteRT با گزینه های TensorFlow به طور خودکار با بسته Pip TensorFlow نصب می شود. همچنین میتوانید فقط بسته پیپ LiteRT Interpreter را نصب کنید.
معیارها
عملکرد
هنگام استفاده از ترکیبی از هر دو عملیات داخلی و منتخب TensorFlow، همه بهینهسازیهای LiteRT یکسان و عملیات داخلی بهینهشده در دسترس و قابل استفاده با مدل تبدیل شده خواهند بود.
جدول زیر میانگین زمان اجرای استنباط در MobileNet را در Pixel 2 توضیح میدهد. زمانهای ذکر شده به طور متوسط 100 اجرا هستند. این اهداف برای اندروید با استفاده از پرچمها ساخته شدهاند: --config=android_arm64 -c opt
.
ساخت | زمان (میلی ثانیه) |
---|---|
فقط عملیات داخلی ( TFLITE_BUILTIN ) | 260.7 |
فقط استفاده از عملیات TF ( SELECT_TF_OPS ) | 264.5 |
اندازه باینری
جدول زیر اندازه باینری LiteRT را برای هر ساخت توضیح می دهد. این اهداف با استفاده از --config=android_arm -c opt
برای اندروید ساخته شده اند.
ساخت | اندازه باینری C++ | اندازه APK اندروید |
---|---|---|
فقط عملیات داخلی | 796 کیلوبایت | 561 کیلوبایت |
عملیات داخلی + عملیات TF | 23.0 مگابایت | 8.0 مگابایت |
عملیات داخلی + عملیات TF (1) | 4.1 مگابایت | 1.8 مگابایت |
(1) این کتابخانه ها به طور انتخابی برای مدل i3d-kinetics-400 با 8 عملیات داخلی TFLite و 3 عملیات تنسورفلو ساخته شده اند. برای جزئیات بیشتر، لطفاً به بخش کاهش اندازه باینری LiteRT مراجعه کنید.
محدودیت های شناخته شده
- انواع پشتیبانینشده: برخی از عملیاتهای TensorFlow ممکن است از مجموعه کامل انواع ورودی/خروجی که معمولاً در TensorFlow موجود هستند، پشتیبانی نکنند.
به روز رسانی ها
- نسخه 2.6
- پشتیبانی از عملگرهای مبتنی بر ویژگی GraphDef و مقداردهی اولیه منابع HashTable بهبود یافته است.
- نسخه 2.5
- شما می توانید یک بهینه سازی به نام کوانتیزاسیون پس از آموزش را اعمال کنید
- نسخه 2.4
- سازگاری با نمایندگان تسریع شده سخت افزاری بهبود یافته است