הפעלת LiteRT Compiled Model API ב-Android באמצעות Kotlin

ממשק ה-API של LiteRT Compiled Model זמין ב-Kotlin, ומציע למפתחי Android חוויה חלקה, שמתמקדת בהאצה, עם ממשקי API ברמה גבוהה.

דוגמה לאפליקציית LiteRT ב-Kotlin זמינה בהדגמה של פילוח תמונות באמצעות Kotlin.

שנתחיל?

כדי להוסיף את LiteRT Compiled Model API לאפליקציית Android:

הוספת חבילת Maven

מוסיפים לאפליקציה את התלות ב-LiteRT באמצעות Compiled Model API:

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

אם משתמשים בזיכרון של המעבד, ממלאים את נתוני הקלט על ידי כתיבת הנתונים ישירות במאגר הקלט הראשון.

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

הפעלת המודל

מספקים את מאגרי הקלט והפלט ומריצים את המודל שעבר קומפילציה.

model.run(inputBuffers, outputBuffers)

אחזור פלטים

אחזור פלטים על ידי קריאה ישירה של פלט המודל מהזיכרון.

val outputFloatArray = outputBuffers[0].readFloat()

מושגים ורכיבים מרכזיים

בקטעים הבאים מוסבר על מושגים ורכיבים מרכזיים של ממשקי ה-API של LiteRT Kotlin Compiled Model.

הסקת מסקנות בסיסית (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"
  )

בקטע הקוד הפשוט הבא אפשר לראות איך ה-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.

Tensor Buffer (TensorBuffer)

‫LiteRT מספק תמיכה מובנית ביכולת פעולה הדדית של מאגר I/O, באמצעות Tensor Buffer API ‏ (TensorBuffer) כדי לטפל בזרימת הנתונים אל CompiledModel וממנו. Tensor Buffer API מאפשר לכתוב (Write<T>()) ולקרוא (Read<T>()) מאגרי נתונים ולנעול אותם.

כדי לקבל תמונה מלאה יותר של אופן ההטמעה של Tensor Buffer API, אפשר לעיין בקוד המקור בכתובת TensorBuffer.kt.