เอกสารนี้จะอธิบายวิธีสร้างไลบรารี Android ของ LiteRT ในอุปกรณ์ ของตัวเอง โดยปกติ คุณไม่จำเป็นต้องสร้างไลบรารี Android LiteRT ในเครื่อง
ใช้ Nightly Snapshot
หากต้องการใช้สแนปชอตยามค่ำคืน ให้เพิ่มที่เก็บต่อไปนี้ลงในบิลด์รูท Gradle การกำหนดค่า
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'
}
}
}
เพิ่มสแนปชอตในเวลากลางคืนไปยังทรัพยากร Dependency (หรือแก้ไขตามที่จำเป็น) ไปยัง create.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'
...
}
...
สร้าง LiteRT ในเครื่อง
ในบางกรณี คุณอาจต้องการใช้ LiteRT บิลด์ในเครื่อง สำหรับ ตัวอย่างเช่น คุณอาจสร้างไบนารีที่กำหนดเองที่ประกอบด้วย การดำเนินการที่เลือกจาก TensorFlow หรืออาจต้องการเปลี่ยน LiteRT ในเครื่อง
ตั้งค่าสภาพแวดล้อมของบิลด์โดยใช้ Docker
- ดาวน์โหลดไฟล์ Docker การดาวน์โหลดไฟล์ Docker หมายความว่าคุณยอมรับว่า ข้อกำหนดในการให้บริการต่อไปนี้จะควบคุมการใช้งานของคุณ
การคลิกยอมรับจะถือว่าคุณตกลงว่าการใช้ Android Studio ทั้งหมดและ Android Native Development Kit จะอยู่ภายใต้การควบคุมของซอฟต์แวร์ Android ข้อตกลงใบอนุญาตชุดพัฒนาซอฟต์แวร์ที่พร้อมใช้งานที่ https://developer.android.com/studio/terms (อาจมีการอัปเดตหรือเปลี่ยนแปลง URL ดังกล่าว Google เป็นครั้งคราว)
วันที่ คุณต้องรับทราบข้อกำหนดในการให้บริการเพื่อดาวน์โหลด- คุณเลือกเปลี่ยนเวอร์ชัน Android SDK หรือ NDK ได้ วางไฟล์ที่ดาวน์โหลดไว้ ไฟล์ Docker ในโฟลเดอร์ที่ว่างเปล่าและสร้างอิมเมจ Docker โดยเรียกใช้
docker build . -t tflite-builder -f tflite-android.Dockerfile
- เริ่มคอนเทนเนอร์ Docker แบบอินเทอร์แอกทีฟโดยการต่อเชื่อมโฟลเดอร์ปัจจุบันกับ /host_dir ภายในคอนเทนเนอร์ (โปรดทราบว่า /tensorflow_src คือ TensorFlow ภายในคอนเทนเนอร์)
docker run -it -v $PWD:/host_dir tflite-builder bash
หากคุณใช้ PowerShell ใน Windows ให้แทนที่ "$PWD" ด้วย "pwd"
หากต้องการใช้ที่เก็บ TensorFlow บนโฮสต์ ให้ต่อเชื่อมโฮสต์ดังกล่าว แทน (-v hostDir:/host_dir)
- เมื่อคุณอยู่ในคอนเทนเนอร์แล้ว คุณสามารถเรียกใช้รายการต่อไปนี้เพื่อดาวน์โหลด เครื่องมือและไลบรารีเพิ่มเติมของ Android (โปรดทราบว่าคุณอาจต้องยอมรับ ใบอนุญาต):
sdkmanager \
"build-tools;${ANDROID_BUILD_TOOLS_VERSION}" \
"platform-tools" \
"platforms;android-${ANDROID_API_LEVEL}"
ตอนนี้คุณควรไปที่ส่วนกำหนดค่าพื้นที่ทำงานและ .bazelrc เพื่อกำหนดค่าการตั้งค่าบิลด์
เมื่อสร้างไลบรารีเสร็จแล้ว คุณสามารถคัดลอกไลบรารีเหล่านั้นไปยัง /host_dir ภายในคอนเทนเนอร์เพื่อให้คุณเข้าถึงได้ในโฮสต์
ตั้งค่าสภาพแวดล้อมของบิลด์โดยไม่ใช้ Docker
ติดตั้ง Bazel และ Android สิ่งที่ต้องมี
Bazel เป็นระบบบิลด์หลักสำหรับ TensorFlow หากต้องการสร้างด้วย คุณต้องมี ให้ติดตั้ง Android NDK และ SDK ไว้ในระบบของคุณ
- ติดตั้งระบบบิลด์ของ Bazel เวอร์ชันล่าสุด
- คุณต้องใช้ Android NDK เพื่อสร้าง LiteRT ดั้งเดิม (C/C++) โค้ด เวอร์ชันที่แนะนำในปัจจุบันคือ 25b ซึ่งอาจพบ ที่นี่
- อาจรับ Android SDK และเครื่องมือสร้าง ที่นี่ หรือ หรือใช้เป็นส่วนหนึ่งของ Android Studio รังสรรค์ Tools API >= 23 คือเวอร์ชันที่แนะนำสำหรับการสร้าง LiteRT
กำหนดค่า WORKSPACE และ .bazelrc
นี่คือขั้นตอนการกำหนดค่าแบบครั้งเดียวซึ่งจำเป็นสำหรับการสร้าง LiteRT
ห้องสมุด เรียกใช้สคริปต์ ./configure
ในจุดชำระเงินของ TensorFlow รูท
และตอบว่า "ใช่" เมื่อสคริปต์ขอให้กำหนดค่า ./WORKSPACE
แบบอินเทอร์แอกทีฟ
สำหรับบิลด์ของ Android สคริปต์จะพยายามกำหนดการตั้งค่าโดยใช้
ตัวแปรสภาพแวดล้อมต่อไปนี้
ANDROID_SDK_HOME
ANDROID_SDK_API_LEVEL
ANDROID_NDK_HOME
ANDROID_NDK_API_LEVEL
หากไม่ได้ตั้งค่าตัวแปรเหล่านี้ ต้องระบุตัวแปรแบบอินเทอร์แอกทีฟในสคริปต์
ปรากฏขึ้น การกำหนดค่าที่สำเร็จควรมีรายการคล้ายกับข้อความต่อไปนี้
ในไฟล์ .tf_configure.bazelrc
ในโฟลเดอร์รูท
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"
สร้างและติดตั้ง
เมื่อกำหนดค่า Bazel อย่างถูกต้องแล้ว คุณสามารถสร้าง LiteRT AAR จาก ไดเรกทอรีการชำระเงินระดับรูทเป็นดังนี้
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
การดำเนินการนี้จะสร้างไฟล์ AAR ใน bazel-bin/tensorflow/lite/java/
หมายเหตุ
สิ่งนี้จะสร้าง "ไขมัน" AAR ที่มีสถาปัตยกรรมต่างๆ หากไม่
ทั้งหมดตามที่ต้องการ ให้ใช้ชุดย่อยที่เหมาะกับสภาพแวดล้อมในการทำให้ใช้งานได้ของคุณ
คุณสามารถสร้างไฟล์ AAR ที่เล็กลงซึ่งกำหนดเป้าหมายเฉพาะชุดโมเดลดังต่อไปนี้
bash tensorflow/lite/tools/build_aar.sh \
--input_models=model1,model2 \
--target_archs=x86,x86_64,arm64-v8a,armeabi-v7a
สคริปต์ด้านบนจะสร้างไฟล์ tensorflow-lite.aar
และสามารถเลือก
tensorflow-lite-select-tf-ops.aar
หากมีโมเดลใดรูปแบบหนึ่งใช้อยู่
Tensorflow Ops โปรดดูรายละเอียดเพิ่มเติมที่
ลดขนาดไบนารี LiteRT
เพิ่ม AAR ลงในโปรเจ็กต์โดยตรง
ย้ายไฟล์ tensorflow-lite.aar
ไปยังไดเรกทอรีที่ชื่อ libs
ใน
แก้ไขไฟล์ build.gradle
ของแอปให้อ้างอิงไดเรกทอรีใหม่
และแทนที่ทรัพยากร Dependency แบบ LiteRT ที่มีอยู่ด้วยไลบรารีในเครื่องแบบใหม่
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')
}
ติดตั้ง AAR ไปยังที่เก็บ Maven ในเครื่อง
เรียกใช้คำสั่งต่อไปนี้จากไดเรกทอรีการชำระเงินรูท
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
ใน build.gradle
ของแอป ให้ตรวจสอบว่าคุณมีทรัพยากร Dependency mavenLocal()
และ
แทนที่ทรัพยากร Dependency ของ LiteRT มาตรฐานด้วยเวอร์ชันที่รองรับ
สำหรับการดำเนินการของ 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'
}
โปรดทราบว่าเวอร์ชัน 0.1.100
ในที่นี้มีไว้สำหรับ
การทดสอบ/การพัฒนา เมื่อติดตั้ง AAR ในเครื่องแล้ว คุณสามารถใช้มาตรฐาน
LiteRT Java Inference API ในโค้ดของแอป