Interfejs LiteRT Compiled Model API jest dostępny w języku Kotlin, co zapewnia deweloperom Androida bezproblemową obsługę akceleratorów dzięki interfejsom API wysokiego poziomu.
Przykład aplikacji LiteRT w Kotlinie znajdziesz w demonstracji segmentacji obrazu w Kotlinie.
Rozpocznij
Aby dodać interfejs LiteRT Compiled Model API do aplikacji na Androida, wykonaj te czynności.
Dodawanie pakietu Maven
Dodaj do aplikacji zależność LiteRT za pomocą interfejsu Compiled Model API:
dependencies {
...
implementation `com.google.ai.edge.litert:litert:2.0.0-alpha`
}
Tworzenie skompilowanego modelu
Za pomocą interfejsu CompiledModel API zainicjuj środowisko wykonawcze z modelem i wybraną akceleracją sprzętową:
val model =
CompiledModel.create(
context.assets,
"mymodel.tflite",
CompiledModel.Options(Accelerator.CPU),
env,
)
Tworzenie buforów wejściowych i wyjściowych
Utwórz niezbędne struktury danych (bufory) do przechowywania danych wejściowych, które będziesz przekazywać do modelu na potrzeby wnioskowania, oraz danych wyjściowych, które model generuje po uruchomieniu wnioskowania.
val inputBuffers = model.createInputBuffers()
val outputBuffers = model.createOutputBuffers()
Jeśli używasz pamięci procesora, wypełnij pola wejściowe, wpisując dane bezpośrednio do pierwszego bufora wejściowego.
inputBuffers[0].writeFloat(FloatArray(data_size) { data_value /* your data */ })
Wywoływanie modelu
Podaj bufory wejściowe i wyjściowe, a następnie uruchom skompilowany model.
model.run(inputBuffers, outputBuffers)
Pobieranie danych wyjściowych
Pobieraj dane wyjściowe, odczytując je bezpośrednio z pamięci.
val outputFloatArray = outputBuffers[0].readFloat()
Kluczowe pojęcia i komponenty
W kolejnych sekcjach znajdziesz informacje o kluczowych pojęciach i komponentach interfejsów LiteRT Kotlin Compiled Model API.
Podstawowe wnioskowanie (CPU)
Poniżej znajdziesz skróconą, uproszczoną implementację wnioskowania za pomocą LiteRT Next.
// Load model and initialize runtime
val model =
CompiledModel.create(
context.assets,
"mymodel.tflite"
)
// Preallocate input/output buffers
val inputBuffers = model.createInputBuffers()
val outputBuffers = model.createOutputBuffers()
// Fill the first input
inputBuffers[0].writeFloat(FloatArray(data_size) { data_value /* your data */ })
// Invoke
model.run(inputBuffers, outputBuffers)
// Read the output
val outputFloatArray = outputBuffers[0].readFloat()
// Clean up buffers and model
inputBuffers.forEach { it.close() }
outputBuffers.forEach { it.close() }
model.close()
Skompilowany model (CompiledModel)
Interfejs Compiled Model API (CompiledModel) odpowiada za wczytywanie modelu, stosowanie akceleracji sprzętowej, tworzenie instancji środowiska wykonawczego, tworzenie buforów wejściowych i wyjściowych oraz uruchamianie wnioskowania.
Poniższy uproszczony fragment kodu pokazuje, jak interfejs Compiled Model API pobiera model LiteRT (.tflite) i tworzy skompilowany model gotowy do uruchomienia wnioskowania.
val model =
CompiledModel.create(
context.assets,
"mymodel.tflite"
)
Poniższy uproszczony fragment kodu pokazuje, jak interfejs CompiledModel API przyjmuje bufor wejściowy i wyjściowy oraz przeprowadza wnioskowanie za pomocą skompilowanego modelu.
// Preallocate input/output buffers
val inputBuffers = model.createInputBuffers()
val outputBuffers = model.createOutputBuffers()
// Fill the first input
inputBuffers[0].writeFloat(FloatArray(data_size) { data_value /* your data */ })
// Invoke
model.run(inputBuffers, outputBuffers)
// Read the output
val outputFloatArray = outputBuffers[0].readFloat()
// Clean up buffers and model
inputBuffers.forEach { it.close() }
outputBuffers.forEach { it.close() }
model.close()
Aby uzyskać pełniejszy obraz implementacji interfejsu CompiledModel API, zapoznaj się z kodem źródłowym w pliku Model.kt.
Bufor tensora (TensorBuffer)
LiteRT zapewnia wbudowaną obsługę interoperacyjności buforów wejścia/wyjścia za pomocą interfejsu Tensor Buffer API (TensorBuffer), który obsługuje przepływ danych do i z CompiledModel. Interfejs Tensor Buffer API umożliwia zapisywanie (Write<T>()) i odczytywanie (Read<T>()) oraz blokowanie buforów.
Aby uzyskać pełniejszy obraz implementacji interfejsu Tensor Buffer API, zapoznaj się z kodem źródłowym w TensorBuffer.kt.