Odpowiedz już dziś na lokalne wydarzenie TensorFlow Everywhere!
Ta strona została przetłumaczona przez Cloud Translation API.
Switch to English

Sprawdzone metody dotyczące wydajności

Urządzenia mobilne i urządzenia wbudowane mają ograniczone zasoby obliczeniowe, dlatego ważne jest, aby zapewnić efektywne wykorzystanie zasobów aplikacji. Zebraliśmy listę najlepszych praktyk i strategii, których możesz użyć, aby poprawić wydajność modelu TensorFlow Lite.

Wybierz najlepszy model do zadania

W zależności od zadania będziesz musiał dokonać kompromisu między złożonością modelu a rozmiarem. Jeśli Twoje zadanie wymaga dużej dokładności, możesz potrzebować dużego i złożonego modelu. W przypadku zadań wymagających mniejszej precyzji lepiej jest użyć mniejszego modelu, ponieważ nie tylko zużywają mniej miejsca na dysku i pamięci, ale są również generalnie szybsze i bardziej energooszczędne. Na przykład poniższe wykresy pokazują kompromisy w zakresie dokładności i opóźnienia dla niektórych typowych modeli klasyfikacji obrazów.

Graph of model size vs accuracy

Graph of accuracy vs latency

Jednym z przykładów modeli zoptymalizowanych pod kątem urządzeń mobilnych są MobileNets , które są zoptymalizowane pod kątem mobilnych aplikacji wizyjnych. Modele hostowane zawierają listę kilku innych modeli, które zostały zoptymalizowane specjalnie pod kątem urządzeń mobilnych i wbudowanych.

Możesz przekwalifikować wymienione modele w swoim własnym zbiorze danych, korzystając z transferu uczenia się. Zapoznaj się z naszym samouczkiem do nauki transferu w celu klasyfikacji obrazów i wykrywania obiektów .

Profiluj swój model

Gdy już wybierzesz model kandydata, który jest odpowiedni dla Twojego zadania, dobrą praktyką jest profilowanie i testowanie modelu. Narzędzie do testów porównawczych TensorFlow Lite ma wbudowany profiler, który pokazuje statystyki profilowania dla każdego operatora. Może to pomóc w zrozumieniu wąskich gardeł wydajności i tym, którzy operatorzy dominują w czasie obliczeń.

Możesz również użyć śledzenia TensorFlow Lite do profilowania modelu w aplikacji na Androida, używając standardowego śledzenia systemu Android, oraz do wizualizacji wywołań operatora według czasu za pomocą narzędzi do profilowania opartych na graficznym interfejsie użytkownika.

Profiluj i optymalizuj operatorów na wykresie

Jeśli określony operator pojawia się często w modelu i na podstawie profilowania okaże się, że zajmuje on najwięcej czasu, możesz przyjrzeć się optymalizacji tego operatora. Ten scenariusz powinien być rzadki, ponieważ TensorFlow Lite ma zoptymalizowane wersje dla większości operatorów. Możesz jednak napisać szybszą wersję niestandardowej operacji, jeśli znasz ograniczenia, w których operator jest wykonywany. Sprawdź naszą niestandardową dokumentację operatora .

Zoptymalizuj swój model

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

Sprawdź naszą dokumentację dotyczącą optymalizacji modelu, aby uzyskać szczegółowe informacje.

Zmień liczbę wątków

TensorFlow Lite obsługuje jądra wielowątkowe dla 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 Twój model zużyje więcej zasobów i mocy.

W przypadku niektórych aplikacji opóźnienie może być ważniejsze niż efektywność energetyczna. Możesz zwiększyć liczbę wątków, ustawiając liczbę wątków interpretera. Wykonywanie wielowątkowe odbywa się jednak kosztem zwiększonej zmienności wydajności w zależności od tego, co jeszcze jest wykonywane równolegle. Dotyczy to zwłaszcza aplikacji mobilnych. Na przykład izolowane testy mogą wykazywać dwukrotne przyspieszenie w porównaniu z jednowątkowymi, ale jeśli w tym samym czasie wykonywana jest inna aplikacja, może to skutkować gorszą wydajnością niż jednowątkowa.

Wyeliminuj zbędne kopie

Jeśli aplikacja nie jest starannie zaprojektowana, mogą pojawić się zbędne kopie podczas podawania danych wejściowych i odczytywania wyników z modelu. Pamiętaj, aby wyeliminować zbędne kopie. Jeśli korzystasz z interfejsów API wyższego poziomu, takich jak Java, dokładnie zapoznaj się z dokumentacją pod kątem zastrzeżeń dotyczących wydajności. Na przykład Java API jest znacznie szybsza, jeśli ByteBuffers są używane jako dane wejściowe .

Profiluj swoją aplikację za pomocą narzędzi specyficznych dla platformy

Narzędzia specyficzne dla platformy, takie jak Android Profiler i Instruments, zapewniają bogactwo informacji o profilowaniu, których można użyć do debugowania aplikacji. Czasami błąd wydajności może nie występować w modelu, ale w częściach kodu aplikacji, które współdziałają z modelem. Upewnij się, że zapoznałeś się z narzędziami do profilowania specyficznymi dla platformy i najlepszymi praktykami dla Twojej platformy.

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

TensorFlow Lite dodał nowe sposoby przyspieszania modeli za pomocą szybszego sprzętu, takiego jak GPU, DSP i akceleratory neuronowe. Zwykle te akceleratory są ujawniane za pośrednictwem podmodułów delegatów, które przejmują część wykonania interpretera. TensorFlow Lite może używać delegatów przez:

  • Korzystanie z interfejsu API sieci neuronowych systemu Android. Możesz wykorzystać te zaplecze akceleratorów sprzętowych, aby poprawić szybkość i wydajność modelu. Aby włączyć interfejs API sieci neuronowych, zapoznaj się z przewodnikiem dla delegatów NNAPI .
  • Delegat GPU jest dostępny na Androida i iOS, używając odpowiednio OpenGL / OpenCL i Metal. Aby je wypróbować, zapoznaj się z samouczkiem i dokumentacją delegata GPU .
  • Delegat Hexagon jest dostępny na Androida. Wykorzystuje procesor Qualcomm Hexagon DSP, jeśli jest dostępny na urządzeniu. Zobacz samouczek delegata Hexagon, aby uzyskać więcej informacji.
  • Możliwe jest utworzenie własnego delegata, jeśli masz dostęp do niestandardowego sprzętu. Aby uzyskać więcej informacji, zobacz delegatów TensorFlow Lite .

Należy pamiętać, że niektóre akceleratory działają lepiej dla różnych typów modeli. Niektórzy delegaci obsługują tylko modele zmiennoprzecinkowe lub modele zoptymalizowane w określony sposób. Ważne jest, aby przetestować każdego delegata, aby sprawdzić, czy jest to dobry wybór dla Twojej aplikacji. Na przykład, jeśli masz bardzo mały model, delegowanie modelu do interfejsu NN API lub GPU może nie być warte. I odwrotnie, akceleratory są doskonałym wyborem w przypadku dużych modeli, które mają dużą intensywność arytmetyczną.

Potrzebujesz więcej pomocy

Zespół TensorFlow z przyjemnością pomoże zdiagnozować i rozwiązać konkretne problemy z wydajnością, z którymi możesz się spotkać. Zgłoś problem na GitHub, podając szczegóły problemu.