Xây dựng LiteRT cho Android

Tài liệu này mô tả cách xây dựng thư viện Android LiteRT trên của bạn. Thông thường, bạn không cần xây dựng cục bộ thư viện Android LiteRT.

Sử dụng Ảnh chụp nhanh vào ban đêm

Để sử dụng ảnh chụp nhanh ban đêm, hãy thêm kho lưu trữ sau vào bản dựng Gradle gốc của bạn config của Google.

allprojects {
    repositories {      // should be already there
        mavenCentral()  // should be already there
        maven {         // add this repo to use snapshots
          name 'ossrh-snapshot'
          url 'https://oss.sonatype.org/content/repositories/snapshots'
        }
    }
}

thêm bản tổng quan nhanh hằng đêm vào các phần phụ thuộc (hoặc chỉnh sửa nếu cần) vào build.gradle của bạn

...
dependencies {
    ...
    implementation 'org.tensorflow:tensorflow-lite:0.0.0-nightly-SNAPSHOT'
    implementation 'com.google.ai.edge.litert:litert-gpu:0.0.0-nightly-SNAPSHOT'
    implementation 'com.google.ai.edge.litert:litert-support:0.0.0-nightly-SNAPSHOT'
    ...
}
...

Tạo LiteRT cục bộ

Trong một số trường hợp, bạn có thể cần sử dụng bản dựng LiteRT cục bộ. Cho Ví dụ: bạn có thể đang tạo một tệp nhị phân tuỳ chỉnh bao gồm các thao tác được chọn từ TensorFlow, hoặc bạn có thể muốn thực hiện các thay đổi cục bộ đối với LiteRT.

Thiết lập môi trường xây dựng bằng Docker

  • Tải tệp Docker xuống. Bằng cách tải tệp Docker xuống, bạn đồng ý rằng các điều khoản dịch vụ sau đây điều chỉnh việc bạn sử dụng các dịch vụ này:

Bằng việc nhấp để chấp nhận, bạn đồng ý rằng mọi việc sử dụng Android Studio và Android Native Development Kit sẽ chịu sự điều chỉnh của Phần mềm Android Thoả thuận cấp phép cho Bộ phát triển có tại https://developer.android.com/studio/terms (Chúng tôi có thể cập nhật hoặc thay đổi URL này của Google tuỳ từng thời điểm).

Bạn phải xác nhận điều khoản dịch vụ để tải .

  • Bạn có thể tuỳ ý thay đổi phiên bản NDK hoặc SDK Android. Đặt tệp đã tải xuống Tệp Docker trong một thư mục trống và tạo hình ảnh Docker bằng cách chạy:
docker build . -t tflite-builder -f tflite-android.Dockerfile
  • Khởi động vùng chứa Docker theo cách tương tác bằng cách gắn thư mục hiện tại của bạn vào /host_dir bên trong vùng chứa (lưu ý rằng /tensorflow_src là TensorFlow kho lưu trữ bên trong vùng chứa):
docker run -it -v $PWD:/host_dir tflite-builder bash

Nếu bạn sử dụng PowerShell trên Windows, hãy thay thế "$PWD" bằng "pwd".

Nếu muốn sử dụng một kho lưu trữ TensorFlow trên máy chủ lưu trữ, hãy gắn máy chủ lưu trữ đó thư mục (-v hostDir:/host_dir).

  • Khi đã ở bên trong vùng chứa, bạn có thể chạy lệnh sau để tải xuống các công cụ và thư viện Android bổ sung (xin lưu ý rằng bạn có thể phải chấp nhận giấy phép):
sdkmanager \
  "build-tools;${ANDROID_BUILD_TOOLS_VERSION}" \
  "platform-tools" \
  "platforms;android-${ANDROID_API_LEVEL}"

Bây giờ, bạn nên chuyển đến phần Định cấu hình WORKSPACE và .bazelrc để định cấu hình các chế độ cài đặt bản dựng.

Sau khi xây dựng xong thư viện, bạn có thể sao chép các thư viện đó vào /host_dir bên trong vùng chứa để có thể truy cập vào các tệp đó trên máy chủ lưu trữ.

Thiết lập môi trường bản dựng mà không cần Docker

Cài đặt Bazel và điều kiện tiên quyết về Android

Bazel là hệ thống xây dựng chính cho TensorFlow. Để xây dựng ứng dụng bằng công cụ này, bạn phải cài đặt ứng dụng cũng như SDK và NDK Android trên hệ thống của bạn.

  1. Cài đặt phiên bản mới nhất của hệ thống xây dựng Bazel.
  2. Cần có Android NDK để xây dựng LiteRT (C/C++) gốc . Bạn có thể tìm thấy phiên bản hiện tại là 25b tại đây.
  3. SDK Android và công cụ xây dựng có thể được lấy tại đây hoặc hoặc là một phần của Android Studio. Xây dựng tools API >= 23 là phiên bản được đề xuất để xây dựng LiteRT.

