Ta strona została przetłumaczona przez Cloud Translation API.
Switch to English

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 uruchamiać w ramach tych ograniczeń. Ponadto niektóre optymalizacje pozwalają na użycie specjalistycznego sprzętu do przyspieszonego wnioskowania.

TensorFlow Lite i TensorFlow Model Optimization Toolkit zapewniają narzędzia minimalizujące złożoność optymalizacji wnioskowania.

Zaleca się rozważenie optymalizacji modelu podczas procesu tworzenia aplikacji. W tym dokumencie przedstawiono najważniejsze wskazówki dotyczące optymalizacji modeli TensorFlow pod kątem wdrażania na urządzeniach brzegowych.

Dlaczego modele powinny być optymalizowane

Istnieje kilka głównych sposobów optymalizacji modelu, które mogą pomóc w tworzeniu aplikacji.

Zmniejszenie rozmiaru

W celu zmniejszenia rozmiaru modelu można zastosować pewne 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 zajmie mniej miejsca na urządzeniu mobilnym użytkownika.
  • Mniejszy rozmiar pobierania: mniejsze modele wymagają mniej czasu i przepustowości, aby pobrać na urządzenia użytkowników.
  • Mniejsze zużycie pamięci: mniejsze modele zużywają mniej pamięci RAM, gdy są uruchomione, co zwalnia pamięć dla innych części aplikacji i może przełożyć się na lepszą wydajność i stabilność.

Kwantyzacja może zmniejszyć rozmiar modelu we wszystkich tych przypadkach, 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 do wykonania pojedynczego wnioskowania z danym modelem. Niektóre formy optymalizacji mogą zmniejszyć ilość obliczeń wymaganych do uruchomienia wnioskowania przy użyciu modelu, co skutkuje mniejszym opóźnieniem. Opóźnienie może również mieć wpływ na zużycie energii.

Obecnie kwantyzację można wykorzystać do zmniejszenia opóźnienia poprzez uproszczenie obliczeń, które mają miejsce podczas wnioskowania, potencjalnie kosztem pewnej dokładności.

Kompatybilność z akceleratorem

Niektóre akceleratory sprzętowe, takie jak Edge TPU , mogą bardzo szybko przeprowadzać wnioskowanie w modelach, które zostały poprawnie zoptymalizowane.

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 ich wymaganiach.

Kompromisy

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

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

Rodzaje optymalizacji

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

Stanowią one część zestawu TensorFlow Model Optimization Toolkit , który zawiera zasoby dotyczące technik optymalizacji modeli, które są zgodne z TensorFlow Lite.

Kwantyzacja

Kwantyzacja działa poprzez zmniejszenie precyzji liczb używanych do reprezentowania parametrów modelu, które domyślnie są 32-bitowymi liczbami zmiennoprzecinkowymi. Powoduje to mniejszy rozmiar modelu i szybsze obliczenia.

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

Technika Wymagania dotyczące danych Zmniejszenie rozmiaru Precyzja Obsługiwany sprzęt
Kwantyzacja float16 po treningu Brak danych Do 50% Nieznaczna utrata dokładności CPU, GPU
Kwantyzacja zakresu dynamicznego po treningu Brak danych Aż do 75% Utrata dokładności CPU, GPU (Android)
Kwantyzacja liczb całkowitych po treningu Nieoznakowana reprezentatywna próbka Aż do 75% Mniejsza utrata dokładności CPU, GPU (Android), EdgeTPU, Hexagon DSP
Szkolenie uwzględniające kwantyzację Oznaczone dane treningowe Aż do 75% Najmniejsza utrata dokładności CPU, GPU (Android), EdgeTPU, Hexagon DSP

Poniżej znajdują się wyniki opóźnienia i dokładności kwantyzacji po treningu i treningu z uwzględnieniem kwantyzacji na kilku modelach. Wszystkie wartości opóźnień są mierzone na urządzeniach Pixel 2 przy użyciu jednego dużego rdzenia procesora. Wraz z ulepszaniem zestawu narzędzi poprawią się liczby tutaj:

Model Najwyższa dokładność 1 (oryginalna) Najwyższa dokładność 1 (kwantyzacja po treningu) Najwyższa dokładność (szkolenie w zakresie kwantyzacji) Opóźnienie (oryginał) (ms) Opóźnienie (kwantyzacja po treningu) (ms) Opóźnienie (szkolenie z uwzględnieniem kwantyzacji) (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
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
Tabela 1 Korzyści z kwantyzacji modeli dla wybranych modeli CNN

Przycinanie

Przycinanie polega na usuwaniu parametrów w modelu, które mają tylko niewielki wpływ na jego przewidywania. Obcięte modele mają ten sam rozmiar na dysku i takie same opóźnienia w czasie wykonywania, ale można je efektywniej kompresować. To sprawia, że ​​przycinanie jest przydatną techniką zmniejszania rozmiaru pobieranego modelu.

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

Grupowanie

Klastrowanie polega na grupowaniu wag każdej warstwy w modelu we wstępnie zdefiniowaną liczbę klastrów, a następnie dzieleniu się wartościami centroid dla wag należących do każdego pojedynczego klastra. Zmniejsza to liczbę unikalnych wartości wagi w modelu, zmniejszając w ten sposób jego złożoność.

W rezultacie modele klastrowe mogą być skuteczniej kompresowane, zapewniając korzyści z wdrożenia podobne do przycinania.

Programowanie pracy

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 po treningu, ponieważ ma to szerokie zastosowanie i nie wymaga danych szkoleniowych.

W przypadkach, gdy cele dokładności i opóźnienia nie są osiągane lub ważna jest obsługa akceleratorów sprzętowych, lepszą opcją jest szkolenie z uwzględnieniem kwantyzacji . Zobacz dodatkowe techniki optymalizacji w TensorFlow Model Optimization Toolkit .

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