API های LiteRT Next در Kotlin موجود هستند که به توسعه دهندگان اندروید تجربه توسعه یکپارچه با دسترسی به API های سطح بالا را ارائه می دهد.
برای نمونهای از برنامه LiteRT Next در Kotlin، بخشبندی تصویر با نسخه نمایشی Kotlin را ببینید.
شروع کنید
از مراحل زیر برای افزودن LiteRT Next به برنامه اندروید خود استفاده کنید.
بسته Maven را اضافه کنید
وابستگی LiteRT Next را به برنامه خود اضافه کنید:
dependencies {
...
implementation `com.google.ai.edge.litert:litert:2.0.0-alpha`
}
مدل کامپایل شده را ایجاد کنید
با استفاده از CompiledModel
API، زمان اجرا را با یک مدل و انتخاب شتاب سخت افزاری خود مقداردهی کنید:
val model =
CompiledModel.create(
context.assets,
"mymodel.tflite",
CompiledModel.Options(Accelerator.CPU),
env,
)
ایجاد بافر ورودی و خروجی
ساختارهای داده (بافر) لازم را ایجاد کنید تا داده های ورودی را که برای استنتاج به مدل تغذیه می کنید و داده های خروجی که مدل پس از اجرای استنتاج تولید می کند، نگهداری کنید.
val inputBuffers = model.createInputBuffers()
val outputBuffers = model.createOutputBuffers()
اگر از حافظه CPU استفاده می کنید، ورودی ها را با نوشتن مستقیم داده ها در اولین بافر ورودی پر کنید.
inputBuffers[0].writeFloat(FloatArray(data_size) { data_value /* your data */ })
مدل را فراخوانی کنید
با ارائه بافرهای ورودی و خروجی، Compiled Model را اجرا کنید.
model.run(inputBuffers, outputBuffers)
بازیابی خروجی ها
خروجی ها را با خواندن مستقیم خروجی مدل از حافظه بازیابی کنید.
val outputFloatArray = outputBuffers[0].readFloat()
مفاهیم و اجزای کلیدی
برای اطلاعات در مورد مفاهیم کلیدی و اجزای API های LiteRT Next Kotlin به بخش های زیر مراجعه کنید.
استنتاج پایه (CPU)
در زیر پیاده سازی فشرده و ساده شده استنتاج با 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)
Compiled Model 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()
برای مشاهده کاملتر نحوه پیادهسازی CompiledModel
API، به کد منبع در Model.kt مراجعه کنید.
بافر تانسور (TensorBuffer)
LiteRT Next با استفاده از Tensor Buffer API ( TensorBuffer
) برای مدیریت جریان داده ها به داخل و خارج از CompiledModel
، پشتیبانی داخلی برای قابلیت همکاری بافر I/O ارائه می کند. Tensor Buffer API توانایی نوشتن ( Write<T>()
) و خواندن ( Read<T>()
) و قفل کردن بافرها را فراهم می کند.
برای مشاهده کاملتر نحوه پیادهسازی Tensor Buffer API، به کد منبع در TensorBuffer.kt مراجعه کنید.