Định cấu hình WORKSPACE và .bazelrc

Đây là bước định cấu hình một lần bắt buộc để tạo LiteRT thư viện. Chạy tập lệnh ./configure trong quy trình thanh toán gốc của TensorFlow và trả lời "Có" khi tập lệnh yêu cầu định cấu hình ./WORKSPACE theo cách tương tác cho bản dựng Android. Tập lệnh sẽ cố định cấu hình cài đặt bằng cách sử dụng các biến môi trường sau:

  • ANDROID_SDK_HOME
  • ANDROID_SDK_API_LEVEL
  • ANDROID_NDK_HOME
  • ANDROID_NDK_API_LEVEL

Nếu bạn không đặt các biến này, chúng phải được cung cấp theo cách có tính tương tác trong tập lệnh . Cấu hình thành công sẽ mang lại các mục tương tự như sau trong tệp .tf_configure.bazelrc ở thư mục gốc:

build --action_env ANDROID_NDK_HOME="/usr/local/android/android-ndk-r25b"
build --action_env ANDROID_NDK_API_LEVEL="21"
build --action_env ANDROID_BUILD_TOOLS_VERSION="30.0.3"
build --action_env ANDROID_SDK_API_LEVEL="30"
build --action_env ANDROID_SDK_HOME="/usr/local/android/android-sdk-linux"

Tạo và cài đặt

Sau khi Bazel được định cấu hình đúng cách, bạn có thể tạo LiteRT AAR từ thư mục thanh toán gốc như sau:

bazel build -c opt --cxxopt=--std=c++17 --config=android_arm64 \
  --fat_apk_cpu=x86,x86_64,arm64-v8a,armeabi-v7a \
  --define=android_dexmerger_tool=d8_dexmerger \
  --define=android_incremental_dexing_tool=d8_dexbuilder \
  //tensorflow/lite/java:tensorflow-lite

Thao tác này sẽ tạo một tệp AAR trong bazel-bin/tensorflow/lite/java/. Ghi chú điều này sẽ tạo ra "chất béo" AAR với một số cấu trúc khác nhau; nếu bạn không cần tất cả các gói, hãy sử dụng tập hợp con phù hợp với môi trường triển khai của bạn.

Bạn có thể tạo các tệp AAR nhỏ hơn chỉ nhắm đến một tập hợp mô hình như sau:

bash tensorflow/lite/tools/build_aar.sh \
  --input_models=model1,model2 \
  --target_archs=x86,x86_64,arm64-v8a,armeabi-v7a

Tập lệnh ở trên sẽ tạo tệp tensorflow-lite.aar và tuỳ chọn Tệp tensorflow-lite-select-tf-ops.aar nếu một trong các mô hình đang sử dụng Hoạt động của Tensorflow. Để biết thêm chi tiết, vui lòng xem Phần Giảm kích thước nhị phân LiteRT.

Thêm trực tiếp AAR vào dự án

Di chuyển tệp tensorflow-lite.aar vào thư mục có tên là libs trong dự án. Sửa đổi tệp build.gradle của ứng dụng để tham chiếu đến thư mục mới và thay thế phần phụ thuộc LiteRT hiện có bằng thư viện cục bộ mới, e.g.:

allprojects {
    repositories {
        mavenCentral()
        maven {  // Only for snapshot artifacts
            name 'ossrh-snapshot'
            url 'https://oss.sonatype.org/content/repositories/snapshots'
        }
        flatDir {
            dirs 'libs'
        }
    }
}

dependencies {
    compile(name:'tensorflow-lite', ext:'aar')
}

Cài đặt AAR vào kho lưu trữ Maven cục bộ

Thực thi lệnh sau từ thư mục thanh toán gốc:

mvn install:install-file \
  -Dfile=bazel-bin/tensorflow/lite/java/tensorflow-lite.aar \
  -DgroupId=org.tensorflow \
  -DartifactId=tensorflow-lite -Dversion=0.1.100 -Dpackaging=aar

Trong build.gradle của ứng dụng, hãy đảm bảo bạn có phần phụ thuộc mavenLocal() và thay thế phần phụ thuộc LiteRT tiêu chuẩn bằng phần phụ thuộc có hỗ trợ để chọn 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'
}

Xin lưu ý rằng phiên bản 0.1.100 ở đây chỉ nhằm mục đích kiểm thử/phát triển. Sau khi cài đặt AAR cục bộ, bạn có thể sử dụng API dự đoán Java LiteRT trong mã ứng dụng của bạn.