Omówienie LiteRT Next

LiteRT Next to nowy zestaw interfejsów API, który ulepsza LiteRT, zwłaszcza pod względem przyspieszania sprzętowego i wydajności aplikacji wykorzystujących ML i AI na urządzeniu. Interfejsy API są dostępne w wersji alfa i w językach Kotlin i C++.

Interfejs API LiteRT Next Compiled Model opiera się na interfejsie API TensorFlow Lite Interpreter i upraszcza proces wczytywania i wykonywania modelu w przypadku uczenia maszynowego na urządzeniu. Nowe interfejsy API zapewniają nowy, usprawniony sposób korzystania z przyspieszenia sprzętowego, eliminując konieczność obsługi interfejsu FlatBuffers, współdziałania buforów wejścia/wyjścia i delegatów. Interfejsy LiteRT Next nie są zgodne z interfejsami LiteRT. Aby korzystać z funkcji LiteRT Next, zapoznaj się z przewodnikiem.

Przykładowe implementacje LiteRT Next znajdziesz w tych aplikacjach demonstracyjnych:

Krótkie wprowadzenie

Wykonywanie wnioskowania za pomocą interfejsów LiteRT Next obejmuje te kluczowe kroki:

  1. Wczytaj zgodny model.
  2. Przydzielaj bufory tensorów wejściowych i wyjściowych.
  3. wywołać skompilowany model.
  4. Odczytaj wnioski w buforze wyjściowym.

Poniższe fragmenty kodu pokazują podstawową implementację całego procesu w Kotlinie i 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()

Więcej informacji znajdziesz w przewodnikach Pierwsze kroki z KotlinemPierwsze kroki z C++.

Najważniejsze funkcje

LiteRT Next oferuje te najważniejsze korzyści i funkcje:

  • Nowy interfejs LiteRT API: usprawnij proces tworzenia za pomocą automatycznego wyboru akceleratora, prawdziwego asynchronicznego wykonywania i skutecznego zarządzania buforem wejścia/wyjścia.
  • Najlepsza w swojej klasie wydajność GPU: korzystaj z najnowocześniejszego przyspieszania GPU do uczenia maszynowego na urządzeniu. Nowa interoperacyjność buforów umożliwia działanie bez kopiowania i minimalizuje opóźnienia w przypadku różnych typów buforów GPU.
  • Wyższa skuteczność wnioskowania generatywnej AI: włącz najprostszą integrację z najlepszą wydajnością modeli generatywnej AI.
  • Jednolita akceleracja NPU: zapewnienie płynnego dostępu do procesorów NPU od głównych dostawców z ujednoliconymi narzędziami dla deweloperów. Akceleracja NPU LiteRT jest dostępna w ramach programu wcześniejszego dostępu.

Najważniejsze ulepszenia

LiteRT Next (interfejs API skompilowanego modelu) zawiera te kluczowe ulepszenia w porównaniu z LiteRT (interfejsem API interpretera TFLite). Szczegółowy przewodnik konfiguracji aplikacji za pomocą LiteRT Next znajdziesz w przewodniku Pierwsze kroki.

  • Użycie akceleratora: uruchamianie modeli na GPU za pomocą LiteRT wymaga jawnego tworzenia delegowanych funkcji, wywołań funkcji i modyfikacji grafu. W LiteRT wystarczy określić akcelerator.
  • Współdziałanie z lokalnym buforem sprzętowym: LiteRT nie udostępnia opcji buforów i wymusza przesyłanie wszystkich danych przez pamięć procesora. Dzięki LiteRT Next możesz przekazywać bufory sprzętowe Androida (AHWB), bufory OpenCL, bufory OpenGL lub inne specjalistyczne bufory.
  • Wykonywanie asynchroniczne: LiteRT Next zawiera przeprojektowany interfejs API asynchronicznego, który zapewnia prawdziwy mechanizm asynchroniczny oparty na barierach synchronizacji. Dzięki temu można skrócić całkowity czas wykonywania zadań, wykorzystując do różnych zadań różne komponenty sprzętowe, takie jak procesory, procesory graficzne, procesory i procesory neuromorficzne.
  • Ładowanie modelu: LiteRT Next nie wymaga osobnego kroku w kreatorze podczas wczytywania modelu.