Tài liệu này mô tả cách tự tạo thư viện Android LiteRT. Thông thường, bạn không cần tạo thư viện Android LiteRT cục bộ.
Sử dụng ảnh chụp nhanh hằng đêm
Để sử dụng các bản chụp nhanh hằng đêm, hãy thêm kho lưu trữ sau vào cấu hình bản dựng Gradle gốc.
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 ngày vào các phần phụ thuộc (hoặc chỉnh sửa nếu cần) vào build.gradle
...
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ể muốn sử dụng bản dựng cục bộ của LiteRT. 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 việc tải tệp Docker xuống, bạn đồng ý rằng việc bạn sử dụng tệp này phải tuân theo các điều khoản dịch vụ sau đây:
Khi nhấp vào nút chấp nhận, bạn đồng ý rằng mọi hoạt động sử dụng Android Studio và Android Native Development Kit sẽ tuân theo Thoả thuận cấp phép Android Software Development Kit có tại https://developer.android.com/studio/terms (URL này có thể được Google cập nhật hoặc thay đổi tuỳ từng thời điểm).
Bạn phải xác nhận Điều khoản dịch vụ để tải tệp xuống.- Bạn có thể tuỳ ý thay đổi phiên bản Android SDK 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 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 một kho lưu trữ TensorFlow trên máy chủ lưu trữ, hãy gắn thư mục máy chủ lưu trữ đó thay vì (-v hostDir:/host_dir).
- Sau khi vào trong vùng chứa, bạn có thể chạy lệnh sau để tải các công cụ và thư viện Android bổ sung xuống (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 đế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 hoàn tất việc tạo 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 thư viện đó trên máy chủ lưu trữ.
Thiết lập môi trường xây dựng mà không cần Docker
Cài đặt Bazel và các điều kiện tiên quyết cho Android
Bazel là hệ thống xây dựng chính cho TensorFlow. Để tạo bằng công cụ này, bạn phải cài đặt công cụ này, NDK và SDK Android trên hệ thống của mình.
- Cài đặt phiên bản mới nhất của hệ thống bản dựng Bazel.
- Bạn cần có Android NDK để tạo mã LiteRT gốc (C/C++). Phiên bản hiện tại được đề xuất là 25b. Bạn có thể tìm thấy phiên bản này tại đây.
- Bạn có thể tải SDK Android và các công cụ xây dựng tại đây hoặc tải xuống dưới dạng một phần của Android Studio. Công cụ xây dựng 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 các thư viện LiteRT. Chạy tập lệnh ./configure trong thư mục kiểm xuất TensorFlow gốc và trả lời "Yes" (Có) khi tập lệnh yêu cầu bạn định cấu hình ./WORKSPACE theo cách tương tác cho các bản dựng Android. Tập lệnh sẽ cố gắng định cấu hình các chế độ cài đặt bằng cách sử dụng các biến môi trường sau:
ANDROID_SDK_HOMEANDROID_SDK_API_LEVELANDROID_NDK_HOMEANDROID_NDK_API_LEVEL
Nếu chưa đặt các biến này, bạn phải cung cấp chúng một cách tương tác trong lời nhắc của tập lệnh. Cấu hình thành công sẽ tạo ra 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="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 định cấu hình Bazel đúng cách, bạn có thể tạo AAR LiteRT từ thư mục 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/. Xin lưu ý rằng thao tác này sẽ tạo một AAR "lớn" với nhiều cấu trúc khác nhau; nếu bạn không cần tất cả các cấu trúc này, 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 nhóm 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ỳ ý tạo tệp tensorflow-lite-select-tf-ops.aar nếu một trong các mô hình đang sử dụng các thao tác Tensorflow. Để biết thêm thông tin chi tiết, vui lòng xem phần Giảm kích thước nhị phân LiteRT.
Thêm AAR trực tiếp vào dự án
Di chuyển tệp tensorflow-lite.aar vào một thư mục có tên là libs trong dự án của bạ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, 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 thi lệnh sau đây từ thư mục gốc của quy trình thanh toá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 LiteRT tiêu chuẩn bằng phần phụ thuộc có hỗ trợ các thao tác TensorFlow đã chọn:
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 suy luận Java LiteRT tiêu chuẩn trong mã ứng dụng.