Bu belgede, LiteRT Android kitaplığının kendi başınıza nasıl oluşturulacağı açıklanmaktadır. Normalde, LiteRT Android kitaplığını yerel olarak oluşturmanız gerekmez.
Gece anlık görüntülerini kullanma
Gece sürümlerini kullanmak için aşağıdaki depoyu kök Gradle derleme yapılandırmanıza ekleyin.
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'
}
}
}
build.gradle dosyanıza bağımlılıklara gece sürümlerini ekleyin (veya gerektiği gibi düzenleyin).
...
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'yi yerel olarak oluşturma
Bazı durumlarda LiteRT'nin yerel bir sürümünü kullanmak isteyebilirsiniz. Örneğin, TensorFlow'dan seçilen işlemleri içeren özel bir ikili dosya oluşturuyor olabilirsiniz veya LiteRT'de yerel değişiklikler yapmak isteyebilirsiniz.
Docker kullanarak derleme ortamı ayarlama
- Docker dosyasını indirin. Docker dosyasını indirerek kullanımınızın aşağıdaki hizmet şartlarına tabi olduğunu kabul edersiniz:
Kabul etmek için tıkladığınızda, Android Studio ve Android Native Development Kit'in tüm kullanımının https://developer.android.com/studio/terms adresinde bulunan Android Yazılım Geliştirme Kiti Lisans Sözleşmesi'ne (Google bu URL'yi zaman zaman güncelleyebilir veya değiştirebilir) tabi olacağını kabul edersiniz.
Dosyayı indirmek için hizmet şartlarını kabul etmeniz gerekir.- Android SDK veya NDK sürümünü isteğe bağlı olarak değiştirebilirsiniz. İndirilen Docker dosyasını boş bir klasöre yerleştirin ve aşağıdaki komutu çalıştırarak Docker görüntünüzü oluşturun:
docker build . -t tflite-builder -f tflite-android.Dockerfile
- Mevcut klasörünüzü kapsayıcıdaki /host_dir'e bağlayarak Docker kapsayıcısını etkileşimli olarak başlatın (/tensorflow_src'nin kapsayıcıdaki TensorFlow deposu olduğunu unutmayın):
docker run -it -v $PWD:/host_dir tflite-builder bash
Windows'da PowerShell kullanıyorsanız "$PWD" yerine "pwd" yazın.
Ana makinede bir TensorFlow deposu kullanmak istiyorsanız bunun yerine ana makine dizinini bağlayın (-v hostDir:/host_dir).
- Kapsayıcının içindeyken ek Android araçlarını ve kitaplıklarını indirmek için aşağıdakileri çalıştırabilirsiniz (lisansı kabul etmeniz gerekebilir):
sdkmanager \
"build-tools;${ANDROID_BUILD_TOOLS_VERSION}" \
"platform-tools" \
"platforms;android-${ANDROID_API_LEVEL}"
Şimdi derleme ayarlarını yapılandırmak için WORKSPACE ve .bazelrc yapılandırma bölümüne geçmelisiniz.
Kitaplıkları oluşturmayı tamamladıktan sonra, ana makinede erişebilmek için bunları kapsayıcının içindeki /host_dir dizinine kopyalayabilirsiniz.
Docker olmadan derleme ortamı ayarlama
Bazel ve Android Ön Koşullarını Yükleme
Bazel, TensorFlow'un birincil derleme sistemidir. Bu araçla geliştirme yapmak için sisteminizde Android NDK ve SDK'nın yanı sıra bu aracı da yüklemiş olmanız gerekir.
- Bazel derleme sisteminin en son sürümünü yükleyin.
- Yerel (C/C++) LiteRT kodunu oluşturmak için Android NDK gereklidir. Şu anda önerilen sürüm 25b'dir ve buradan indirilebilir.
- Android SDK ve derleme araçlarını buradan veya Android Studio'nun bir parçası olarak edinebilirsiniz. Derleme araçları LiteRT'yi oluşturmak için API >= 23 sürümü önerilir.
WORKSPACE ve .bazelrc dosyalarını yapılandırma
Bu, LiteRT kitaplıklarını oluşturmak için gereken tek seferlik bir yapılandırma adımıdır. Kök TensorFlow ödeme dizininde ./configure komut dosyasını çalıştırın ve komut dosyası, Android derlemeleri için ./WORKSPACE'ı etkileşimli olarak yapılandırmanızı istediğinde "Evet" yanıtını verin. Komut dosyası, aşağıdaki ortam değişkenlerini kullanarak ayarları yapılandırmaya çalışır:
ANDROID_SDK_HOMEANDROID_SDK_API_LEVELANDROID_NDK_HOMEANDROID_NDK_API_LEVEL
Bu değişkenler ayarlanmamışsa komut isteminde etkileşimli olarak sağlanmalıdır. Başarılı bir yapılandırma, kök klasördeki .tf_configure.bazelrc dosyasında aşağıdakine benzer girişler oluşturmalıdır:
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"
Derleme ve yükleme
Bazel düzgün şekilde yapılandırıldıktan sonra, LiteRT AAR'yi kök ödeme dizininden aşağıdaki gibi oluşturabilirsiniz:
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
Bu işlem, bazel-bin/tensorflow/lite/java/ içinde bir AAR dosyası oluşturur. Bu işlemin, birkaç farklı mimari içeren "büyük" bir AAR oluşturduğunu unutmayın. Bunların hepsine ihtiyacınız yoksa dağıtım ortamınız için uygun olan alt grubu kullanın.
Yalnızca bir grup modeli hedefleyen daha küçük AAR dosyaları oluşturabilirsiniz:
bash tensorflow/lite/tools/build_aar.sh \
--input_models=model1,model2 \
--target_archs=x86,x86_64,arm64-v8a,armeabi-v7a
Yukarıdaki komut dosyası tensorflow-lite.aar dosyasını ve isteğe bağlı olarak tensorflow-lite-select-tf-ops.aar dosyasını (modellerden biri Tensorflow işlemleri kullanıyorsa) oluşturur. Daha fazla bilgi için lütfen LiteRT ikili dosya boyutunu küçültme bölümüne bakın.
AAR'yi doğrudan projeye ekleme
tensorflow-lite.aar dosyasını projenizdeki libs adlı bir dizine taşıyın. Uygulamanızın build.gradle dosyasını yeni dizine referans verecek şekilde değiştirin ve mevcut LiteRT bağımlılığını yeni yerel kitaplıkla değiştirin. Örneğin:
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'yi yerel Maven deposuna yükleme
Kök ödeme dizininizden aşağıdaki komutu çalıştırı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
Uygulamanızın build.gradle bölümünde mavenLocal() bağımlılığının bulunduğundan emin olun ve standart LiteRT bağımlılığını, belirli TensorFlow işlemleri için destek içeren bağımlılıkla değiştirin:
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'
}
Buradaki 0.1.100 sürümünün tamamen test/geliştirme amaçlı olduğunu unutmayın. Yerel AAR yüklendikten sonra, uygulama kodunuzda standart LiteRT Java çıkarım API'lerini kullanabilirsiniz.