Optymalizacja modelu

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.

drzewo-decyzji kwantyzacyjnych

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-2240,7090,6570,70 1241126416,94.3
Mobilenet-v2-1-2240,7190,6370,709 899854143.6
Inception_v30,780,7720,775 113084554395,723,9
Resnet_v2_1010,7700,768Nie dotyczy 39732868Nie dotyczy178,344,9
Tabela 1 Zalety kwantyzacji modelu w przypadku wybranych modeli CNN

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)
Wav2letterWER6,7%7,7% 7,2%
DeepSpeech 0.5.1 (po wyłączeniu)CER6,13%43,67% 6,52%
YoloV3mAP(IOU=0,5)0,5770,563 0,574
MobileNetV1Dokładność pomiaru najwyższego poziomu0,70620,694 0,6936
MobileNetV2Dokładność pomiaru najwyższego poziomu0,7180,7126 0,7137
MobileBertF1(dopasowanie ścisłe)88,81(81,23)2,08(0) 88,73(81,15)
Tabela 2. Zalety kwantyzacji modelu z aktywacjami int16

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.