LiteRT Next API는 Kotlin에서 사용할 수 있으며, Android 개발자에게 고급 API에 액세스할 수 있는 원활한 개발 환경을 제공합니다.
Kotlin의 LiteRT Next 애플리케이션 예는 Kotlin을 사용한 이미지 세분화 데모를 참고하세요.
시작하기
Android 애플리케이션에 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 */ })
모델 호출
입력 및 출력 버퍼를 제공하고 컴파일된 모델을 실행합니다.
model.run(inputBuffers, outputBuffers)
출력 검색
메모리에서 모델 출력을 직접 읽어 출력을 검색합니다.
val outputFloatArray = outputBuffers[0].readFloat()
주요 개념 및 구성요소
LiteRT Next Kotlin API의 주요 개념과 구성요소에 관한 자세한 내용은 다음 섹션을 참고하세요.
기본 추론 (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)
컴파일된 모델 API (CompiledModel
)는 모델을 로드하고, 하드웨어 가속을 적용하고, 런타임을 인스턴스화하고, 입력 및 출력 버퍼를 만들고, 추론을 실행합니다.
다음의 단순화된 코드 스니펫은 Compiled Model API가 LiteRT 모델 (.tflite
)을 사용하여 추론을 실행할 준비가 된 컴파일된 모델을 만드는 방법을 보여줍니다.
val model =
CompiledModel.create(
context.assets,
"mymodel.tflite"
)
다음의 단순화된 코드 스니펫은 CompiledModel
API가 입력 버퍼와 출력 버퍼를 가져와 컴파일된 모델로 추론을 실행하는 방법을 보여줍니다.
// 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의 소스 코드를 참고하세요.