Optymalizacja modelu

Urządzenia brzegowe często mają ograniczoną pamięć lub moc obliczeniową. Do modeli można zastosować różne optymalizacje, aby można je było uruchomić w ramach tych ograniczeń. Ponadto niektóre optymalizacje pozwalają na użycie specjalistycznego sprzętu do przyspieszonego wnioskowania.

TensorFlow Lite i zestaw narzędzi do optymalizacji modelu TensorFlow zapewniają narzędzia minimalizujące złożoność wnioskowania optymalizacyjnego.

Zaleca się rozważenie optymalizacji modelu podczas procesu tworzenia aplikacji. W tym dokumencie opisano niektóre najlepsze praktyki optymalizacji modeli TensorFlow pod kątem wdrażania na sprzęcie brzegowym.

Dlaczego modele należy optymalizować

Istnieje kilka głównych sposobów, w jakie optymalizacja modelu może pomóc w tworzeniu aplikacji.

Zmniejszenie rozmiaru

Aby zmniejszyć rozmiar modelu, można zastosować niektóre formy optymalizacji. Mniejsze modele mają następujące zalety:

  • Mniejszy rozmiar pamięci: mniejsze modele zajmują mniej miejsca na urządzeniach użytkowników. Na przykład aplikacja na Androida korzystająca z mniejszego modelu będzie zajmować mniej miejsca na urządzeniu mobilnym użytkownika.
  • Mniejszy rozmiar pobierania: mniejsze modele wymagają mniej czasu i przepustowości do pobrania na urządzenia użytkowników.
  • Mniejsze zużycie pamięci: Mniejsze modele zużywają mniej pamięci RAM podczas działania, co zwalnia pamięć dla innych części aplikacji i może przełożyć się na lepszą wydajność i stabilność.

We wszystkich tych przypadkach kwantyzacja może zmniejszyć rozmiar modelu, potencjalnie kosztem pewnej dokładności. Przycinanie i grupowanie może zmniejszyć rozmiar modelu do pobrania, ułatwiając jego kompresję.

Redukcja opóźnień

Opóźnienie to czas potrzebny na wykonanie pojedynczego wnioskowania dla danego modelu. Niektóre formy optymalizacji mogą zmniejszyć ilość obliczeń wymaganych do uruchomienia wnioskowania przy użyciu modelu, co skutkuje mniejszymi opóźnieniami. Opóźnienie może mieć również wpływ na zużycie energii.

Obecnie kwantyzację można zastosować w celu zmniejszenia opóźnień poprzez uproszczenie obliczeń wykonywanych podczas wnioskowania, potencjalnie kosztem pewnej dokładności.

Kompatybilność z akceleratorami

Niektóre akceleratory sprzętowe, takie jak Edge TPU , mogą niezwykle szybko uruchamiać wnioskowanie w przypadku poprawnie zoptymalizowanych modeli.

Ogólnie rzecz biorąc, tego typu urządzenia wymagają kwantyzacji modeli w określony sposób. Zobacz dokumentację każdego akceleratora sprzętowego, aby dowiedzieć się więcej o jego wymaganiach.

Kompromisy

Optymalizacje mogą potencjalnie skutkować zmianami w dokładności modelu, co należy wziąć pod uwagę podczas procesu tworzenia aplikacji.

Zmiany dokładności zależą od optymalizowanego indywidualnego modelu i trudno je przewidzieć z wyprzedzeniem. Ogólnie rzecz biorąc, modele zoptymalizowane pod kątem rozmiaru lub opóźnienia stracą niewielką ilość dokładności. W zależności od aplikacji może to mieć wpływ na wygodę użytkowników lub nie. W rzadkich przypadkach niektóre modele mogą zyskać pewną dokładność w wyniku procesu optymalizacji.

Rodzaje optymalizacji

TensorFlow Lite obsługuje obecnie optymalizację poprzez kwantyzację, przycinanie i grupowanie.

Stanowią one część zestawu narzędzi do optymalizacji modelu TensorFlow , który zapewnia zasoby dotyczące technik optymalizacji modelu zgodnych z TensorFlow Lite.

Kwantyzacja

Kwantyzacja polega na zmniejszeniu precyzji liczb używanych do reprezentowania parametrów modelu, które domyślnie są 32-bitowymi liczbami zmiennoprzecinkowymi. Skutkuje to mniejszym rozmiarem modelu i szybszymi obliczeniami.

W TensorFlow Lite dostępne są następujące typy kwantyzacji:

Technika Wymagania dotyczące danych Zmniejszenie rozmiaru Dokładność Obsługiwany sprzęt
Kwantyzacja typu float16 po treningu Brak danych Do 50% Nieznaczna utrata dokładności Procesor, karta graficzna
Kwantyzacja zakresu dynamicznego po treningu Brak danych Do 75% Najmniejsza utrata dokładności Procesor, karta graficzna (Android)
Kwantyzacja liczb całkowitych po treningu Nieoznakowana próbka reprezentatywna Do 75% Mała utrata dokładności Procesor, procesor graficzny (Android), EdgeTPU, Hexagon DSP
Szkolenie uwzględniające kwantyzację Oznaczone dane szkoleniowe Do 75% Najmniejsza utrata dokładności Procesor, procesor graficzny (Android), EdgeTPU, Hexagon DSP

