Do thư viện toán tử tích hợp LiteRT chỉ hỗ trợ một số hạn chế số lượng toán tử TensorFlow, không phải mô hình nào cũng có thể chuyển đổi. Để biết thông tin chi tiết, tham chiếu đến khả năng tương thích của toán tử.
Để cho phép chuyển đổi, người dùng có thể cho phép sử dụng một số TensorFlow ops trong mô hình LiteRT. Tuy nhiên, việc chạy Các mô hình LiteRT với hoạt động TensorFlow yêu cầu lấy cốt lõi Thời gian chạy TensorFlow tăng kích thước nhị phân của trình phiên dịch LiteRT. Đối với Android, bạn có thể tránh điều này bằng cách chỉ xây dựng một cách chọn lọc những Tensorflow bắt buộc hoạt động. Để biết thông tin chi tiết, hãy tham khảo bài viết giảm tệp nhị phân kích thước.
Tài liệu này trình bày cách chuyển đổi và chạy mô hình LiteRT chứa hoạt động TensorFlow trên một nền tảng mà bạn chọn. Bài viết cũng thảo luận về hiệu suất và quy mô chỉ số và các giới hạn đã biết.
Chuyển đổi mô hình
Ví dụ sau đây trình bày cách tạo một mô hình LiteRT bằng lựa chọn Hoạt động 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)
Chạy suy luận
Khi sử dụng mô hình LiteRT đã được chuyển đổi với sự hỗ trợ của chọn hoạt động TensorFlow, ứng dụng cũng phải sử dụng thời gian chạy LiteRT bao gồm thư viện hoạt động TensorFlow cần thiết.
AAR trên Android
Để giảm kích thước tệp nhị phân, vui lòng tạo các tệp AAR tuỳ chỉnh của riêng bạn theo hướng dẫn trong phần tiếp theo. Nếu kích thước nhị phân không phải là mối lo ngại lớn, bạn nên dùng AAR với hoạt động TensorFlow được tạo sẵn được lưu trữ tại MavenCentral.
Bạn có thể chỉ định mã này trong các phần phụ thuộc build.gradle
bằng cách thêm mã này cùng với
LiteRT AAR chuẩn như sau:
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'
}
Để sử dụng ảnh chụp nhanh hàng đêm, hãy đảm bảo bạn đã thêm ảnh chụp nhanh Sonatype kho lưu trữ.
Sau khi bạn thêm phần phụ thuộc, uỷ quyền cần thiết để xử lý Hoạt động TensorFlow của biểu đồ phải được cài đặt tự động cho các biểu đồ yêu cầu chúng.
Lưu ý: Phần phụ thuộc hoạt động của TensorFlow tương đối lớn, vì vậy, có thể bạn sẽ
muốn lọc ra các ABI x86 không cần thiết trong tệp .gradle
bằng cách thiết lập
abiFilters
của bạn.
android {
defaultConfig {
ndk {
abiFilters 'armeabi-v7a', 'arm64-v8a'
}
}
}
Xây dựng AAR trên Android
Để giảm kích thước tệp nhị phân hoặc các trường hợp nâng cao khác, bạn cũng có thể tạo thư viện theo cách thủ công. Giả sử một bản dựng LiteRT hoạt động được , hãy tạo AAR trên Android bằng cách chọn các hoạt động TensorFlow làm sau:
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
Thao tác này sẽ tạo tệp AAR bazel-bin/tmp/tensorflow-lite.aar
cho
Hoạt động tuỳ chỉnh và tích hợp LiteRT; và tạo tệp AAR
bazel-bin/tmp/tensorflow-lite-select-tf-ops.aar
cho hoạt động TensorFlow. Nếu bạn
không có môi trường tạo bản dựng hoạt động, Bạn cũng có thể tạo các tệp ở trên bằng
docker.
Từ đó, bạn có thể nhập trực tiếp tệp AAR vào dự án của mình, hoặc phát hành các tệp AAR tuỳ chỉnh lên kho lưu trữ Maven cục bộ:
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
Cuối cùng, trong build.gradle
của ứng dụng, hãy đảm bảo bạn có mavenLocal()
và thay thế phần phụ thuộc LiteRT chuẩn bằng một phần phụ thuộc
có hỗ trợ một số hoạt động 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
Sử dụng CocoaPods
LiteRT cung cấp các tính năng TF chọn lọc hoạt động hằng đêm được tạo sẵn cho arm64
,
mà bạn có thể dựa vào cùng với TensorFlowLiteSwift
hoặc
TensorFlowLiteObjC
CocoaPods.
Lưu ý: Nếu cần sử dụng hoạt động TF chọn lọc trong trình mô phỏng x86_64
, bạn có thể tạo
tự chọn khung hoạt động. Xem phần Sử dụng Bazel + Xcode
để biết thêm chi tiết.
# In your Podfile target:
pod 'TensorFlowLiteSwift' # or 'TensorFlowLiteObjC'
pod 'TensorFlowLiteSelectTfOps', '~> 0.0.1-nightly'
Sau khi chạy pod install
, bạn cần cung cấp thêm cờ trình liên kết cho
hãy buộc tải khung hoạt động TF đã chọn vào dự án của bạn. Trong dự án Xcode của bạn,
chuyển đến Build Settings
-> Other Linker Flags
rồi thêm:
Đối với phiên bản >= 2.9.0:
-force_load $(SRCROOT)/Pods/TensorFlowLiteSelectTfOps/Frameworks/TensorFlowLiteSelectTfOps.xcframework/ios-arm64/TensorFlowLiteSelectTfOps.framework/TensorFlowLiteSelectTfOps
Đối với phiên bản < 2.9.0:
-force_load $(SRCROOT)/Pods/TensorFlowLiteSelectTfOps/Frameworks/TensorFlowLiteSelectTfOps.framework/TensorFlowLiteSelectTfOps
Sau đó, bạn có thể chạy mọi mô hình đã chuyển đổi bằng SELECT_TF_OPS
trong
ứng dụng iOS của bạn. Ví dụ: bạn có thể sửa đổi Phân loại hình ảnh iOS
ứng dụng
để kiểm tra tính năng hoạt động TF chọn lọc.
- Thay thế tệp mô hình bằng tệp đã chuyển đổi có bật
SELECT_TF_OPS
. - Thêm phần phụ thuộc
TensorFlowLiteSelectTfOps
vàoPodfile
theo hướng dẫn. - Thêm cờ trình liên kết bổ sung như ở trên.
- Chạy ứng dụng ví dụ và xem mô hình có hoạt động đúng cách hay không.
Sử dụng Bazel + Xcode
Bạn có thể dùng Bazel để xây dựng LiteRT với một số hoạt động TensorFlow cho iOS.
Trước tiên, hãy làm theo hướng dẫn tạo bản dựng iOS để định cấu hình
Không gian làm việc Bazel và tệp .bazelrc
đúng cách.
Sau khi định cấu hình không gian làm việc và bật tính năng hỗ trợ iOS, bạn có thể sử dụng
sau đây để tạo khung tiện ích bổ sung hoạt động TF chọn lọc, có thể được thêm vào
bên trên TensorFlowLiteC.framework
thông thường. Lưu ý rằng hoạt động TF chọn lọc
bạn không thể tạo khung cho cấu trúc i386
, vì vậy, bạn cần xác định rõ ràng
cung cấp danh sách cấu trúc mục tiêu, ngoại trừ i386
.
bazel build -c opt --config=ios --ios_multi_cpus=arm64,x86_64 \
//tensorflow/lite/ios:TensorFlowLiteSelectTfOps_framework
Thao tác này sẽ tạo khung trong bazel-bin/tensorflow/lite/ios/
thư mục. Bạn có thể thêm khung mới này vào dự án Xcode của mình bằng cách làm theo các bước sau
các bước tương tự được mô tả trong dự án Xcode
cài đặt trong phần
Hướng dẫn tạo bản dựng iOS.
Sau khi thêm khung vào dự án ứng dụng, bạn sẽ thấy thêm một cờ trình liên kết
phải được chỉ định trong dự án ứng dụng của bạn để buộc tải hoạt động TF đã chọn
khung. Trong dự án Xcode của bạn, hãy chuyển đến Build Settings
-> Other Linker
Flags
rồi thêm:
-force_load <path/to/your/TensorFlowLiteSelectTfOps.framework/TensorFlowLiteSelectTfOps>
C/C++
Nếu bạn đang sử dụng Bazel hoặc CMake để tạo LiteRT trình thông dịch, bạn có thể bật tính năng uỷ quyền của Flex bằng cách liên kết một LiteRT Flex thư viện chia sẻ được uỷ quyền. Bạn có thể tạo tệp này bằng Bazel dưới dạng lệnh sau.
bazel build -c opt --config=monolithic tensorflow/lite/delegates/flex:tensorflowlite_flex
Lệnh này tạo thư viện dùng chung sau đây trong
bazel-bin/tensorflow/lite/delegates/flex
.
Nền tảng | Tên thư viện |
---|---|
Linux | libtensorflowlite_flex.so |
macOS | libtensorflowlite_flex.dylib |
Windows | tensorflowlite_flex.dll |
Lưu ý rằng TfLiteDelegate
cần thiết sẽ được cài đặt tự động khi
tạo trình phiên dịch trong thời gian chạy miễn là thư viện chia sẻ được liên kết. Nó
bạn không cần cài đặt phiên bản uỷ quyền một cách rõ ràng như thông thường
bắt buộc với các loại uỷ quyền khác.
Lưu ý: Tính năng này chỉ có trên phiên bản 2.7.
Python
LiteRT với một số hoạt động TensorFlow sẽ được tự động cài đặt với gói TensorFlow pip. Bạn có thể còn chọn chỉ cài đặt pip Thông dịch LiteRT gói.
Chỉ số
Hiệu suất
Khi sử dụng kết hợp cả hoạt động tích hợp sẵn và chọn hoạt động TensorFlow, tất cả đều giống nhau Các tính năng tối ưu hoá LiteRT và hoạt động tích hợp được tối ưu hoá sẽ có sẵn và dễ sử dụng với mô hình đã chuyển đổi.
Bảng sau đây mô tả thời gian trung bình để chạy suy luận
MobileNet trên Pixel 2. Thời gian được liệt kê là trung bình 100 lần chạy. Các
mục tiêu được tạo cho Android bằng cách sử dụng các cờ: --config=android_arm64 -c opt
.
Tạo | Thời gian (mili giây) |
---|---|
Chỉ các hoạt động tích hợp sẵn (TFLITE_BUILTIN ) |
260,7 |
Chỉ sử dụng hoạt động TF (SELECT_TF_OPS ) |
264,5 |
Kích thước nhị phân
Bảng sau đây mô tả kích thước nhị phân của LiteRT cho mỗi bản dựng.
Các mục tiêu này được tạo cho Android bằng cách sử dụng --config=android_arm -c opt
.
Tạo | Kích thước nhị phân C++ | Kích thước APK Android |
---|---|---|
Chỉ các hoạt động tích hợp sẵn | 796 KB | 561 KB |
Hoạt động tích hợp + Hoạt động TF | 23,0 MB | 8,0 MB |
Hoạt động tích hợp + Hoạt động TF (1) | 4,1 MB | 1,8 MB |
(1) Các thư viện này được xây dựng có chọn lọc cho i3d-kinetics-400 mô hình với 8 hoạt động tích hợp TFLite và 3 hoạt động Tensorflow. Để biết thêm chi tiết, vui lòng xem Phần Giảm kích thước nhị phân LiteRT.
Các hạn chế đã biết
- Các loại không được hỗ trợ: Một số hoạt động TensorFlow có thể không hỗ trợ toàn bộ tập hợp các loại đầu vào/đầu ra thường có trong TensorFlow.
Nội dung cập nhật
- Phiên bản 2.6
- Hỗ trợ cho các toán tử dựa trên thuộc tính GraphDef và tài nguyên HashTable quy trình khởi chạy đã được cải thiện.
- Phiên bản 2.5
- Bạn có thể áp dụng một phương pháp tối ưu hoá được gọi là bài đào tạo sau khoá học lượng tử hoá
- Phiên bản 2.4
- Khả năng tương thích với uỷ quyền được tăng tốc phần cứng đã được cải thiện