Optimizimi i modelit

Pajisjet e skajshme shpesh kanë memorie të kufizuar ose fuqi llogaritëse. Mund të aplikohen optimizime të ndryshme në modele në mënyrë që ato të mund të ekzekutohen brenda këtyre kufizimeve. Përveç kësaj, disa optimizime lejojnë përdorimin e pajisjeve të specializuara për përfundimin e përshpejtuar.

LiteRT dhe Paketa e Veglave të Optimizimit të Modelit TensorFlow ofrojnë mjete për të minimizuar kompleksitetin e optimizimit të përfundimeve.

Rekomandohet që të merrni parasysh optimizimin e modelit gjatë procesit të zhvillimit të aplikacionit tuaj. Ky dokument përshkruan disa praktika më të mira për optimizimin e modeleve TensorFlow për vendosjen në harduerin skajor.

Pse modelet duhet të optimizohen

Ka disa mënyra kryesore se si optimizimi i modelit mund të ndihmojë në zhvillimin e aplikacionit.

Zvogëlimi i madhësisë

Disa forma optimizimi mund të përdoren për të zvogëluar madhësinë e një modeli. Modelet më të vogla kanë përparësitë e mëposhtme:

  • Madhësia më e vogël e ruajtjes: Modelet më të vogla zënë më pak hapësirë ruajtëse në pajisjet e përdoruesve tuaj. Për shembull, një aplikacion Android që përdor një model më të vogël do të zërë më pak hapësirë ruajtëse në pajisjen celulare të një përdoruesi.
  • Madhësia më e vogël e shkarkimit: Modelet më të vogla kërkojnë më pak kohë dhe gjerësi brezi për t'u shkarkuar në pajisjet e përdoruesve.
  • Më pak përdorim i memories: Modelet më të vogla përdorin më pak RAM kur ekzekutohen, gjë që liron memorien për përdorim të pjesëve të tjera të aplikacionit tuaj dhe mund të përkthehet në performancë dhe stabilitet më të mirë.

Kuantizimi mund të zvogëlojë madhësinë e një modeli në të gjitha këto raste, potencialisht në kurriz të njëfarë saktësie. Krasitja dhe grumbullimi mund të zvogëlojnë madhësinë e një modeli për shkarkim duke e bërë atë më lehtë të kompresueshëm.

Reduktimi i vonesës

Vonesa është sasia e kohës që duhet për të ekzekutuar një përfundim të vetëm me një model të caktuar. Disa forma të optimizimit mund të zvogëlojnë sasinë e llogaritjes së nevojshme për të ekzekutuar konkluzionet duke përdorur një model, duke rezultuar në vonesë më të ulët. Vonesa mund të ketë gjithashtu një ndikim në konsumin e energjisë.

Aktualisht, kuantizimi mund të përdoret për të reduktuar vonesën duke thjeshtuar llogaritjet që ndodhin gjatë përfundimit, potencialisht në kurriz të njëfarë saktësie.

Përputhshmëria e përshpejtuesit

Disa përshpejtues harduerësh, të tillë si Edge TPU , mund të ekzekutojnë përfundimet jashtëzakonisht shpejt me modelet që janë optimizuar saktë.

Në përgjithësi, këto lloj pajisjesh kërkojnë që modelet të kuantizohen në një mënyrë specifike. Shihni dokumentacionin e secilit përshpejtues harduerik për të mësuar më shumë rreth kërkesave të tyre.

këmbimet

Optimizimet mund të rezultojnë potencialisht në ndryshime në saktësinë e modelit, të cilat duhet të merren parasysh gjatë procesit të zhvillimit të aplikacionit.

Ndryshimet e saktësisë varen nga modeli individual që po optimizohet dhe janë të vështira për t'u parashikuar para kohe. Në përgjithësi, modelet që janë të optimizuara për madhësinë ose vonesën do të humbasin një sasi të vogël saktësie. Në varësi të aplikacionit tuaj, kjo mund ose nuk mund të ndikojë në përvojën e përdoruesve tuaj. Në raste të rralla, modele të caktuara mund të fitojnë njëfarë saktësie si rezultat i procesit të optimizimit.

Llojet e optimizimit

LiteRT aktualisht mbështet optimizimin nëpërmjet kuantizimit, krasitjes dhe grupimit.

Këto janë pjesë e Paketës së Optimizimit të Modelit TensorFlow , e cila ofron burime për teknikat e optimizimit të modelit që janë të pajtueshme me TensorFlow Lite.

Kuantizimi

Kuantizimi funksionon duke reduktuar saktësinë e numrave të përdorur për të përfaqësuar parametrat e një modeli, të cilët si parazgjedhje janë numra me pikë lundruese 32-bitësh. Kjo rezulton në një madhësi më të vogël të modelit dhe llogaritje më të shpejtë.

Llojet e mëposhtme të kuantizimit janë të disponueshme në LiteRT:

Teknika Kërkesat e të dhënave Zvogëlimi i madhësisë Saktësia Pajisjet e mbështetura
Kuantizimi float16 pas stërvitjes Nuk ka të dhëna Deri në 50% Humbje e parëndësishme e saktësisë CPU, GPU
Kuantizimi i diapazonit dinamik pas stërvitjes Nuk ka të dhëna Deri në 75% Humbja më e vogël e saktësisë CPU, GPU (Android)
Kuantizimi i numrave të plotë pas stërvitjes Mostra përfaqësuese e paetiketuar Deri në 75% Humbje e vogël e saktësisë CPU, GPU (Android), EdgeTPU
Trajnim i vetëdijshëm për kuantizimin Të dhënat e etiketuara të trajnimit Deri në 75% Humbja më e vogël e saktësisë CPU, GPU (Android), EdgeTPU

