API โมเดลที่คอมไพล์แล้วของ LiteRT พร้อมใช้งานใน Kotlin ซึ่งมอบประสบการณ์การใช้งานที่ราบรื่นและเน้นตัวเร่งเป็นอันดับแรกด้วย API ระดับสูงสำหรับนักพัฒนาแอป Android
ดูตัวอย่างแอปพลิเคชัน LiteRT ใน Kotlin ได้ที่การแบ่งกลุ่มรูปภาพด้วย Kotlin สาธิต
เริ่มต้นใช้งาน
ทำตามขั้นตอนต่อไปนี้เพื่อเพิ่ม LiteRT Compiled Model API ลงในแอปพลิเคชัน Android
เพิ่มแพ็กเกจ Maven
เพิ่มทรัพยากร Dependency ของ 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()
หากใช้หน่วยความจำ CPU ให้กรอกข้อมูลโดยเขียนข้อมูลลงใน บัฟเฟอร์อินพุตแรกโดยตรง
inputBuffers[0].writeFloat(FloatArray(data_size) { data_value /* your data */ })
เรียกใช้โมเดล
ระบุบัฟเฟอร์อินพุตและเอาต์พุต แล้วเรียกใช้โมเดลที่คอมไพล์แล้ว
model.run(inputBuffers, outputBuffers)
ดึงข้อมูลเอาต์พุต
ดึงข้อมูลผลลัพธ์โดยการอ่านเอาต์พุตของโมเดลจากหน่วยความจำโดยตรง
val outputFloatArray = outputBuffers[0].readFloat()
แนวคิดและคอมโพเนนต์หลัก
ดูข้อมูลเกี่ยวกับแนวคิดและคอมโพเนนต์หลักของ LiteRT Kotlin Compiled Model 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)
Compiled Model 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
บัฟเฟอร์ Tensor (TensorBuffer)
LiteRT มีการรองรับความสามารถในการทำงานร่วมกันของบัฟเฟอร์ I/O ในตัว โดยใช้ Tensor Buffer API (TensorBuffer) เพื่อจัดการการไหลของข้อมูลเข้าและออกจาก CompiledModel Tensor Buffer API ช่วยให้เขียน
(Write<T>()) อ่าน (Read<T>()) และล็อกบัฟเฟอร์ได้
ดูมุมมองที่สมบูรณ์ยิ่งขึ้นเกี่ยวกับวิธีติดตั้งใช้งาน Tensor Buffer API ได้ที่ ซอร์สโค้ดใน TensorBuffer.kt