Xây dựng TensorFlow Lite cho Android

Tài liệu này mô tả cách tự xây dựng thư viện Android TensorFlow Lite. Thông thường, bạn không cần phải xây dựng cục bộ thư viện Android TensorFlow Lite. Nếu bạn chỉ muốn sử dụng nó, hãy xem phần khởi động nhanh Android để biết thêm chi tiết về cách sử dụng chúng trong các dự án Android của bạn.

Sử dụng Ảnh chụp nhanh hàng đêm

Để sử dụng ảnh chụp nhanh hàng đêm, hãy thêm repo sau vào cấu hình bản dựng Gradle gốc của bạn.

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 ảnh chụp nhanh hàng đêm vào 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 'org.tensorflow:tensorflow-lite-gpu:0.0.0-nightly-SNAPSHOT'
    implementation 'org.tensorflow:tensorflow-lite-support:0.0.0-nightly-SNAPSHOT'
    ...
}
...

Xây dựng TensorFlow Lite cục bộ

Trong một số trường hợp, bạn có thể muốn sử dụng bản dựng cục bộ của TensorFlow Lite. Ví dụ: bạn có thể đang xây dựng một tệp nhị phân tùy chỉnh bao gồm các hoạt động đượ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 TensorFlow Lite.

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

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

Bằng cách nhấp để chấp nhận, bạn đồng ý rằng tất cả việc sử dụng Android Studio và Bộ công cụ phát triển gốc Android sẽ chịu sự điều chỉnh của Thỏa thuận cấp phép Bộ công cụ phát triển phần mềm Android có sẵn tại https://developer.android.com/studio/terms (URL đó có thể thỉnh thoảng được Google cập nhật hoặc thay đổi).

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

  • Bạn có thể tùy ý thay đổi phiên bản SDK Android hoặc NDK. Đặt tệp Docker đã tải xuống vào một thư mục trống và tạo hình ảnh docker của bạn bằng cách chạy:
docker build . -t tflite-builder -f tflite-android.Dockerfile
  • Khởi động vùng chứa docker một 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à kho lưu trữ TensorFlow 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 bạn muốn sử dụng kho lưu trữ TensorFlow trên máy chủ, thay vào đó hãy gắn thư mục máy chủ đó (-v HostDir:/host_dir).

  • Khi đã ở trong vùng chứa, bạn có thể chạy phần sau để tải xuống các công cụ và thư viện Android bổ sung (lưu ý rằng bạn có thể cần 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 sang phần Định cấu hình WORKSPACE và .bazelrc để định cấu hình cài đặt bản dựng.

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

Thiết lập môi trường xây dựng không cần Docker

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

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

  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ó NDK của Android để xây dựng mã TensorFlow Lite gốc (C/C++). Phiên bản được đề xuất hiện tại là 25b, có thể tìm thấy ở đây .
  3. Bạn có thể lấy SDK Android và các công cụ xây dựng tại đây hoặc dưới dạng một phần của Android Studio . API công cụ xây dựng >= 23 là phiên bản được đề xuất để xây dựng TensorFlow Lite.

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

Đây là bước cấu hình một lần cần thiết để xây dựng thư viện TF Lite. Chạy tập lệnh ./configure trong thư mục kiểm tra TensorFlow gốc và trả lời "Có" khi tập lệnh yêu cầu định cấu hình tương tác ./WORKSPACE cho các bản dựng Android. Tập lệnh sẽ cố gắng định cấu hình cài đặt bằ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 các biến này không được đặt thì chúng phải được cung cấp một cách tương tác trong lời nhắc 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 trong thư mục gốc:

build --action_env ANDROID_NDK_HOME="/usr/local/android/android-ndk-r25b"
build --action_env ANDROID_NDK_API_LEVEL="26"
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"

Xây dựng và cài đặt

Sau khi Bazel được định cấu hình đúng cách, bạn có thể xây dựng TensorFlow Lite AAR từ thư mục kiểm tra 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

Điều này sẽ tạo ra một tệp AAR trong bazel-bin/tensorflow/lite/java/ . Lưu ý rằng điều này xây dựng một AAR "béo" với nhiều kiến ​​trúc khác nhau; nếu bạn không cần tất cả chúng, 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 mục tiêu vào 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à tùy 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 TensorFlow Lite .

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

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

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 hiện lệnh sau từ thư mục kiểm tra gốc của bạn:

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 TensorFlow Lite tiêu chuẩn bằng phần phụ thuộc có hỗ trợ cho các hoạt động TensorFlow chọn lọc:

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'
}

Lưu ý rằng phiên bản 0.1.100 ở đây hoàn toàn nhằm mục đích thử nghiệm/phát triển. Với AAR cục bộ được cài đặt, bạn có thể sử dụng API suy luận TensorFlow Lite Java tiêu chuẩn trong mã ứng dụng của mình.