Chọn toán tử TensorFlow

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 đổichạ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ố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ào Podfile 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
  • 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