เอกสารนี้อธิบายวิธีสร้างไลบรารี LiteRT Android ด้วยตนเอง โดยปกติแล้ว คุณไม่จำเป็นต้องสร้างไลบรารี LiteRT Android ในเครื่อง
ใช้สแนปชอตรายคืน
หากต้องการใช้สแนปชอตเวอร์ชันทดลอง ให้เพิ่มที่เก็บต่อไปนี้ลงในการกำหนดค่าการสร้าง 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 (หรือแก้ไขตามต้องการ) ใน 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'
...
}
...
สร้าง LiteRT ในเครื่อง
ในบางกรณี คุณอาจต้องการใช้บิลด์ LiteRT ในเครื่อง ตัวอย่างเช่น คุณอาจสร้างไบนารีที่กำหนดเองซึ่งมีการดำเนินการที่เลือกจาก TensorFlow หรืออาจต้องการทำการเปลี่ยนแปลงในเครื่อง กับ LiteRT
ตั้งค่าสภาพแวดล้อมการสร้างโดยใช้ Docker
- ดาวน์โหลดไฟล์ Docker การดาวน์โหลดไฟล์ Docker แสดงว่าคุณยอมรับว่าข้อกำหนดในการให้บริการต่อไปนี้จะควบคุมการใช้งานของคุณ
การคลิกเพื่อยอมรับถือเป็นการยอมรับว่าการใช้งาน Android Studio และ Android Native Development Kit ทั้งหมดจะอยู่ภายใต้ข้อตกลงใบอนุญาตชุดพัฒนาซอฟต์แวร์ Android ซึ่งดูได้ที่ https://developer.android.com/studio/terms (Google อาจอัปเดตหรือเปลี่ยนแปลง URL ดังกล่าวเป็นครั้งคราว)
คุณต้องรับทราบข้อกำหนดในการให้บริการเพื่อดาวน์โหลด ไฟล์- คุณเลือกเปลี่ยนเวอร์ชัน 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}"
ตอนนี้คุณควรไปที่ส่วนกำหนดค่า WORKSPACE และ .bazelrc เพื่อกำหนดค่าการตั้งค่าการสร้าง
หลังจากสร้างไลบรารีเสร็จแล้ว คุณสามารถคัดลอกไลบรารีไปยัง /host_dir ภายใน คอนเทนเนอร์เพื่อให้เข้าถึงไลบรารีในโฮสต์ได้
ตั้งค่าสภาพแวดล้อมการสร้างโดยไม่ต้องใช้ Docker
ติดตั้ง Bazel และข้อกำหนดเบื้องต้นของ Android
Bazel เป็นระบบบิลด์หลักสำหรับ TensorFlow หากต้องการสร้างด้วยเครื่องมือนี้ คุณต้อง มีเครื่องมือนี้ รวมถึงติดตั้ง Android NDK และ SDK ไว้ในระบบ
- ติดตั้งระบบบิลด์ Bazel เวอร์ชันล่าสุด
- ต้องใช้ Android NDK เพื่อสร้างโค้ด LiteRT แบบเนทีฟ (C/C++) เวอร์ชันที่แนะนำในปัจจุบันคือ 25b ซึ่งดูได้ที่นี่
- คุณสามารถรับ Android SDK และเครื่องมือบิลด์ได้ที่นี่ หรือเป็นส่วนหนึ่งของ Android Studio เครื่องมือบิลด์ API >= 23 เป็นเวอร์ชันที่แนะนำสำหรับการสร้าง LiteRT
กำหนดค่า WORKSPACE และ .bazelrc
นี่คือขั้นตอนการกำหนดค่าแบบครั้งเดียวที่จำเป็นต่อการสร้างไลบรารี LiteRT
เรียกใช้./configureสคริปต์ในไดเรกทอรีการชำระเงิน TensorFlow รูท
และตอบว่า "ใช่" เมื่อสคริปต์ขอให้กำหนดค่า./WORKSPACEแบบอินเทอร์แอกทีฟสำหรับการสร้าง Android
สคริปต์จะพยายามกำหนดค่าการตั้งค่า
โดยใช้ตัวแปรสภาพแวดล้อมต่อไปนี้
ANDROID_SDK_HOMEANDROID_SDK_API_LEVELANDROID_NDK_HOMEANDROID_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 อย่างถูกต้องแล้ว คุณจะสร้าง AAR ของ LiteRT จากไดเรกทอรีการชำระเงินรูทได้โดยทำดังนี้
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 แบบ "Fat" ที่มีสถาปัตยกรรมที่แตกต่างกันหลายแบบ หากไม่ต้องการ
ทั้งหมด ให้ใช้ชุดย่อยที่เหมาะสมกับสภาพแวดล้อมการติดตั้งใช้งาน
คุณสร้างไฟล์ 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 โปรดดูรายละเอียดเพิ่มเติมในส่วนลดขนาดไบนารี LiteRT
เพิ่ม AAR ลงในโปรเจ็กต์โดยตรง
ย้ายไฟล์ tensorflow-lite.aar ไปยังไดเรกทอรีชื่อ libs ในโปรเจ็กต์
แก้ไขไฟล์ build.gradle ของแอปเพื่ออ้างอิงไดเรกทอรีใหม่
และแทนที่ทรัพยากร Dependency ของ LiteRT ที่มีอยู่ด้วยไลบรารีใหม่ในเครื่อง เช่น
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 มาตรฐานด้วยทรัพยากร Dependency ที่รองรับการดำเนินการ 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 มาตรฐานในโค้ดแอปได้