Wbudowana biblioteka operatorów LiteRT obsługuje tylko liczba operatorów TensorFlow, nie każdy model można konwertować. Więcej informacji: znajdziesz w artykule o zgodności operatorów.
Aby umożliwić konwersję, użytkownicy mogą włączyć korzystanie z określonych TensorFlow Ops w modelu LiteRT. Uruchomienie Modele LiteRT z operacjami TensorFlow wymagają wciągania Środowisko wykonawcze TensorFlow, które zwiększa rozmiar pliku binarnego interpretera LiteRT. W przypadku Androida można tego uniknąć, wybiórczo tworząc tylko wymagane elementy Tensorflow . Szczegółowe informacje znajdziesz w artykule Zmniejszanie wartości binarnych rozmiar.
Z tego dokumentu dowiesz się, jak przekonwertować i uruchom model LiteRT zawierający operacje TensorFlow w z wybranej platformy. Omawiamy również skuteczność i rozmiar danych i znanych ograniczeniach.
Konwertowanie modelu
Poniższy przykład pokazuje, jak wygenerować model LiteRT z opcją wyboru Operacje TensorFlow.
import tensorflow as tf
converter = tf.lite.TFLiteConverter.from_saved_model(saved_model_dir)
converter.target_spec.supported_ops = [
tf.lite.OpsSet.TFLITE_BUILTINS, # enable LiteRT ops.
tf.lite.OpsSet.SELECT_TF_OPS # enable TensorFlow ops.
]
tflite_model = converter.convert()
open("converted_model.tflite", "wb").write(tflite_model)
Uruchom wnioskowanie
Jeśli używasz modelu LiteRT, który został przekonwertowany i obsługuje wybierz operacje TensorFlow, klient musi też używać środowiska wykonawczego LiteRT, zawiera niezbędną bibliotekę operacji TensorFlow.
AAR na Androida
Aby zmniejszyć rozmiar pliku binarnego, skompiluj własne pliki AAR zgodnie z instrukcjami przejdź do następnej sekcji. Jeśli rozmiar pliku binarnego nie jest obaw, zalecamy użycie gotowego AAR z operacjami TensorFlow hostowana w MavenCentral.
Możesz to określić w zależnościach build.gradle
, dodając je razem
standardowy AAR LiteRT:
dependencies {
implementation 'org.tensorflow:tensorflow-lite:0.0.0-nightly-SNAPSHOT'
// This dependency adds the necessary TF op support.
implementation 'org.tensorflow:tensorflow-lite-select-tf-ops:0.0.0-nightly-SNAPSHOT'
}
Aby korzystać z nocnych zrzutów ekranu, dodaj opcję Sonatype (ujęcie) .
Po dodaniu zależności wyznacz odpowiedniego przedstawiciela do obsługi Operacje TensorFlow w grafie powinny być instalowane automatycznie w przypadku wykresów wymagających .
Uwaga: zależność operacji TensorFlow jest stosunkowo duża, więc
chcesz odfiltrować z pliku .gradle
niepotrzebne interfejsy ABI x86, konfigurując
abiFilters
.
android {
defaultConfig {
ndk {
abiFilters 'armeabi-v7a', 'arm64-v8a'
}
}
}
Tworzenie aplikacji AAR na Androida
W celu zmniejszenia rozmiaru plików binarnych lub innych zaawansowanych przypadków można również ręcznie. Zakładając działającą kompilację LiteRT, , utwórz aplikację AAR na Androida z wybranymi operacjami TensorFlow jako następujące:
sh tensorflow/lite/tools/build_aar.sh \
--input_models=/a/b/model_one.tflite,/c/d/model_two.tflite \
--target_archs=x86,x86_64,arm64-v8a,armeabi-v7a
Spowoduje to wygenerowanie pliku AAR bazel-bin/tmp/tensorflow-lite.aar
dla
wbudowane i niestandardowe operacje LiteRT, i wygenerować plik AAR,
bazel-bin/tmp/tensorflow-lite-select-tf-ops.aar
dla operacji TensorFlow. Jeśli
nie masz działającego środowiska kompilacji. Możesz też skompilować pliki powyżej pliku
dockera.
Następnie możesz zaimportować pliki AAR bezpośrednio do projektu lub opublikuj niestandardowe pliki AAR w lokalnym repozytorium Maven:
mvn install:install-file \
-Dfile=bazel-bin/tmp/tensorflow-lite.aar \
-DgroupId=org.tensorflow \
-DartifactId=tensorflow-lite -Dversion=0.1.100 -Dpackaging=aar
mvn install:install-file \
-Dfile=bazel-bin/tmp/tensorflow-lite-select-tf-ops.aar \
-DgroupId=org.tensorflow \
-DartifactId=tensorflow-lite-select-tf-ops -Dversion=0.1.100 -Dpackaging=aar
Na koniec w panelu build.gradle
aplikacji sprawdź, czy masz mavenLocal()
i zastąp standardową zależność LiteRT tą, która
obsługuje wybrane operacje 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'
implementation 'org.tensorflow:tensorflow-lite-select-tf-ops:0.1.100'
}
iOS
Korzystanie z CocoaPods
LiteRT zapewnia conoc gotowe, wybrane operacje TF CocoaPods dla arm64
,
na które możesz polegać obok TensorFlowLiteSwift
lub
TensorFlowLiteObjC
CocoaPods.
Uwaga: jeśli musisz użyć wybranych operacji TF w symulatorze x86_64
, możesz utworzyć
wybierz platformę operacji. Zobacz Korzystanie z Bazel + Xcode.
.
# In your Podfile target:
pod 'TensorFlowLiteSwift' # or 'TensorFlowLiteObjC'
pod 'TensorFlowLiteSelectTfOps', '~> 0.0.1-nightly'
Po uruchomieniu funkcji pod install
musisz podać dodatkową flagę tagu łączącego do:
wymuszania wczytywania w projekcie wybranej platformy operacji TF. W projekcie Xcode
przejdź do Build Settings
-> Other Linker Flags
oraz dodać:
2.9.0 w wersji >= 2.9.0:
-force_load $(SRCROOT)/Pods/TensorFlowLiteSelectTfOps/Frameworks/TensorFlowLiteSelectTfOps.xcframework/ios-arm64/TensorFlowLiteSelectTfOps.framework/TensorFlowLiteSelectTfOps
Dla wersji < 2.9.0:
-force_load $(SRCROOT)/Pods/TensorFlowLiteSelectTfOps/Frameworks/TensorFlowLiteSelectTfOps.framework/TensorFlowLiteSelectTfOps
Powinno być możliwe uruchamianie wszystkich modeli przekonwertowanych za pomocą interfejsu SELECT_TF_OPS
w aplikacji na iOS. Możesz na przykład zmodyfikować klasyfikację obrazów iOS
aplikacja
aby przetestować wybraną funkcję operacji TF.
- Zastąp plik modelu plikiem przekonwertowanym z włączoną funkcją
SELECT_TF_OPS
. - Dodaj zależność
TensorFlowLiteSelectTfOps
doPodfile
zgodnie z instrukcjami. - Dodaj podaną wyżej flagę tagu łączącego.
- Uruchom przykładową aplikację i sprawdź, czy model działa prawidłowo.
Korzystanie z Bazel + Xcode
LiteRT z wybranymi operacjami TensorFlow na iOS można tworzyć za pomocą Bazel.
Najpierw postępuj zgodnie z instrukcjami kompilacji na iOS, aby skonfigurować
Prawidłowo obszar roboczy Bazel i plik .bazelrc
.
Po skonfigurowaniu obszaru roboczego z włączoną obsługą iOS możesz korzystać z
to polecenie, aby utworzyć platformę dodatków do operacji TF, którą można dodać.
w porównaniu ze zwykłym TensorFlowLiteC.framework
. Pamiętaj, że wybrane operacje TF
nie można utworzyć dla architektury i386
, więc musisz
podaj listę architektur docelowych z wyłączeniem i386
.
bazel build -c opt --config=ios --ios_multi_cpus=arm64,x86_64 \
//tensorflow/lite/ios:TensorFlowLiteSelectTfOps_framework
Spowoduje to wygenerowanie platformy w: bazel-bin/tensorflow/lite/ios/
katalogu. Możesz dodać tę nową platformę do projektu Xcode, wykonując następujące czynności:
podobne kroki opisane w projekcie Xcode
ustawieniach w panelu
Przewodnik po tworzeniu aplikacji na iOS.
Po dodaniu platformy do projektu aplikacji pojawi się dodatkowa flaga tagu łączącego
powinien być określony w projekcie aplikacji, aby wymusić wczytywanie wybranych operacji TF
platformy. W projekcie Xcode otwórz Build Settings
-> Other Linker
Flags
oraz dodać:
-force_load <path/to/your/TensorFlowLiteSelectTfOps.framework/TensorFlowLiteSelectTfOps>
Kod C/C++
Jeśli do tworzenia LiteRT używasz usługi Bazel lub CMake tłumacza, możesz włączyć przekazywanie dostępu do Flex, łącząc LiteRT Flex przekazać dostęp do biblioteki udostępnionej. Możesz ją utworzyć w Bazelu za pomocą poniższego polecenia.
bazel build -c opt --config=monolithic tensorflow/lite/delegates/flex:tensorflowlite_flex
To polecenie spowoduje wygenerowanie następujących udostępnianych zasobów w
bazel-bin/tensorflow/lite/delegates/flex
Platforma | Nazwa biblioteki |
---|---|
Linux | libtensorflowlite_flex.so |
macOS | libtensorflowlite_flex.dylib |
Windows | tensorflowlite_flex.dll |
Pamiętaj, że niezbędna aplikacja TfLiteDelegate
zostanie zainstalowana automatycznie, gdy
podczas tworzenia języka tłumaczonego podczas działania, o ile połączona jest biblioteka udostępniona, it
nie jest konieczne do jawnego instalowania instancji z przekazanym dostępem, tak jak zwykle
wymagane w przypadku innych typów przedstawicieli.
Uwaga: ta funkcja jest dostępna od wersji 2.7.
Python
LiteRT z wybranymi operacjami TensorFlow zostanie zainstalowany automatycznie pakietu pip TensorFlow. Dostępne opcje wybrać opcję zainstalowania tylko narzędzia tłumaczeniowego LiteRT (pip) .
Dane
Wyniki
Jeśli używasz kombinacji wbudowanych i wybranych operacji TensorFlow, wszystkie funkcje Dostępne będą optymalizacje LiteRT i zoptymalizowane operacje wbudowane których można używać z przekonwertowanym modelem.
Tabela poniżej opisuje średni czas, jaki zajmuje wnioskowanie na podstawie
MobileNet na Pixelu 2. Podane czasy to średnio 100 uruchomień. Te
Cele dla Androida zostały utworzone przy użyciu tych flag: --config=android_arm64 -c opt
.
Kompilacja | Czas (milisekundy) |
---|---|
Tylko operacje wbudowane (TFLITE_BUILTIN ) |
260,7 |
Używanie tylko operacji TF (SELECT_TF_OPS ) |
264,5 |
Wartość atrybutu size pliku binarnego
W tej tabeli opisano rozmiar plików binarnych LiteRT w przypadku każdej kompilacji.
Te cele utworzono dla Androida przy użyciu --config=android_arm -c opt
.
Kompilacja | Rozmiar pliku binarnego C++ | Rozmiar pliku APK na Androida |
---|---|---|
Tylko operacje wbudowane | 796 KB | 561 KB |
Wbudowane operacje + operacje TF | 23,0 MB | 8,0 MB |
Operacje wbudowane + operacje TF (1) | 4,1 MB | 1,8 MB |
(1) Te biblioteki są selektywnie tworzone pod kątem zgodności z modelem i3d-kinetics-400 model z 8 wbudowanymi operacjami TFLite i 3 procesami Tensorflow. Więcej informacji znajdziesz tutaj: Zmniejsz rozmiar pliku binarnego LiteRT.
Znane ograniczenia
- Nieobsługiwane typy: niektóre operacje TensorFlow mogą nie obsługiwać pełnego zestawu typów danych wejściowych/wyjściowych, które są zwykle dostępne w TensorFlow.
Aktualizacje
- Wersja 2.6
- Obsługa operatorów opartych na atrybutach GraphDef i zasobów HashTable i usprawnianie inicjowania.
- Wersja 2.5
- Możesz zastosować optymalizację, czyli potrenowanie kwantyzacja
- Wersja 2.4
- Poprawiła się zgodność z przedstawicielami z akceleracją sprzętową