API скомпилированной модели LiteRT доступно в Kotlin, предлагая разработчикам Android бесперебойный, в первую очередь ускорительный, опыт работы с API высокого уровня.
Пример приложения LiteRT на Kotlin см. в демонстрации «Сегментация изображений с помощью Kotlin» .
Начать
Чтобы добавить API скомпилированной модели LiteRT в ваше приложение Android, выполните следующие действия.
Добавить пакет Maven
Добавьте в свое приложение зависимость LiteRT с API скомпилированной модели:
dependencies {
...
implementation `com.google.ai.edge.litert:litert:2.0.0-alpha`
}
Создать скомпилированную модель
Используя API CompiledModel , инициализируйте среду выполнения с помощью модели и выбранного вами аппаратного ускорения:
val model =
CompiledModel.create(
context.assets,
"mymodel.tflite",
CompiledModel.Options(Accelerator.CPU),
env,
)
Создание входных и выходных буферов
Создайте необходимые структуры данных (буферы) для хранения входных данных, которые вы будете передавать в модель для вывода, и выходных данных, которые модель выдает после выполнения вывода.
val inputBuffers = model.createInputBuffers()
val outputBuffers = model.createOutputBuffers()
Если вы используете память ЦП, заполните входы, записав данные непосредственно в первый входной буфер.
inputBuffers[0].writeFloat(FloatArray(data_size) { data_value /* your data */ })
Вызов модели
Предоставив входные и выходные буферы, запустите скомпилированную модель.
model.run(inputBuffers, outputBuffers)
Получить выходы
Извлекайте выходные данные, напрямую считывая выходные данные модели из памяти.
val outputFloatArray = outputBuffers[0].readFloat()
Ключевые концепции и компоненты
Информацию о ключевых концепциях и компонентах API скомпилированной модели LiteRT Kotlin см. в следующих разделах.
Базовый вывод (ЦП)
Ниже представлена сжатая, упрощенная реализация вывода с помощью 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()
Скомпилированная модель (CompiledModel)
API скомпилированной модели ( CompiledModel ) отвечает за загрузку модели, применение аппаратного ускорения, создание среды выполнения, создание входных и выходных буферов и запуск вывода.
Следующий упрощенный фрагмент кода демонстрирует, как API скомпилированной модели берет модель LiteRT ( .tflite ) и создает скомпилированную модель, готовую к выполнению вывода.
val model =
CompiledModel.create(
context.assets,
"mymodel.tflite"
)
Следующий упрощенный фрагмент кода демонстрирует, как API CompiledModel принимает входной и выходной буферы и выполняет выводы с использованием скомпилированной модели.
// 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()
Более полное представление о реализации API CompiledModel можно найти в исходном коде Model.kt .
Тензорный буфер (TensorBuffer)
LiteRT предоставляет встроенную поддержку взаимодействия с буферами ввода-вывода, используя API Tensor Buffer ( TensorBuffer ) для управления потоком данных в CompiledModel и из него. API Tensor Buffer предоставляет возможность записи ( Write<T>() ) и чтения ( Read<T>() ), а также блокировки буферов.
Более полное представление о реализации API Tensor Buffer можно найти в исходном коде на TensorBuffer.kt .