Sprawdzone metody

Urządzenia mobilne i urządzenia wbudowane mają ograniczone zasoby obliczeniowe, dlatego ważne jest, aby aplikacje były wydajne. Przygotowaliśmy listę sprawdzonych metod i strategii, których możesz użyć do poprawy wydajności modelu TensorFlow Lite.

Wybierz najlepszy model do danego zadania

W zależności od zadania musisz wybrać kompromis między złożonością a rozmiarem modelu. Jeśli zadanie wymaga wysokiej dokładności, możesz potrzebować dużego i złożonego modelu. W przypadku zadań wymagających mniejszej precyzji lepiej jest używać mniejszego modelu, ponieważ nie tylko zużywają one mniej miejsca na dysku i pamięci, ale są też ogólnie szybsze i bardziej energooszczędne. Na przykład wykresy poniżej pokazują kompromisy między dokładnością i czasem oczekiwania w przypadku niektórych popularnych modeli klasyfikacji obrazów.

Wykres między rozmiarem modelu a dokładnością

Wykres dokładności w porównaniu z czasem oczekiwania

Przykładami modeli zoptymalizowanych pod kątem urządzeń mobilnych są MobileNets zoptymalizowane pod kątem aplikacji mobilnych. TensorFlow Hub zawiera listę kilku innych modeli zoptymalizowanych pod kątem urządzeń mobilnych i urządzeń wbudowanych.

Możesz ponownie wytrenować wymienione modele we własnym zbiorze danych za pomocą uczenia transferu.

Profiluj model

Po wybraniu modelu kandydującego, który jest odpowiedni do Twojego zadania, warto go profilować i przeprowadzać testy porównawcze. Narzędzie do analizy porównawczej TensorFlow Lite ma wbudowany program profilujący, który pokazuje statystyki profilowania według operatora. Może to pomóc w zrozumieniu wąskich gardeł wydajności oraz tego, które operatory dominują w czasie obliczeń.

Możesz też użyć śledzenia TensorFlow Lite do profilowania modelu w aplikacji na Androida przy użyciu standardowego śledzenia systemu Android oraz do wizualizacji wywołań operatorów według czasu za pomocą narzędzi do profilowania opartych na GUI.

Profiluj i optymalizuj operatory na wykresie

Jeśli dany operator często pojawia się w modelu, a na podstawie profilowania stwierdzisz, że zajmuje on najwięcej czasu, możesz go zoptymalizować. Taki scenariusz powinien być rzadki, ponieważ TensorFlow Lite ma wersje zoptymalizowane pod kątem większości operatorów. Jeśli jednak znasz ograniczenia, w których wykonywany jest operator, możesz być w stanie napisać szybszą wersję operacji niestandardowej. Zapoznaj się z przewodnikiem po operatorach niestandardowych.

Zoptymalizuj model

Optymalizacja modeli ma na celu tworzenie mniejszych modeli, które są zwykle szybsze i bardziej energooszczędne, aby można je było wdrażać na urządzeniach mobilnych. TensorFlow Lite obsługuje wiele technik optymalizacji, takich jak kwantyzacja.

Szczegółowe informacje znajdziesz w dokumentacji dotyczącej optymalizacji modelu.

Zmiana liczby wątków

TensorFlow Lite obsługuje wielowątkowe jądra w przypadku wielu operatorów. Możesz zwiększyć liczbę wątków i przyspieszyć wykonywanie operatorów. Zwiększenie liczby wątków spowoduje jednak, że model zużywa więcej zasobów i mocy.

W przypadku niektórych aplikacji czas oczekiwania może być ważniejszy niż energooszczędność. Liczbę wątków możesz zwiększyć, ustawiając liczbę wątków tłumaczenia rozmowy. Wykonywanie wielowątkowe wiąże się jednak z większą zmiennością wydajności w zależności od tego, co jest wykonywane jednocześnie. Dotyczy to zwłaszcza aplikacji mobilnych. Na przykład pojedyncze testy mogą wykazywać 2 razy większe przyspieszenie i porównanie z 1 wątkiem, ale jeśli inna aplikacja jest uruchamiana w tym samym czasie, może to spowodować gorsze wyniki niż w przypadku wersji jednowątkowych.

Usuń zbędne kopie

Jeśli aplikacja nie została dobrze zaprojektowana, podczas przekazywania danych wejściowych do modelu i odczytywania danych wyjściowych z modelu mogą występować nadmiarowe kopie. Pamiętaj, aby usunąć zbędne kopie. Jeśli używasz interfejsów API wyższego poziomu, takich jak Java, dokładnie sprawdź dokumentację pod kątem zastrzeżeń dotyczących wydajności. Na przykład interfejs Java API działa znacznie szybciej, jeśli jako danych wejściowych jest używany ByteBuffers.

Profilowanie aplikacji za pomocą narzędzi działających na określonej platformie

Narzędzia specyficzne dla platformy, takie jak Android profiler i Instruments, udostępniają wiele informacji na temat profilowania, które można wykorzystać do debugowania aplikacji. Czasami błąd w wydajności może nie znajdować się w modelu, ale w częściach kodu aplikacji współpracujących z modelem. Zapoznaj się z narzędziami do profilowania obowiązującymi na poszczególnych platformach i sprawdzonymi metodami, które działają na Twojej platformie.

Oceń, czy Twój model korzysta z akceleratorów sprzętowych dostępnych na urządzeniu

W TensorFlow Lite dodano nowe sposoby przyspieszania modeli z wykorzystaniem szybszego sprzętu, takiego jak GPU, DSP i akceleratory neuronowe. Te akceleratory są zwykle ujawniane przez podmoduły delegowanych, które przejmują część wykonania wykonywania interpretera. TensorFlow Lite może używać przedstawicieli:

  • Funkcja przekazywania dostępu do GPU jest dostępna na urządzeniach z Androidem i iOS, odpowiednio przy użyciu OpenGL/OpenCL i Metal. Aby je wypróbować, zobacz instrukcję przekazywania GPU.
  • Jeśli masz dostęp do niestandardowego sprzętu, możesz utworzyć własnego przedstawiciela. Więcej informacji znajdziesz w artykule Przekazywanie dostępu do TensorFlow Lite.

Pamiętaj, że niektóre akceleratory działają lepiej w przypadku różnych typów modeli. Niektórzy przedstawiciele obsługują tylko modele zmiennoprzecinkowe lub modele zoptymalizowane w określony sposób. Ważne jest, aby przeprowadzić analizę porównawczą każdego przedstawiciela, aby przekonać się, czy stanowi on dobry wybór w przypadku Twojej aplikacji. Jeśli na przykład masz bardzo mały model, delegowanie go do GPU może nie być warte polecenia. Akceleratory są natomiast doskonałym wyborem w przypadku dużych modeli o wysokiej intensywności arytmetycznej.