LiteRT 컴파일된 모델 API는 Kotlin에서 사용할 수 있으며 Android 개발자에게 고급 API를 통해 원활한 가속기 우선 환경을 제공합니다.
Kotlin의 LiteRT 애플리케이션 예는 Kotlin을 사용한 이미지 세분화 데모를 참고하세요.
시작하기
다음 단계에 따라 Android 애플리케이션에 LiteRT 컴파일된 모델 API를 추가하세요.
Maven 패키지 추가
컴파일된 모델 API를 사용하여 LiteRT 종속 항목을 애플리케이션에 추가합니다.
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 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)는 모델을 로드하고, 하드웨어 가속을 적용하고, 런타임을 인스턴스화하고, 입력 및 출력 버퍼를 생성하고, 추론을 실행합니다.
다음은 간소화된 코드 스니펫으로, 컴파일된 모델 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는 텐서 버퍼 API (TensorBuffer)를 사용하여 CompiledModel로 들어오고 나가는 데이터 흐름을 처리함으로써 I/O 버퍼 상호 운용성을 기본적으로 지원합니다. 텐서 버퍼 API는 버퍼를 쓰고(Write<T>()) 읽고 (Read<T>()) 잠그는 기능을 제공합니다.
Tensor Buffer API가 구현되는 방식을 더 자세히 알아보려면 TensorBuffer.kt의 소스 코드를 참고하세요.