Pema e mëposhtme e vendimeve ju ndihmon të zgjidhni skemat e kuantizimit që mund të dëshironi të përdorni për modelin tuaj, thjesht bazuar në madhësinë dhe saktësinë e pritur të modelit.

kuantizimi-pema e vendimit

Më poshtë janë rezultatet e vonesës dhe saktësisë për kuantizimin pas stërvitjes dhe trajnimin e vetëdijshëm për kuantizimin në disa modele. Të gjithë numrat e vonesës maten në pajisjet Pixel 2 duke përdorur një CPU të vetme me bërthamë të madhe. Me përmirësimin e paketës së veglave, do të përmirësohen edhe numrat këtu:

Model Saktësia e Top-1 (Origjinale) Saktësia e top-1 (kuantizuar pas trajnimit) Saktësia Top-1 (Trajnim i vetëdijshëm për kuantizimin) Vonesa (origjinale) (ms) Vonesa (kuantizuar pas trajnimit) (ms) Vonesa (Trajnim i vetëdijshëm për kuantizimin) (ms) Madhësia (Origjinale) (MB) Madhësia (e optimizuar) (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 N/A 3973 2868 N/A 178.3 44.9
Tabela 1 Përfitimet e kuantizimit të modelit për modele të zgjedhura të CNN

Kuantizimi i plotë i numrave të plotë me aktivizime int16 dhe pesha int8

Kuantizimi me aktivizime int16 është një skemë kuantizimi me numra të plotë me aktivizime në int16 dhe pesha në int8. Ky modalitet mund të përmirësojë saktësinë e modelit të kuantizuar në krahasim me skemën e kuantizimit të plotë të numrit të plotë me aktivizimet dhe peshat në int8 duke mbajtur një madhësi të ngjashme të modelit. Rekomandohet kur aktivizimet janë të ndjeshme ndaj kuantizimit.

SHËNIM: Aktualisht vetëm zbatimet e kernelit referencë jo të optimizuara janë të disponueshme në TFLite për këtë skemë kuantizimi, kështu që si parazgjedhje performanca do të jetë e ngadaltë në krahasim me kernelët int8. Përparësitë e plota të këtij modaliteti aktualisht mund të arrihen nëpërmjet harduerit të specializuar ose softuerit të personalizuar.

Më poshtë janë rezultatet e saktësisë për disa modele që përfitojnë nga kjo mënyrë.

Model Lloji metrikë i saktësisë Saktësia (aktivizimet float32) Saktësia (aktivizimet int8) Saktësia (aktivizimet int16)
Wav2 shkronja WER 6.7% 7.7% 7.2%
DeepSpeech 0.5.1 (i shpalosur) CER 6.13% 43.67% 6.52%
YoloV3 mAP(IOU=0,5) 0,577 0,563 0,574
MobileNetV1 Top-1 Saktësi 0,7062 0,694 0,6936
MobileNetV2 Top-1 Saktësi 0,718 0,7126 0,7137
MobileBert F1 (Përputhja e saktë) 88.81 (81.23) 2.08 (0) 88.73 (81.15)
Tabela 2 Përfitimet e kuantizimit të modelit me aktivizime int16

Krasitja

Krasitja funksionon duke hequr parametrat brenda një modeli që kanë vetëm një ndikim të vogël në parashikimet e tij. Modelet e krasitura kanë të njëjtën madhësi në disk dhe kanë të njëjtin vonesë të kohës së funksionimit, por mund të kompresohen në mënyrë më efektive. Kjo e bën krasitjen një teknikë të dobishme për reduktimin e madhësisë së shkarkimit të modelit.

Në të ardhmen, LiteRT do të sigurojë reduktim të vonesës për modelet e krasitura.

Grumbullimi

Grumbullimi funksionon duke grupuar peshat e secilës shtresë në një model në një numër të paracaktuar grupesh, më pas duke ndarë vlerat qendrore për peshat që i përkasin çdo grupi individual. Kjo zvogëlon numrin e vlerave unike të peshës në një model, duke reduktuar kështu kompleksitetin e tij.

Si rezultat, modelet e grupuara mund të kompresohen në mënyrë më efektive, duke ofruar përfitime të vendosjes të ngjashme me krasitjen.

Rrjedha e punës së zhvillimit

Si pikënisje, kontrolloni nëse modelet në modelet e pritura mund të funksionojnë për aplikacionin tuaj. Nëse jo, ne rekomandojmë që përdoruesit të fillojnë me mjetin e kuantizimit pas trajnimit pasi kjo është gjerësisht e zbatueshme dhe nuk kërkon të dhëna trajnimi.

Për rastet kur objektivat e saktësisë dhe vonesës nuk janë përmbushur, ose mbështetja e përshpejtuesit të harduerit është e rëndësishme, trajnimi i vetëdijshëm për kuantizimin është alternativa më e mirë. Shihni teknikat shtesë të optimizimit nën Paketën e Veglave të Optimizimit të Modelit TensorFlow .

Nëse dëshironi të zvogëloni më tej madhësinë e modelit tuaj, mund të provoni krasitjen dhe/ose grumbullimin përpara se të kuantizoni modelet tuaja.