Weź udział w sympozjum Women in ML 7 grudnia Zarejestruj się teraz

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 dostarczają narzędzi, które minimalizują złożoność optymalizacji wnioskowania.

Zaleca się rozważenie optymalizacji modelu podczas procesu tworzenia aplikacji. W tym dokumencie przedstawiono kilka najlepszych praktyk dotyczących optymalizacji modeli TensorFlow pod kątem wdrażania na sprzęcie brzegowym.

Dlaczego modele powinny być optymalizowane

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

Zmniejszenie rozmiaru

Niektóre formy optymalizacji można wykorzystać do zmniejszenia rozmiaru modelu. 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 do pobrania na urządzenia użytkowników.
  • Mniejsze zużycie pamięci: mniejsze modele zużywają mniej pamięci RAM, gdy są uruchamiane, co zwalnia pamięć do wykorzystania przez inne 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 uruchomienia 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óźnień poprzez uproszczenie obliczeń występujących podczas wnioskowania, potencjalnie kosztem pewnej dokładności.

Kompatybilność z akceleratorem

Niektóre akceleratory sprzętowe, takie jak Edge TPU , mogą działać bardzo szybko w przypadku prawidłowo zoptymalizowanych modeli.

Generalnie tego typu urządzenia wymagają kwantyzacji modeli w określony sposób. Zapoznaj się z dokumentacją każdego akceleratora sprzętowego, aby dowiedzieć się więcej o jego wymaganiach.

Kompromisy

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

Zmiany dokładności zależą od optymalizowanego modelu i są trudne do przewidzenia 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 wrażenia użytkowników. 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 klastrowanie.

Są one częścią TensorFlow Model Optimization Toolkit , który zapewnia zasoby do technik optymalizacji modeli, które są kompatybilne 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. 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 po treningu float16 Brak danych Do 50% Nieznaczna utrata dokładności CPU, GPU
Kwantyzacja zakresu dynamicznego po treningu Brak danych Do 75% Najmniejsza utrata dokładności CPU, GPU (Android)
Kwantyzacja liczb całkowitych po treningu Próbka reprezentatywna bez etykiety Do 75% Mała utrata dokładności CPU, GPU (Android), EdgeTPU, Hexagon DSP
Szkolenie uwzględniające kwantyzację Oznaczone dane treningowe Do 75% Najmniejsza utrata dokładności CPU, GPU (Android), EdgeTPU, Hexagon DSP

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

kwantyzacja-drzewo-decyzyjne

Poniżej znajdują się wyniki dotyczące opóźnienia i dokładności kwantyzacji po treningu i treningu uwzględniającego kwantyzację na kilku modelach. Wszystkie wartości opóźnień są mierzone na urządzeniach Pixel 2 przy użyciu jednego procesora o dużym rdzeniu. Wraz z poprawą zestawu narzędzi ulegną również poniższe liczby:

Model Dokładność Top-1 (oryginalna) Dokładność Top-1 (kwantyzacja po szkoleniu) Dokładność Top-1 (szkolenie uwzględniające kwantyzację) Opóźnienie (oryginalne) (ms) Opóźnienie (kwantyzacja po treningu) (ms) Opóźnienie (szkolenie uwzględniające kwantyzację) (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
Początek_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 jest pełnym schematem 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 liczb całkowitych, przy czym zarówno aktywacje, jak i wagi w int8 zachowują podobny rozmiar modelu. Jest zalecany, gdy aktywacje są wrażliwe na kwantyzację.

UWAGA: Obecnie dla tego schematu kwantyzacji w TFLite dostępne są tylko niezoptymalizowane referencyjne implementacje jądra, więc domyślnie wydajność będzie niska w porównaniu z jądrami int8. Pełne zalety tego trybu są obecnie dostępne za pośrednictwem specjalistycznego sprzętu lub niestandardowego oprogramowania.

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

Model Typ metryki 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 (rozwinięty) CER 6,13% 43,67% 6,52%
YoloV3 mAP(IOU=0,5) 0,577 0,563 0,574
MobileNetV1 Najwyższa dokładność 0,7062 0,694 0,6936
MobileNetV2 Najwyższa dokładność 0,718 0,7126 0,7137
Telefon komórkowyBert 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

Przycinanie działa poprzez usuwanie parametrów w modelu, które mają tylko niewielki wpływ na jego przewidywania. Modele przycinane mają ten sam rozmiar na dysku i mają takie same opóźnienia w czasie wykonywania, ale można je bardziej efektywnie skompresować. To sprawia, że ​​przycinanie jest użyteczną techniką zmniejszania rozmiaru pobieranego modelu.

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

Grupowanie

Grupowanie polega na grupowaniu wag każdej warstwy w modelu we wstępnie zdefiniowaną liczbę klastrów, a następnie udostępnianiu wartości centroid dla wag należących do każdego indywidualnego klastra. 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 bardziej efektywnie kompresować, zapewniając korzyści związane z wdrożeniem podobne do przycinania.

Przepływ pracy w programowaniu

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

W przypadkach, w których cele dotyczące dokładności i opóźnień nie są osiągane lub ważna jest obsługa akceleratorów sprzętowych, lepszym rozwiązaniem jest szkolenie uwzględniające kwantyzację . Zobacz dodatkowe techniki optymalizacji w zestawie narzędzi TensorFlow Model Optimization Toolkit .

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