LiteRT Next เป็นชุด API ใหม่ที่ปรับปรุงจาก LiteRT โดยเฉพาะอย่างยิ่งในแง่ของการเร่งด้วยฮาร์ดแวร์และประสิทธิภาพสําหรับแอปพลิเคชัน ML และ AI ในอุปกรณ์ API เหล่านี้เป็นรุ่นอัลฟ่าและพร้อมใช้งานใน Kotlin และ C++
LiteRT Next Compiled Model API สร้างขึ้นจาก TensorFlow Lite Interpreter API และลดความซับซ้อนของกระบวนการโหลดและเรียกใช้โมเดลสําหรับการเรียนรู้ของเครื่องในอุปกรณ์ API ใหม่นี้มอบวิธีใหม่ในการใช้การเร่งด้วยฮาร์ดแวร์ ซึ่งทำให้ไม่ต้องจัดการกับ FlatBuffers ของโมเดล บัฟเฟอร์ I/O การทำงานร่วมกัน และตัวดำเนินการ LiteRT Next API ใช้ร่วมกับ LiteRT API ไม่ได้ หากต้องการใช้ฟีเจอร์จาก LiteRT Next โปรดดูคู่มือเริ่มต้นใช้งาน
ดูตัวอย่างการใช้งาน LiteRT Next ได้จากแอปพลิเคชันสาธิตต่อไปนี้
คู่มือเริ่มใช้งานฉบับย่อ
การดำเนินการอนุมานด้วย LiteRT Next API ประกอบด้วยขั้นตอนสำคัญต่อไปนี้
- โหลดโมเดลที่เข้ากันได้
- จัดสรรบัฟเฟอร์ Tensor อินพุตและเอาต์พุต
- เรียกใช้โมเดลที่คอมไพล์แล้ว
- อ่านการอนุมานลงในบัฟเฟอร์เอาต์พุต
ข้อมูลโค้ดต่อไปนี้แสดงการใช้งานขั้นพื้นฐานของทั้งกระบวนการใน Kotlin และ C++
C++
// Load model and initialize runtime
LITERT_ASSIGN_OR_RETURN(auto model, Model::CreateFromFile("mymodel.tflite"));
LITERT_ASSIGN_OR_RETURN(auto env, Environment::Create({}));
LITERT_ASSIGN_OR_RETURN(auto compiled_model,
CompiledModel::Create(env, model, kLiteRtHwAcceleratorCpu));
// Preallocate input/output buffers
LITERT_ASSIGN_OR_RETURN(auto input_buffers, compiled_model.CreateInputBuffers());
LITERT_ASSIGN_OR_RETURN(auto output_buffers, compiled_model.CreateOutputBuffers());
// Fill the first input
float input_values[] = { /* your data */ };
input_buffers[0].Write (absl::MakeConstSpan(input_values, /*size*/));
// Invoke
compiled_model.Run(input_buffers, output_buffers);
// Read the output
std::vector data(output_data_size);
output_buffers[0].Read (absl::MakeSpan(data));
Kotlin
// Load model and initialize runtime
val model =
CompiledModel.create(
context.assets,
"mymodel.tflite",
CompiledModel.Options(Accelerator.CPU)
)
// 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()
ดูข้อมูลเพิ่มเติมได้ที่คู่มือเริ่มต้นใช้งาน Kotlin และเริ่มต้นใช้งาน C++
ฟีเจอร์หลัก
LiteRT Next มีข้อดีและฟีเจอร์หลักๆ ดังนี้
- LiteRT API ใหม่: เพิ่มประสิทธิภาพการพัฒนาด้วยการเลือกตัวเร่งอัตโนมัติ การดำเนินการแบบแอสซิงค์จริง และการจัดการบัฟเฟอร์ I/O ที่มีประสิทธิภาพ
- ประสิทธิภาพ GPU ที่ดีที่สุดในรุ่น: ใช้การเร่งความเร็ว GPU ล้ำสมัยสำหรับ ML ในอุปกรณ์ การทํางานร่วมกันของบัฟเฟอร์แบบใหม่ช่วยให้ใช้การคัดลอกข้อมูลแบบ 0 และลดความล่าช้าในบัฟเฟอร์ GPU ประเภทต่างๆ ได้
- การอนุมานด้วย Generative AI ที่เหนือกว่า: ช่วยให้ผสานรวมได้อย่างง่ายดายพร้อมประสิทธิภาพที่ดีที่สุดสําหรับโมเดล GenAI
- การเร่งความเร็ว NPU แบบรวม: มอบการเข้าถึง NPU จากผู้ให้บริการชิปเซ็ตรายใหญ่ได้อย่างราบรื่นพร้อมประสบการณ์ที่สอดคล้องกันสำหรับนักพัฒนาแอป เร่งความเร็ว NPU ของ LiteRT ผ่านโปรแกรมทดลองใช้ก่อนเปิดตัว
การปรับปรุงที่สําคัญ
LiteRT Next (Compiled Model API) มีการปรับปรุงที่สำคัญต่อไปนี้ใน LiteRT (TFLite Interpreter API) ดูคู่มือที่ครอบคลุมเกี่ยวกับการตั้งค่าแอปพลิเคชันด้วย LiteRT Next ได้ที่คู่มือเริ่มต้นใช้งาน
- การใช้ตัวเร่ง: การใช้โมเดลใน GPU ด้วย LiteRT จำเป็นต้องสร้างการมอบสิทธิ์ การเรียกใช้ฟังก์ชัน และการแก้ไขกราฟอย่างชัดเจน เมื่อใช้ LiteRT ถัดไป ให้ระบุตัวเร่ง
- ความสามารถในการทำงานร่วมกันของบัฟเฟอร์ฮาร์ดแวร์แบบเนทีฟ: LiteRT ไม่มีตัวเลือกบัฟเฟอร์และบังคับให้ข้อมูลทั้งหมดผ่านหน่วยความจำของ CPU LiteRT Next ช่วยให้คุณส่งบัฟเฟอร์ฮาร์ดแวร์ Android (AHWB), บัฟเฟอร์ OpenCL, บัฟเฟอร์ OpenGL หรือบัฟเฟอร์เฉพาะอื่นๆ ได้
- การดำเนินการแบบไม่พร้อมกัน: LiteRT Next มาพร้อมกับ Async API ที่ออกแบบใหม่ ซึ่งให้กลไกแบบไม่พร้อมกันที่แท้จริงโดยอิงตามรั้วการซิงค์ วิธีนี้ช่วยให้เวลาในการดำเนินการโดยรวมเร็วขึ้นด้วยการใช้ฮาร์ดแวร์ที่หลากหลาย เช่น CPU, GPU, CPU และ NPU สำหรับงานต่างๆ
- การโหลดโมเดล: LiteRT Next ไม่จำเป็นต้องมีขั้นตอนการสร้างแยกต่างหากเมื่อโหลดโมเดล