סקירה כללית על LiteRT Next

LiteRT Next הוא קבוצה חדשה של ממשקי API שמשפרים את LiteRT, במיוחד מבחינת האצת חומרה וביצועים של אפליקציות למידת מכונה ול-AI במכשיר. ממשקי ה-API הם גרסה אלפא וזמינים ב-Kotlin וב-C++‎.

ממשק ה-API של מודל הידור הבא של LiteRT מבוסס על ממשק ה-API של TensorFlow Lite Interpreter, ומפשט את תהליך הטעינה וההפעלה של המודל לצורך למידת מכונה במכשיר. ממשקי ה-API החדשים מספקים דרך יעילה חדשה להשתמש בהאצה של חומרה, ומבטלים את הצורך לטפל במודלים של FlatBuffers, בתאימות הדדית של מאגרי קלט/פלט ובמפיצים. ממשקי ה-API של LiteRT Next לא תואמים לממשקי ה-API של LiteRT. כדי להשתמש בתכונות של LiteRT Next, כדאי לעיין במדריך תחילת העבודה.

כדי לראות דוגמאות להטמעות של LiteRT Next, אפשר לעיין באפליקציות הדגמה הבאות:

מדריך למתחילים

כדי להריץ את ההסקה באמצעות ממשקי ה-API של LiteRT Next, צריך לבצע את השלבים הבאים:

  1. טוענים מודל תואם.
  2. הקצאת מאגרי הטנסורים של הקלט והפלט.
  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<float>(absl::MakeConstSpan(input_values, /*size*/));

// Invoke
compiled_model.Run(input_buffers, output_buffers);

// Read the output
std::vector<float> data(output_data_size);
output_buffers[0].Read<float>(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 החדש: פיתוח יעיל יותר באמצעות בחירת מעבדים אוטומטית, ביצוע אסינכרוני אמיתי וטיפול יעיל במאגרי נתונים של קלט/פלט.
  • ביצועים ברמה הגבוהה ביותר של GPU: שימוש בהאצה מתקדמת של GPU לצורך למידת מכונה במכשיר. יכולת הפעולה ההדדית החדשה של מאגר הנתונים הזמני מאפשרת העברה ללא העתקה ומצמצמת את זמן האחזור בסוגים שונים של מאגרי נתונים זמניים של GPU.
  • הסקת מסקנות ברמה גבוהה יותר של AI גנרטיבי: הפעלת השילוב הפשוט ביותר עם הביצועים הטובים ביותר למודלים של AI גנרטיבי.
  • Unified NPU Acceleration: גישה חלקה ל-NPUs מספקי צ'יפים מרכזיים, עם חוויית פיתוח עקבית. האצת LiteRT NPU זמינה דרך תוכנית גישה מוקדמת.

שיפורים מרכזיים

ב-LiteRT Next (Compiled Model API) יש את השיפורים העיקריים הבאים ב-LiteRT (TFLite Interpreter API). מדריך מקיף להגדרת האפליקציה באמצעות LiteRT Next זמין במאמר תחילת העבודה.

  • שימוש במאיץ: כדי להריץ מודלים ב-GPU באמצעות LiteRT, צריך ליצור באופן מפורש משימות למענה, להפעיל פונקציות ולבצע שינויים בתרשים. ב-LiteRT לאחר מכן, פשוט מציינים את המאיץ.
  • יכולת פעולה הדדית של מאגרי נתונים (buffers) בחומרה: ב-LiteRT אין אפשרות להשתמש במאגרי נתונים, וכל הנתונים עוברים דרך זיכרון המעבד. ב-LiteRT Next אפשר להעביר מאגרי נתונים לחומרה של Android‏ (AHWB), מאגרי נתונים של OpenCL, מאגרי נתונים של OpenGL או מאגרי נתונים מיוחדים אחרים.
  • ביצוע אסינכרוני: LiteRT Next כולל API אסינכרוני שעוצב מחדש, ומספק מנגנון אסינכרוני אמיתי שמבוסס על גדרות סנכרון. כך אפשר לקצר את זמני הביצוע הכוללים באמצעות שימוש בחומרה מגוונת – כמו מעבדים, מעבדים גרפיים, מעבדים לעיבוד נתונים (NPUs) – למשימות שונות.
  • טעינה של מודל: ב-LiteRT Next אין צורך בשלב build נפרד בטעינה של מודל.