Sprawdzone metody

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

Wybierz najlepszy model do zadania

W zależności od zadania konieczne będzie dokonanie kompromisu pomiędzy złożonością modelu a jego 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 zastosować mniejszy model, ponieważ nie tylko zużywają mniej miejsca na dysku i pamięci, ale są też generalnie szybsze i bardziej energooszczędne. Na przykład poniższe wykresy przedstawiają kompromisy w zakresie dokładności i opóźnienia w przypadku niektórych popularnych 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ą sieci MobileNet zoptymalizowane pod kątem mobilnych zastosowań wizyjnych. TensorFlow Hub zawiera listę kilku innych modeli zoptymalizowanych specjalnie pod kątem urządzeń mobilnych i wbudowanych.

Wymienione modele można ponownie szkolić na własnym zestawie danych, korzystając z uczenia transferowego. Zapoznaj się z samouczkami dotyczącymi nauki transferu przy użyciu narzędzia TensorFlow Lite Model Maker .

Sprofiluj swój model

Po wybraniu modelu kandydata, który jest odpowiedni do Twojego zadania, dobrą praktyką jest jego profilowanie i porównywanie. Narzędzie do testów porównawczych TensorFlow Lite ma wbudowany profiler, który pokazuje statystyki profilowania według operatora. Może to pomóc w zrozumieniu wąskich gardeł wydajności i operatorów dominujących w czasie obliczeń.

Możesz także użyć śledzenia TensorFlow Lite do profilowania modelu w aplikacji na Androida, korzystając ze 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 grafie

Jeżeli dany operator często pojawia się w modelu i na podstawie profilowania okaże się, że zajmuje on najwięcej czasu, można rozważyć optymalizację 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 jakich wykonywany jest operator. Zapoznaj się z przewodnikiem dla operatorów niestandardowych .

Zoptymalizuj swój model

Optymalizacja modeli ma na celu stworzenie mniejszych modeli, które są na ogół 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.

Aby uzyskać szczegółowe informacje, zapoznaj się z dokumentacją dotyczącą optymalizacji modelu .

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 zastosowań 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 jednocześnie. Dotyczy to szczególnie aplikacji mobilnych. Na przykład pojedyncze testy mogą wykazać 2-krotne przyspieszenie w porównaniu z aplikacją jednowątkową, ale jeśli w tym samym czasie uruchamiana jest inna aplikacja, może to skutkować gorszą wydajnością niż w przypadku aplikacji jednowątkowej.

Wyeliminuj zbędne kopie

Jeśli aplikacja nie została starannie zaprojektowana, podczas podawania danych wejściowych do modelu i odczytywania danych wyjściowych z modelu mogą występować nadmiarowe kopie. Pamiętaj o wyeliminowaniu zbędnych kopii. 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 API języka Java jest znacznie szybszy, jeśli jako dane wejściowe używane są ByteBuffers .

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

Narzędzia specyficzne dla platformy, takie jak profiler systemu Android i instrumenty, zapewniają bogactwo informacji o profilowaniu, których można użyć do debugowania aplikacji. Czasami błąd wydajności może nie dotyczyć modelu, ale części kodu aplikacji, które wchodzą w interakcję z modelem. Pamiętaj, aby zapoznać się z narzędziami do profilowania specyficznymi dla platformy i najlepszymi praktykami dla Twojej platformy.

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

TensorFlow Lite dodał nowe sposoby przyspieszania modeli za pomocą szybszego sprzętu, takiego jak procesory graficzne, procesory DSP i akceleratory neuronowe. Zwykle te akceleratory są udostępniane poprzez podmoduły delegatów , które przejmują część wykonywania interpretera. TensorFlow Lite może korzystać z delegatów poprzez:

Należy pamiętać, że niektóre akceleratory działają lepiej w przypadku różnych typów modeli. Niektórzy delegaci obsługują tylko modele pływakowe lub modele zoptymalizowane w określony sposób. Ważne jest, aby przeprowadzić analizę porównawczą 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 API NN lub procesora graficznego może nie być opłacalne. Z drugiej strony akceleratory są doskonałym wyborem w przypadku dużych modeli o dużej intensywności arytmetycznej.

Potrzebujesz więcej pomocy

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