Zgodność z operatorami LiteRT i TensorFlow

Operatory systemów uczących się używane w modelu mogą wpływać procesu konwersji z modelu TensorFlow na format LiteRT. Konwerter LiteRT obsługuje ograniczoną liczbę wspólnych operacji TensorFlow modeli wnioskowania, co oznacza, że nie każdy model można bezpośrednio konwertować. Narzędzie konwertera pozwala na dodanie dodatkowych operatorów, ale model w ten sposób wymaga również zmodyfikowania środowiska wykonawczego LiteRT środowiska używanego do wykonywania modelu, co może ograniczać używać standardowych opcji wdrażania w środowisku wykonawczym, takich jak Usługi Google Play.

Narzędzie LiteRT Converter służy do analizowania modelu i optymalizować je, aby zapewnić zgodność bezpośrednio obsługiwanych operatorów. Na przykład w zależności od operatorów ML w Twojego modelu, konwerter może połączyć lub połączyć aby zmapować je na ich odpowiedniki LiteRT.

Nawet w przypadku obsługiwanych operacji można czasami spodziewać się określonych wzorców użytkowania, ze względu na wydajność. Najlepszy sposób na poznanie TensorFlow model, którego można używać z LiteRT polega na starannym rozważaniu sposobu konwertowania operacji oraz ograniczeń nałożonych przez ten proces.

Obsługiwane operatory

Wbudowane operatory LiteRT to podzbiór operatorów które są częścią podstawowej biblioteki TensorFlow. Twój model TensorFlow może mogą też zawierać operatory niestandardowe w postaci operatorów złożonych, lub nowych operatorów zdefiniowanych przez Ciebie. Na diagramie poniżej widać zależności między tymi operatorami.

Operatory TensorFlow

Spośród tego zakresu operatorów modelu ML wyróżniamy 3 typy: modele obsługiwane w procesie konwersji:

  1. Modele tylko z wbudowanym operatorem LiteRT. (Zalecane)
  2. Modele z wbudowanymi operatorami i wybraniem TensorFlow operatorzy komórkowi.
  3. modeli z wbudowanymi operatorami, podstawowych operatorów TensorFlow, z operatorami niestandardowymi.

Jeśli model zawiera tylko operacje, które są natywnie obsługiwane przez LiteRT, do jego konwertowania nie są potrzebne żadne dodatkowe flagi. Ten to zalecana ścieżka, ponieważ ten typ modelu zapewnia płynną konwersję Łatwiej jest też optymalizować i uruchamiać za pomocą domyślnego środowiska wykonawczego LiteRT. Masz też więcej opcji wdrażania dla swojego modelu, takich jak Usługi Google Play. Możesz zacząć od Przewodnik po konwerterach LiteRT Zobacz stronie LiteRT Ops dla z listą wbudowanych operatorów.

Jeśli chcesz wybrać operacje TensorFlow z biblioteki podstawowej, należy to określić podczas konwersji i upewnić się, że środowisko wykonawcze zawiera te operacji. Zapoznaj się z tematem Wybieranie operatorów TensorFlow: ze szczegółowymi instrukcjami.

Gdy tylko jest to możliwe, unikaj ostatniej opcji – dodawania operatorów niestandardowych w parametrach przekonwertowany model. Operatory niestandardowe to operatory utworzone przez połączenie wielu podstawowych operatorów TensorFlow, lub zdefiniować zupełnie nowy. Konwertowanie operatorów niestandardowych może zwiększać ogólną wartość przez naliczanie zależności poza wbudowaną biblioteką LiteRT. Własne operacje, jeśli nie zostały utworzone specjalnie na potrzeby wdrażania na urządzeniach mobilnych lub urządzeniach może pogorszyć wydajność po wdrożeniu w przypadku urządzeń z ograniczonymi zasobami w porównaniu ze środowiskiem serwera. I wreszcie, podobnie jak wybrane podstawowe operatory TensorFlow, operatory niestandardowe wymaga od Ciebie zmodyfikować środowisko wykonawcze modelu co ogranicza możliwość korzystania ze standardowych usług środowiska wykonawczego, takich jak Usług Google Play.

Typy obsługiwane

Większość operacji LiteRT jest kierowana zarówno na liczbę zmiennoprzecinkową (float32), jak i wnioskowanie kwantyzowane (uint8, int8), ale wiele operacji nie ma jeszcze w przypadku innych typów takich jak tf.float16 i struny.

Oprócz korzystania z różnych wersji działań druga różnica między modelami zmiennoprzecinkowymi i kwantyzowanymi. Konwersja kwantowa wymaga informacji o zakresie dynamicznym dla tensorów. Ten wymaga „fałszywej kwantyzacji” podczas trenowania modelu, uzyskiwanie informacji o zakresie za pomocą zbioru danych kalibracyjnych lub „na bieżąco” oszacowania zakresu. Zobacz kwantyzacji.

Proste konwersje, stałe składanie i łączenie

LiteRT może przetwarzać wiele operacji TensorFlow, nawet jeśli chociaż nie mają bezpośredniego odpowiednika. Dotyczy to operacji, które mogą zostać po prostu usunięte z grafu (tf.identity), zastąpione tensorami (tf.placeholder) lub w bardziej złożonych operacjach (tf.nn.bias_add). Niektóre obsługiwane operacje mogą zostać usunięte przy użyciu tych

Oto niepełna lista operacji TensorFlow, które są zwykle usuwane z wykresu:

  • tf.add
  • tf.debugging.check_numerics
  • tf.constant
  • tf.div
  • tf.divide
  • tf.fake_quant_with_min_max_args
  • tf.fake_quant_with_min_max_vars
  • tf.identity
  • tf.maximum
  • tf.minimum
  • tf.multiply
  • tf.no_op
  • tf.placeholder
  • tf.placeholder_with_default
  • tf.realdiv
  • tf.reduce_max
  • tf.reduce_min
  • tf.reduce_sum
  • tf.rsqrt
  • tf.shape
  • tf.sqrt
  • tf.square
  • tf.subtract
  • tf.tile
  • tf.nn.batch_norm_with_global_normalization
  • tf.nn.bias_add
  • tf.nn.fused_batch_norm
  • tf.nn.relu
  • tf.nn.relu6
.

Operacje eksperymentalne

Istnieją następujące operacje LiteRT, ale nie są gotowe do użycia niestandardowego modele:

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