Urządzenia mobilne i urządzenia wbudowane mają ograniczone zasoby obliczeniowe, dlatego są ważne, ponieważ dzięki nim aplikacja jest wydajna. Przygotowaliśmy listę sprawdzonych metod i strategii, które możesz wykorzystać do ulepszenia TensorFlow Wydajność modelu Lite.
Wybierz najlepszy model do danego zadania
W zależności od zadania musisz wybrać kompromis między złożonością modelu i rozmiaru. Jeśli zadanie wymaga wysokiej dokładności, może być potrzebny duży złożonym modelem. W przypadku zadań wymagających mniejszej precyzji lepiej jest używać Mniejszy model, ponieważ nie tylko zużywają mniej miejsca na dysku i pamięci, ale są też 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 typowych modeli klasyfikacji obrazów.
Przykładami modeli zoptymalizowanych pod kątem urządzeń mobilnych MobileNets, które są zoptymalizowane pod kątem urządzeń mobilnych. w dziedzinie rozpoznawania obrazów. Kaggle Modele zawiera kilka innych zoptymalizowanych pod kątem urządzeń mobilnych i urządzeń wbudowanych.
Możesz ponownie wytrenować wymienione modele we własnym zbiorze danych za pomocą transferu uczenie się.
Profiluj model
Po wybraniu modelu kandydującego, który jest odpowiedni do Twojego zadania, możesz zgodnie ze sprawdzoną metodą profilowania i testowania porównawczego modelu. Testy porównawcze LiteRT ma wbudowany program profilujący, który wyświetla statystyki profilowania według operatorów. Może to spowodować pomaga zrozumieć wąskie gardła wydajności i dowiedzieć się, które operatory dominują czas obliczeń.
Możesz też korzystać z platformy LiteRT, śledzenie w profilu model w aplikacji na Androida, za pomocą standardowego śledzenia systemu Android, oraz wizualizację wywołań operatorów w czasie za pomocą profilowania opartego na GUI narzędzi.
Profiluj i optymalizuj operatory na wykresie
Jeśli dany operator często pojawia się w modelu oraz, na podstawie profilując, stwierdzasz, że operator pochłania najwięcej czasu, i zastanów się nad optymalizacją tego operatora. Ten scenariusz powinien być rzadki, tak jak w przypadku TensorFlow Wersje Lite zostały zoptymalizowane pod kątem większości operatorów. Być może jednak uda Ci się szybciej napiszesz szybszą wersję operacji niestandardowej, jeśli znasz ograniczenia, . Zapoznaj się z przewodnikiem po operatorach niestandardowych.
Zoptymalizuj model
Optymalizacja modelu ma na celu tworzenie mniejszych modeli, które są zwykle szybsze i bardziej energooszczędne, dzięki czemu można je wdrażać w urządzeniach mobilnych. LiteRT obsługuje różne techniki optymalizacji, np. kwantyzację.
Szczegółowe informacje znajdziesz w dokumentacji dotyczącej optymalizacji modelu.
Zmiana liczby wątków
LiteRT obsługuje wielowątkowe jądra dla wielu operatorów. Dostępne opcje zwiększają liczbę wątków i przyspieszają wykonywanie operatorów. Rosnący liczba wątków sprawi jednak, że model będzie wykorzystywać więcej zasobów .
W przypadku niektórych aplikacji czas oczekiwania może być ważniejszy niż energooszczędność. Ty Można zwiększyć liczbę wątków, ustawiając liczbę tłumaczy wątkami. Wykonywanie wielowątkowości wiąże się jednak z koniecznością zwiększenia wydajności zmienność w zależności od tego, co inne jest wykonywane jednocześnie. To jest zwłaszcza w przypadku aplikacji mobilnych. Na przykład wyizolowane testy mogą wygenerować 2 razy więcej z przyspieszeniem a jednowątkowym, ale jeśli w tym samym czasie działa inna aplikacja, może skutkować gorszą wydajnością niż tworzenie stron jednowątkowych.
Usuń zbędne kopie
Jeśli aplikacja nie została dopracowana, mogą znajdować się w niej nadmiarowe kopie
podczas przesyłania danych wejściowych do modelu i odczytywania danych wyjściowych z modelu. Upewnij się, że:
i wyeliminuj zbędne kopie. Jeśli używasz interfejsów API wyższego poziomu, takich jak Java, skonfiguruj
dokładnie zapoznaj się z dokumentacją pod kątem
zastrzeżeń dotyczących wydajności. Przykład:
interfejs Java API działa znacznie szybciej, jeśliByteBuffers
jest używany jako
dane wejściowe.
Profilowanie aplikacji za pomocą narzędzi działających na określonej platformie
narzędzia działające na określonych platformach, takie jak Android program profilujący oraz Instrumenty to źródło skarbu informacji o profilowaniu, które można wykorzystać do debugowania aplikacji. Czasami mogą występować problemy z wydajnością nie w modelu, lecz w częściach kodu aplikacji, i wchodzić w interakcję z modelem. Zapoznaj się z platformą narzędzi do profilowania i sprawdzonych metod dla Twojej platformy.
Oceń, czy Twój model korzysta z akceleratorów sprzętowych dostępnych na urządzeniu
LiteRT dodało nowe sposoby przyspieszania modeli za pomocą szybszego sprzętu takich jak GPU, DSP i akceleratory neuronowe. Zazwyczaj są to akceleratory są udostępniane przez podmoduły delegowanych, które przejmują podczas wykonywania tłumaczenia. LiteRT może używać przedstawicieli:
- Funkcja delegowania GPU jest dostępna na urządzeniach z Androidem i iOS przy użyciu interfejsów OpenGL/OpenCL i Metal, . Aby je wypróbować, zobacz instrukcję przekazywania GPU.
- Możesz utworzyć własnego przedstawiciela, jeśli masz dostęp do na niestandardowym sprzęcie. Zobacz LiteRT .
Pamiętaj, że niektóre akceleratory działają lepiej w przypadku różnych typów modeli. Niektóre delegaci obsługują tylko modele zmiennoprzecinkowe lub modele zoptymalizowane w określony sposób. Jest ważne jest porównanie poszczególnych przedstawicieli z wersją, dla Twojej aplikacji. Na przykład, jeśli masz bardzo mały model, może nie warto delegować modelu GPU. Z kolei akceleratory są doskonały wybór dla dużych modeli o wysokiej intensywności arytmetycznej.