Urządzenia brzegowe często mają ograniczoną pamięć lub moc obliczeniową. Różne optymalizacje mogą być stosowane w modelach, aby można je było uruchamiać w tych . Ponadto niektóre optymalizacje umożliwiają zastosowanie specjalistycznych rozwiązań aby uzyskać przyspieszone wnioskowanie.
LiteRT i TensorFlow Model Optimization Narzędzia dostarczają narzędzia do zminimalizować złożoność optymalizacji wnioskowania.
Zalecamy, aby rozważyć optymalizację modelu podczas aplikacji jego rozwoju. W tym dokumencie opisujemy kilka sprawdzonych metod optymalizacji Modele TensorFlow do wdrażania na sprzęcie brzegowym.
Dlaczego modele powinny być optymalizowane
Optymalizacja modelu może pomóc w stosowaniu aplikacji na kilka głównych sposobów. w Google Cloud.
Zmniejszenie rozmiaru
Niektóre formy optymalizacji można zastosować, aby zmniejszyć rozmiar modelu. Mniejszy Modele te mają następujące zalety:
- Mniejszy rozmiar pamięci: mniejsze modele zajmują mniej miejsca na użytkowników urządzenia. Na przykład aplikacja na Androida korzystająca z mniejszego modelu zmniejszają ilość miejsca na dane na urządzeniu mobilnym użytkownika.
- Mniejszy rozmiar pobierania: mniejsze modele wymagają mniej czasu i przepustowości pobierz na urządzenia.
- Mniejsze wykorzystanie pamięci: mniejsze modele zużywają mniej pamięci RAM, zwolnienie pamięci na inne części aplikacji. co przekłada się na większą wydajność i stabilność.
Kwantyzacja może we wszystkich tych przypadkach zmniejszyć rozmiar modelu, potencjalnie kosztem pewnej dokładności. Przycinanie i grupowanie może zmniejszyć rozmiar do pobrania, ułatwiając skompresowanie.
Skrócenie czasu oczekiwania
Czas oczekiwania to czas potrzebny do wygenerowania pojedynczego wnioskowania z danym model atrybucji. Niektóre formy optymalizacji mogą zmniejszyć ilość niezbędnych obliczeń do uruchamiania wnioskowania za pomocą modelu, co przekłada się na mniejsze opóźnienia. Czas oczekiwania może również mają wpływ na zużycie energii.
Obecnie można stosować kwantyzację do zmniejszenia opóźnienia przez uproszczenie obliczeń przeprowadzanych podczas wnioskowania, potencjalnie kosztem niektórych dokładności.
Zgodność akceleratora
Niektóre akceleratory sprzętowe, takie jak Edge TPU, może działać bardzo szybko wnioskowanie przy użyciu które zostały prawidłowo zoptymalizowane.
Ogólnie tego typu urządzenia wymagają kwantyzacji modeli w określonym zakresie sposób. Zapoznaj się z dokumentacją każdego akceleratora sprzętowego, aby dowiedzieć się więcej na temat jego .
Kompromis
Optymalizacje mogą potencjalnie spowodować zmiany w dokładności modelu, które należy brane pod uwagę w procesie tworzenia aplikacji.
Zmiany dokładności zależą od optymalizowanego modelu i są trudno przewidzieć. Zasadniczo modele zoptymalizowane pod kątem mogą tracić niewielką dokładność. W zależności od aplikacji, może to mieć wpływ na z myślą o użytkownikach. W rzadkich przypadkach niektóre modele mogą uzyskać pewną dokładność w wyniku procesu optymalizacji.
Typy optymalizacji
LiteRT obsługuje obecnie optymalizację przez kwantyzację, przycinanie grupowania.
Są one częścią biblioteki TensorFlow Model Optimization zestawu narzędzi, zasoby na potrzeby technik optymalizacji modeli, które są zgodne z TensorFlow Uproszczona.
Kwantyfikacja
Kwantyfikacja działa przez zmniejszenie dokładności liczb używanych do reprezentowania modelu które domyślnie są 32-bitowymi liczbami zmiennoprzecinkowymi. Powoduje to mniejszy rozmiar modelu i szybsze obliczenia.
W LiteRT dostępne są te typy kwantyzacji:
Metoda | Wymagania dotyczące danych | Zmniejszenie rozmiaru | Dokładność | Obsługiwany sprzęt |
---|---|---|---|---|
Kwantyzacja obiektu float16 po zakończeniu trenowania | Brak danych | Do 50% | Nieistotna utrata dokładności | CPU, GPU |
Kwantyzacja zakresu dynamicznego po trenowaniu | Brak danych | Nawet 75% | Najmniejsza utrata dokładności | CPU, GPU (Android) |
Kwantyzacja liczb całkowitych po trenowaniu | Próbka reprezentatywna bez etykiety | Nawet 75% | Niewielka utrata dokładności | CPU, GPU (Android), EdgeTPU |
Szkolenie z myślą o kwantyzacji | Dane treningowe oznaczone etykietami | Nawet 75% | Najmniejsza utrata dokładności | CPU, GPU (Android), EdgeTPU |
Poniższy schemat decyzyjny pomaga wybrać schematy kwantyzacji, które możesz wykorzystać których użyć w Twoim modelu, po prostu na podstawie oczekiwanego rozmiaru modelu dokładności.
Poniżej znajdują się wyniki opóźnień i dokładności kwantyzacji po trenowaniu oraz trenowanie z uwzględnieniem kwantyzacji w kilku modelach. Wszystkie wartości opóźnienia są mierzone na urządzeniu Urządzenia Pixel 2 z 1 dużym rdzeniem procesora. W miarę ulepszania zestawu narzędzi liczby tutaj:
Model | Dokładność pomiaru pierwszorzędnego znaczenia (pierwotna) | Dokładność pomiaru najwyższego poziomu (po trenowaniu kwantyzowana) | Dokładność pomiaru najwyższego poziomu (trenowanie z uwzględnieniem kwantyzacji) | Czas oczekiwania (pierwotny) (ms) | Czas oczekiwania (kwantyzowany po trenowaniu) (ms) | Czas oczekiwania (trenowanie kwantyzacyjne) (ms) | Rozmiar (oryginalny) (MB) | Rozmiar (zoptymalizowany) (MB) |
---|---|---|---|---|---|---|---|---|
Mobilenet-v1-1-224 | 0,709 | 0,657 | 0,70 | 124 | 112 | 64 | 16,9 | 4.3 |
Mobilenet-v2-1-224 | 0,719 | 0,637 | 0,709 | 89 | 98 | 54 | 14 | 3.6 |
Inception_v3 | 0,78 | 0,772 | 0,775 | 1130 | 845 | 543 | 95,7 | 23,9 |
Resnet_v2_101 | 0,770 | 0,768 | Nie dotyczy | 3973 | 2868 | Nie dotyczy | 178,3 | 44,9 |
Pełna kwantyzacja z aktywacjami int16 i wagami int8
Kwantyfikacja z aktywacjami int16 to schemat pełnej kwantyzacji całkowitej z aktywacjami w int16 i ważeniem int8. Ten tryb może zwiększyć dokładność kwantyzowanego modelu w porównaniu z schemat pełnej kwantyzacji całkowitej z aktywacjami i wagami w int8 przy zachowaniu podobnego rozmiaru modelu. Jest to zalecane, gdy aktywacje mają wrażliwy charakter z kwantyzacją.
UWAGA: obecnie tylko niezoptymalizowane wdrożenia jądra referencyjnego dostępnych w TFLite na potrzeby tego schematu kwantyzacji, więc domyślnie wydajność działa wolniej niż w jądrze int8. Wszystkie zalety tego trybu są obecnie dostępne za pomocą specjalistycznego sprzętu lub niestandardowego oprogramowania.
Poniżej znajdziesz wyniki dokładności w przypadku niektórych modeli, które korzystają z tego trybu.
Model | Typ danych dotyczących dokładności | Dokładność (aktywacje float32) | Dokładność (aktywacje int8) | Dokładność (aktywacje int16) |
---|---|---|---|---|
Wav2letter | WER | 6,7% | 7,7% | 7,2% |
DeepSpeech 0.5.1 (po wyłączeniu) | CER | 6,13% | 43,67% | 6,52% |
YoloV3 | mAP(IOU=0,5) | 0,577 | 0,563 | 0,574 |
MobileNetV1 | Dokładność pomiaru najwyższego poziomu | 0,7062 | 0,694 | 0,6936 |
MobileNetV2 | Dokładność pomiaru najwyższego poziomu | 0,718 | 0,7126 | 0,7137 |
MobileBert | F1(dopasowanie ścisłe) | 88,81(81,23) | 2,08(0) | 88,73(81,15) |
Przycinanie
Przycinanie działa według usuwanie w modelu parametrów, które mają tylko niewielki wpływ na jego i generowanie prognoz. Przycięte modele mają taki sam rozmiar na dysku i mają to samo środowisko wykonawcze ale można go skompresować bardziej efektywnie. Dzięki temu przycinanie która pozwala zmniejszyć rozmiar pobieranego modelu.
LiteRT zapewni w przyszłości redukcję czasu oczekiwania w przypadku przyciętych modeli.
Grupuję
Grupowanie polega na grupowaniu wag każdej warstwy w modelu we wstępnie zdefiniowanej liczbie a następnie współdzielenie wartości centroidów dla wag poszczególnych dla pojedynczego klastra. Zmniejsza to liczbę unikalnych wartości wag w modelu, a tym samym zmniejsza jego złożoność.
W rezultacie można efektywniej kompresować modele klastrowane, i zwiększają korzyści z wdrożenia podobne do przycinania.
Przepływ pracy podczas programowania
Na początek sprawdź, czy modele w hostowanych modele mogą działać w Twojej aplikacji. Jeśli nie, zalecamy, aby użytkownicy rozpoczęli od kwantyzacji po zakończeniu trenowania , ponieważ ma ono szerokie zastosowanie nie wymagają danych treningowych.
Jeśli docelowe wartości w zakresie dokładności i czasu oczekiwania nie są osiągane, lub sprzęt obsługa akceleratora jest ważna, uwzględniająca kwantyzację szkolenia to lepsza opcja. Zapoznaj się z dodatkowymi technikami optymalizacji w Optymalizacja modelu TensorFlow Zestaw narzędzi.
Jeśli chcesz jeszcze bardziej zmniejszyć rozmiar modelu, możesz przyciąć. lub klastrowanie przed kwantową oceną modeli.