Do platformy LiteRT w Usługach Google Play można też uzyskać dostęp za pomocą interfejsów Java API w z natywnym interfejsem API. W szczególności dotyczy to LiteRT w Google Play są dostępne za pomocą aplikacji LiteRT Interpreter API.
Korzystanie z interfejsów Interpreter API
Interfejs API LiteRT Interpreter udostępniany przez środowisko wykonawcze TensorFlow zapewnia interfejs ogólnego przeznaczenia do tworzenia i uruchamiania modeli systemów uczących się. Użyj te kroki, aby uruchomić wnioskowania za pomocą interfejsu Interpreter API za pomocą TensorFlow Lite w środowisku wykonawczym Usług Google Play.
1. Dodawanie zależności projektu
Aby uzyskać dostęp do Google Play, dodaj te zależności do kodu projektu aplikacji API usług dla LiteRT:
dependencies {
...
// LiteRT dependencies for Google Play services
implementation 'com.google.android.gms:play-services-tflite-java:16.0.1'
// Optional: include LiteRT Support Library
implementation 'com.google.android.gms:play-services-tflite-support:16.0.1'
...
}
2. Dodaj inicjowanie LiteRT.
Przed użyciem interfejsów API LiteRT zainicjuj komponent LiteRT interfejsu API usług Google Play:
Kotlin
val initializeTask: Task<Void> by lazy { TfLite.initialize(this) }
Java
Task<Void> initializeTask = TfLite.initialize(context);
3. Tworzenie tłumacza i ustawianie opcji środowiska wykonawczego
Utwórz interpretera za pomocą funkcji InterpreterApi.create()
i skonfiguruj go do używania środowiska wykonawczego Usług Google Play, wywołując funkcję InterpreterApi.Options.setRuntime()
, jak pokazano w tym przykładowym kodzie:
Kotlin
import org.tensorflow.lite.InterpreterApi import org.tensorflow.lite.InterpreterApi.Options.TfLiteRuntime ... private lateinit var interpreter: InterpreterApi ... initializeTask.addOnSuccessListener { val interpreterOption = InterpreterApi.Options().setRuntime(TfLiteRuntime.FROM_SYSTEM_ONLY) interpreter = InterpreterApi.create( modelBuffer, interpreterOption )} .addOnFailureListener { e -> Log.e("Interpreter", "Cannot initialize interpreter", e) }
Java
import org.tensorflow.lite.InterpreterApi import org.tensorflow.lite.InterpreterApi.Options.TfLiteRuntime ... private InterpreterApi interpreter; ... initializeTask.addOnSuccessListener(a -> { interpreter = InterpreterApi.create(modelBuffer, new InterpreterApi.Options().setRuntime(TfLiteRuntime.FROM_SYSTEM_ONLY)); }) .addOnFailureListener(e -> { Log.e("Interpreter", String.format("Cannot initialize interpreter: %s", e.getMessage())); });
Użyj implementacji powyżej, ponieważ zapobiega ona blokowaniu wątku interfejsu użytkownika Androida. Jeśli chcesz lepiej zarządzać wykonywaniem wątków,
może dodać wywołanie Tasks.await()
do tworzenia tłumaczenia rozmowy:
Kotlin
import androidx.lifecycle.lifecycleScope ... lifecycleScope.launchWhenStarted { // uses coroutine initializeTask.await() }
Java
@BackgroundThread InterpreterApi initializeInterpreter() { Tasks.await(initializeTask); return InterpreterApi.create(...); }
4. Uruchom wnioskowania
Korzystając z utworzonego obiektu interpreter
, wywołaj metodę run()
, aby wygenerować wnioskowanie.
Kotlin
interpreter.run(inputBuffer, outputBuffer)
Java
interpreter.run(inputBuffer, outputBuffer);
akceleracja sprzętowa,
LiteRT pozwala przyspieszyć wydajność modelu przy użyciu specjalistyczne procesory sprzętowe, takie jak procesory graficzne (GPU). Możesz korzystać z tych wyspecjalizowanych procesorów za pomocą sterowników sprzętowych zwanych podmiotami delegowanymi.
GPU delegate jest udostępniany przez usługi Google Play i ładowany dynamicznie, podobnie jak wersje interfejsu Interpreter API w Usługach Google Play.
Sprawdzanie zgodności urządzeń
Nie wszystkie urządzenia obsługują akcelerację sprzętową GPU z użyciem TFLite. Aby
i eliminować ewentualne błędy, skorzystaj ze
Metoda TfLiteGpu.isGpuDelegateAvailable
, która pozwala sprawdzić, czy urządzenie
z delegatem GPU.
Użyj tej metody, aby sprawdzić, czy urządzenie jest zgodne z GPU, i używać procesora w sytuacji, gdy GPU nie jest obsługiwane.
useGpuTask = TfLiteGpu.isGpuDelegateAvailable(context)
Gdy masz już zmienną taką jak useGpuTask
, możesz jej używać do określenia, czy
urządzenia używają delegata GPU.
Kotlin
val interpreterTask = useGpuTask.continueWith { task -> val interpreterOptions = InterpreterApi.Options() .setRuntime(TfLiteRuntime.FROM_SYSTEM_ONLY) if (task.result) { interpreterOptions.addDelegateFactory(GpuDelegateFactory()) } InterpreterApi.create(FileUtil.loadMappedFile(context, MODEL_PATH), interpreterOptions) }
Java
Task<InterpreterApi.Options> interpreterOptionsTask = useGpuTask.continueWith({ task -> InterpreterApi.Options options = new InterpreterApi.Options().setRuntime(TfLiteRuntime.FROM_SYSTEM_ONLY); if (task.getResult()) { options.addDelegateFactory(new GpuDelegateFactory()); } return options; });
GPU z interfejsami API tłumaczenia rozmowy
Aby użyć delegowania do GPU w ramach interfejsów Interpreter API:
Zaktualizuj zależności projektu, aby używać delegowania GPU z Usług Google Play:
implementation 'com.google.android.gms:play-services-tflite-gpu:16.1.0'
Włącz opcję delegowania GPU podczas inicjowania TFLite:
Kotlin
TfLite.initialize(context, TfLiteInitializationOptions.builder() .setEnableGpuDelegateSupport(true) .build())
Java
TfLite.initialize(context, TfLiteInitializationOptions.builder() .setEnableGpuDelegateSupport(true) .build());
Włącz przekazywanie dostępu do GPU w opcjach tłumaczenia rozmowy: ustaw fabrykę przekazywania na GpuDelegateFactory przez wywołanie
addDelegateFactory() within
InterpreterApi.Options():Kotlin
val interpreterOption = InterpreterApi.Options() .setRuntime(TfLiteRuntime.FROM_SYSTEM_ONLY) .addDelegateFactory(GpuDelegateFactory())
Java
Options interpreterOption = InterpreterApi.Options() .setRuntime(TfLiteRuntime.FROM_SYSTEM_ONLY) .addDelegateFactory(new GpuDelegateFactory());
Migracja z samodzielnego LiteRT
Jeśli planujesz migrację swojej aplikacji z samodzielnej platformy LiteRT do Play Services API; zapoznaj się z tymi dodatkowymi wskazówkami dotyczącymi aktualizacji kod projektu aplikacji:
- Przejrzyj sekcję Ograniczenia na tej stronie, aby sprawdzić, czy Twój przypadek użycia jest obsługiwany.
- Zanim zaktualizujesz kod, sprawdź wydajność i dokładność swoich modeli, zwłaszcza jeśli używasz wersji LiteRT starszych niż 2.1. Dzięki temu będziesz mieć punkt odniesienia do porównania z nową implementacją.
- Jeśli cały kod został przeniesiony do interfejsu API Usług Google Play w celu użycia LiteRT, musisz usunąć istniejące zależności biblioteki runtime LiteRT (elementy z
org.tensorflow:tensorflow-lite:*
) z pliku build.gradle, aby zmniejszyć rozmiar aplikacji. - Zidentyfikuj wszystkie wystąpienia w kodzie tworzenia obiektu
new Interpreter
, i zmodyfikować każdy z nich tak, aby używał wywołania InterpreterApi.create(). Nowa metoda TfLite.initialize jest asynchroniczna, co oznacza, że w większości przypadków nie jest to bezpośrednia wymiana: musisz zarejestrować odbiornik na czas zakończenia wywołania. Skorzystaj z fragmentu kodu w kroku 3. - Dodaj
import org.tensorflow.lite.InterpreterApi;
iimport org.tensorflow.lite.InterpreterApi.Options.TfLiteRuntime;
do dowolnego źródła za pomocą tagóworg.tensorflow.lite.Interpreter
luborg.tensorflow.lite.InterpreterApi
zajęć. - Jeśli któreś z wynikających z tego wywołań funkcji
InterpreterApi.create()
ma tylko 1 argument, dodaj do listy argumentów elementnew InterpreterApi.Options()
. - Dodaj
.setRuntime(TfLiteRuntime.FROM_SYSTEM_ONLY)
do ostatniego argumentu dowolnego wywołania funkcjiInterpreterApi.create()
. - Zastąp wszystkie inne wystąpienia klasy
org.tensorflow.lite.Interpreter
wartościąorg.tensorflow.lite.InterpreterApi
.
Jeśli chcesz używać samodzielnego LiteRT i interfejsu API usług Google Play jednocześnie, musisz używać LiteRT w wersji 2.9 (lub nowszej). LiteRT w wersji 2.8 i starszych nie jest zgodny z wersją interfejsu API Usług Google Play.