Weź udział w sympozjum Women in ML 7 grudnia Zarejestruj się teraz

Kompatybilność operatorów TensorFlow Lite i TensorFlow

Operatory uczenia maszynowego (ML), których używasz w swoim modelu, mogą wpływać na proces konwersji modelu TensorFlow na format TensorFlow Lite. Konwerter TensorFlow Lite obsługuje ograniczoną liczbę operacji TensorFlow używanych w popularnych modelach wnioskowania, co oznacza, że ​​nie każdy model jest bezpośrednio konwertowalny. Narzędzie konwertujące umożliwia dołączenie dodatkowych operatorów, ale konwersja modelu w ten sposób wymaga również zmodyfikowania środowiska wykonawczego TensorFlow Lite używanego do wykonania modelu, co może ograniczyć możliwość korzystania ze standardowych opcji wdrażania środowiska wykonawczego, takich jak usługi Google Play .

TensorFlow Lite Converter jest przeznaczony do analizowania struktury modelu i stosowania optymalizacji, aby był kompatybilny z bezpośrednio wspieranymi operatorami. Na przykład, w zależności od operatorów ML w twoim modelu, konwerter może pominąć lub połączyć te operatory w celu zmapowania ich do ich odpowiedników TensorFlow Lite.

Nawet w przypadku obsługiwanych operacji czasami oczekuje się określonych wzorców użycia ze względu na wydajność. Najlepszym sposobem na zrozumienie, jak zbudować model TensorFlow, który może być używany z TensorFlow Lite, jest dokładne rozważenie, w jaki sposób operacje są konwertowane i optymalizowane, wraz z ograniczeniami nałożonymi przez ten proces.

Obsługiwani operatorzy

Wbudowane operatory TensorFlow Lite stanowią podzbiór operatorów wchodzących w skład podstawowej biblioteki TensorFlow. Twój model TensorFlow może również zawierać operatory niestandardowe w postaci operatorów złożonych lub nowe operatory zdefiniowane przez Ciebie. Poniższy diagram przedstawia relacje między tymi operatorami.

Operatory TensorFlow

Z tej gamy operatorów modeli ML istnieją 3 typy modeli obsługiwanych przez proces konwersji:

  1. Modele z wbudowanym tylko operatorem TensorFlow Lite. ( Zalecane )
  2. Modele z wbudowanymi operatorami i wybrane operatory podstawowe TensorFlow.
  3. Modele z wbudowanymi operatorami, operatorami podstawowymi TensorFlow i/lub operatorami niestandardowymi.

Jeśli Twój model zawiera tylko operacje, które są natywnie obsługiwane przez TensorFlow Lite, nie potrzebujesz żadnych dodatkowych flag, aby go przekonwertować. Jest to zalecana ścieżka, ponieważ ten typ modelu będzie konwertowany płynnie i łatwiej go zoptymalizować i uruchomić przy użyciu domyślnego środowiska wykonawczego TensorFlow Lite. Masz też więcej opcji wdrażania dla swojego modelu, takich jak usługi Google Play . Możesz zacząć od przewodnika po konwerterze TensorFlow Lite . Zobacz stronę TensorFlow Lite Ops, aby zapoznać się z listą wbudowanych operatorów.

Jeśli chcesz uwzględnić wybrane operacje TensorFlow z biblioteki podstawowej, musisz to określić podczas konwersji i upewnić się, że środowisko wykonawcze zawiera te operacje. Zobacz temat Wybieranie operatorów TensorFlow, aby zapoznać się ze szczegółowymi krokami.

Jeśli to możliwe, unikaj ostatniej opcji dołączania operatorów niestandardowych do przekonwertowanego modelu. Operatory niestandardowe to operatory utworzone przez połączenie wielu podstawowych operatorów podstawowych TensorFlow lub zdefiniowanie zupełnie nowego. Gdy operatory niestandardowe są konwertowane, mogą zwiększyć rozmiar całego modelu, wywołując zależności poza wbudowaną biblioteką TensorFlow Lite. Niestandardowe operacje, jeśli nie zostały stworzone specjalnie do wdrażania urządzeń mobilnych lub urządzeń, mogą skutkować gorszą wydajnością po wdrożeniu na urządzeniach o ograniczonych zasobach w porównaniu ze środowiskiem serwerowym. Na koniec, podobnie jak w przypadku wybranych operatorów podstawowych TensorFlow, operatory niestandardowe wymagają zmodyfikowania modelowego środowiska wykonawczego, co ogranicza korzystanie ze standardowych usług wykonawczych, takich jak usługi Google Play .

Obsługiwane typy

Większość operacji TensorFlow Lite ma na celu zarówno wnioskowanie zmiennoprzecinkowe ( float32 ) jak i skwantyzowane ( uint8 , int8 ), ale wiele operacji jeszcze tego nie robi dla innych typów, takich jak tf.float16 i stringi.

Oprócz używania różnych wersji operacji, inną różnicą między modelami zmiennoprzecinkowymi i kwantowymi jest sposób ich konwersji. Kwantowa konwersja wymaga informacji o zakresie dynamicznym dla tensorów. Wymaga to „fałszywej kwantyzacji” podczas uczenia modelu, uzyskania informacji o zasięgu za pomocą zestawu danych kalibracyjnych lub wykonania oszacowania zasięgu „w locie”. Zobacz kwantyzację po więcej szczegółów.

Proste konwersje, ciągłe składanie i utrwalanie

Wiele operacji TensorFlow może być przetwarzanych przez TensorFlow Lite, mimo że nie mają one bezpośredniego odpowiednika. Dotyczy to operacji, które można po prostu usunąć z grafu ( tf.identity ), zastąpić tensorami ( tf.placeholder ) lub połączyć w bardziej złożone operacje ( tf.nn.bias_add ). Nawet niektóre obsługiwane operacje mogą czasami zostać usunięte za pomocą jednego z tych procesów.

Oto niewyczerpująca lista operacji TensorFlow, które zwykle są usuwane z wykresu:

Operacje eksperymentalne

Następujące operacje TensorFlow Lite są obecne, ale nie są gotowe dla modeli niestandardowych:

  • CALL
  • CONCAT_EMBEDDINGS
  • CUSTOM
  • EMBEDDING_LOOKUP_SPARSE
  • HASHTABLE_LOOKUP
  • LSH_PROJECTION
  • SKIP_GRAM
  • SVDF