Chạy API Mô hình đã biên dịch LiteRT trên Android bằng Kotlin

API Mô hình đã biên dịch LiteRT có trong Kotlin, mang đến cho nhà phát triển Android trải nghiệm liền mạch, ưu tiên bộ tăng tốc với các API cấp cao.

Để xem ví dụ về ứng dụng LiteRT bằng Kotlin, hãy xem Bản minh hoạ phân đoạn hình ảnh bằng Kotlin.

Bắt đầu

Hãy làm theo các bước sau để thêm LiteRT Compiled Model API vào ứng dụng Android của bạn.

Thêm gói Maven

Thêm phần phụ thuộc LiteRT bằng Compiled Model API vào ứng dụng của bạn:

dependencies {
  ...
  implementation `com.google.ai.edge.litert:litert:2.0.0-alpha`
}

Tạo Mô hình đã biên dịch

Khi sử dụng API CompiledModel, hãy khởi động thời gian chạy bằng một mô hình và lựa chọn tăng tốc phần cứng của bạn:

val  model =
  CompiledModel.create(
    context.assets,
    "mymodel.tflite",
    CompiledModel.Options(Accelerator.CPU),
    env,
  )

Tạo vùng đệm đầu vào và đầu ra

Tạo các cấu trúc dữ liệu (vùng đệm) cần thiết để lưu trữ dữ liệu đầu vào mà bạn sẽ đưa vào mô hình để suy luận và dữ liệu đầu ra mà mô hình tạo ra sau khi chạy suy luận.

val inputBuffers = model.createInputBuffers()
val outputBuffers = model.createOutputBuffers()

Nếu bạn đang sử dụng bộ nhớ CPU, hãy điền dữ liệu đầu vào bằng cách ghi dữ liệu trực tiếp vào vùng đệm đầu vào đầu tiên.

inputBuffers[0].writeFloat(FloatArray(data_size) { data_value /* your data */ })

Gọi mô hình

Cung cấp các vùng đệm đầu vào và đầu ra, hãy chạy Mô hình đã biên dịch.

model.run(inputBuffers, outputBuffers)

Truy xuất dữ liệu đầu ra

Truy xuất đầu ra bằng cách đọc trực tiếp đầu ra của mô hình từ bộ nhớ.

val outputFloatArray = outputBuffers[0].readFloat()

Các khái niệm và thành phần chính

Hãy tham khảo các phần sau để biết thông tin về các khái niệm và thành phần chính của API Mô hình đã biên dịch Kotlin LiteRT.

Suy luận cơ bản (CPU)

Sau đây là một cách triển khai suy luận đơn giản, cô đọng bằng 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()

Mô hình đã biên dịch (CompiledModel)

Compiled Model API (CompiledModel) chịu trách nhiệm tải một mô hình, áp dụng tính năng tăng tốc phần cứng, khởi tạo thời gian chạy, tạo bộ đệm đầu vào và đầu ra, đồng thời chạy suy luận.

Đoạn mã đơn giản sau đây minh hoạ cách Compiled Model API lấy một mô hình LiteRT (.tflite) và tạo một mô hình đã biên dịch sẵn sàng chạy suy luận.

val  model =
  CompiledModel.create(
    context.assets,
    "mymodel.tflite"
  )

Đoạn mã đơn giản sau đây minh hoạ cách API CompiledModel nhận một vùng đệm đầu vào và đầu ra, đồng thời chạy các suy luận bằng mô hình đã biên dịch.

// 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()

Để xem đầy đủ hơn về cách triển khai API CompiledModel, hãy xem mã nguồn tại Model.kt.

Vùng đệm tensor (TensorBuffer)

LiteRT cung cấp khả năng hỗ trợ tích hợp cho khả năng tương tác của bộ đệm I/O, sử dụng Tensor Buffer API (TensorBuffer) để xử lý luồng dữ liệu vào và ra khỏi CompiledModel. Tensor Buffer API cung cấp khả năng ghi (Write<T>()) và đọc (Read<T>()), cũng như khoá các vùng đệm.

Để biết thông tin đầy đủ hơn về cách triển khai Tensor Buffer API, hãy xem mã nguồn tại TensorBuffer.kt.