ภาพรวมของ LiteRT Next

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 ประกอบด้วยขั้นตอนสำคัญต่อไปนี้

  1. โหลดโมเดลที่เข้ากันได้
  2. จัดสรรบัฟเฟอร์ Tensor อินพุตและเอาต์พุต
  3. เรียกใช้โมเดลที่คอมไพล์แล้ว
  4. อ่านการอนุมานลงในบัฟเฟอร์เอาต์พุต

ข้อมูลโค้ดต่อไปนี้แสดงการใช้งานขั้นพื้นฐานของทั้งกระบวนการใน 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 ไม่จำเป็นต้องมีขั้นตอนการสร้างแยกต่างหากเมื่อโหลดโมเดล