Sprawdzone metody

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.

Wykres rozmiaru modelu i
dokładność

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

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.