Poniższe drzewo decyzyjne pomaga wybrać schematy kwantyzacji, których możesz chcieć użyć w swoim modelu, po prostu w oparciu o oczekiwany rozmiar i dokładność modelu.

drzewo decyzyjne kwantyzacji

Poniżej znajdują się wyniki opóźnień i dokładności kwantyzacji po treningu i treningu uwzględniającego kwantyzację w kilku modelach. Wszystkie opóźnienia są mierzone na urządzeniach Pixel 2 z jednym dużym rdzeniem procesora. W miarę ulepszania zestawu narzędzi poprawią się także liczby tutaj:

Model Dokładność na najwyższym poziomie (oryginał) Dokładność na najwyższym poziomie (kwantyzowana po treningu) Dokładność na najwyższym poziomie (szkolenie uwzględniające kwantyzację) Opóźnienie (oryginalne) (ms) Opóźnienie (skwantowane po treningu) (ms) Opóźnienie (trening uwzględniający kwantyzację) (ms) Rozmiar (oryginał) (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
Incepcja_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
Tabela 1 Korzyści z kwantyzacji modelu dla wybranych modeli CNN

Pełna kwantyzacja liczb całkowitych z aktywacjami int16 i wagami int8

Kwantyzacja z aktywacjami int16 to pełny schemat kwantyzacji liczb całkowitych z aktywacjami w int16 i wagami w int8. Ten tryb może poprawić dokładność skwantowanego modelu w porównaniu do pełnego schematu kwantyzacji na liczbach całkowitych, przy czym zarówno aktywacje, jak i wagi w int8 utrzymują podobny rozmiar modelu. Jest to zalecane, gdy aktywacje są wrażliwe na kwantyzację.

UWAGA: Obecnie w TFLite dla tego schematu kwantyzacji dostępne są tylko niezoptymalizowane referencyjne implementacje jądra, więc domyślnie wydajność będzie niska w porównaniu z jądrami int8. Dostęp do pełnych zalet tego trybu można obecnie uzyskać za pośrednictwem specjalistycznego sprzętu lub niestandardowego oprogramowania.

Poniżej znajdują się wyniki dokładności dla niektórych modeli korzystających z tego trybu.

Model Typ metryki dokładności Dokładność (aktywacje float32) Dokładność (aktywacje int8) Dokładność (aktywacje int16)
List Wav2 WER 6,7% 7,7% 7,2%
DeepSpeech 0.5.1 (rozwinięty) CER 6,13% 43,67% 6,52%
YoloV3 mAP(IOU=0,5) 0,577 0,563 0,574
MobileNetV1 Dokładność na najwyższym poziomie 0,7062 0,694 0,6936
MobileNetV2 Dokładność na najwyższym poziomie 0,718 0,7126 0,7137
MobileBert F1 (dokładne dopasowanie) 88,81(81,23) 2,08(0) 88,73(81,15)
Tabela 2 Korzyści z kwantyzacji modelu z aktywacjami int16

Przycinanie

Oczyszczanie polega na usuwaniu parametrów z modelu, które mają jedynie niewielki wpływ na jego przewidywania. Oczyszczone modele mają ten sam rozmiar na dysku i takie same opóźnienia w czasie wykonywania, ale można je kompresować bardziej efektywnie. Dzięki temu oczyszczanie jest użyteczną techniką zmniejszania rozmiaru pobieranego modelu.

W przyszłości TensorFlow Lite zapewni redukcję opóźnień w przypadku przyciętych modeli.

Grupowanie

Grupowanie polega na grupowaniu wag każdej warstwy modelu w predefiniowaną liczbę skupień, a następnie udostępnianiu wartości centroidów dla wag należących do każdego pojedynczego skupienia. Zmniejsza to liczbę unikalnych wartości wag w modelu, zmniejszając w ten sposób jego złożoność.

W rezultacie modele klastrowe można skuteczniej kompresować, zapewniając korzyści wdrożeniowe podobne do czyszczenia.

Przepływ prac programistycznych

Na początek sprawdź, czy modele w modelach hostowanych mogą działać w Twojej aplikacji. Jeśli nie, zalecamy, aby użytkownicy zaczęli od narzędzia kwantyzacji potreningowej, ponieważ ma ono szerokie zastosowanie i nie wymaga danych szkoleniowych.

W przypadkach, gdy cele dotyczące dokładności i opóźnień nie są spełnione lub ważna jest obsługa akceleratora sprzętowego, lepszym rozwiązaniem jest szkolenie uwzględniające kwantyzację . Zobacz dodatkowe techniki optymalizacji w zestawie narzędzi do optymalizacji modelu TensorFlow .

Jeśli chcesz jeszcze bardziej zmniejszyć rozmiar modelu, możesz spróbować przycinania i/lub grupowania przed kwantyzacją modeli.