Praktikat më të mira të performancës, Praktikat më të mira të performancës

Pajisjet mobile dhe të integruara kanë burime të kufizuara llogaritëse, prandaj është e rëndësishme që burimet e aplikacionit tuaj të jenë efikase. Ne kemi përpiluar një listë të praktikave dhe strategjive më të mira që mund të përdorni për të përmirësuar performancën e modelit tuaj TensorFlow Lite.

Zgjidhni modelin më të mirë për detyrën

Në varësi të detyrës, do t'ju duhet të bëni një kompromis midis kompleksitetit dhe madhësisë së modelit. Nëse detyra juaj kërkon saktësi të lartë, atëherë mund t'ju duhet një model i madh dhe kompleks. Për detyrat që kërkojnë më pak precizion, është më mirë të përdorni një model më të vogël sepse ato jo vetëm që përdorin më pak hapësirë ​​disku dhe memorie, por janë gjithashtu përgjithësisht më të shpejta dhe më efikase në energji. Për shembull, grafikët më poshtë tregojnë kompromiset e saktësisë dhe latencës për disa modele të zakonshme të klasifikimit të imazheve.

Graph of model size vs
accuracy

Graph of accuracy vs latency

Një shembull i modeleve të optimizuara për pajisjet mobile janë MobileNets , të cilat janë të optimizuara për aplikacionet e shikimit në celular. Kaggle Models liston disa modele të tjera që janë optimizuar posaçërisht për pajisjet mobile dhe të integruara.

Ju mund t'i ritrajnoni modelet e listuara në të dhënat tuaja duke përdorur të mësuarit me transferim.

Profili i modelit tuaj

Pasi të keni zgjedhur një model kandidat që është i përshtatshëm për detyrën tuaj, është një praktikë e mirë të profilizoni dhe të krahasoni modelin tuaj. Mjeti i krahasimit LiteRT ka një profilues të integruar që tregon statistikat e profilizimit për operator. Kjo mund të ndihmojë në kuptimin e pengesave të performancës dhe se cilët operatorë dominojnë kohën e llogaritjes.

Gjithashtu mund të përdorni gjurmimin LiteRT për të profilizuar modelin në aplikacionin tuaj Android, duke përdorur gjurmimin standard të sistemit Android, dhe për të vizualizuar thirrjet e operatorëve sipas kohës me mjete profilizimi të bazuara në GUI.

Profili dhe optimizimi i operatorëve në grafik

Nëse një operator i caktuar shfaqet shpesh në model dhe, bazuar në profilizim, zbuloni se operatori konsumon më shumë kohë, mund të shikoni për optimizimin e atij operatori. Ky skenar duhet të jetë i rrallë pasi TensorFlow Lite ka optimizuar versione për shumicën e operatorëve. Megjithatë, mund të jeni në gjendje të shkruani një version më të shpejtë të një operacioni të personalizuar nëse i dini kufizimet në të cilat ekzekutohet operatori. Shikoni udhëzuesin e operatorëve të personalizuar .

Optimizoni modelin tuaj

Optimizimi i modelit synon të krijojë modele më të vogla që janë përgjithësisht më të shpejta dhe më efikase nga ana e energjisë, në mënyrë që ato të mund të vendosen në pajisjet mobile. LiteRT mbështet teknika të shumëfishta optimizimi, të tilla si kuantizimi.

Shikoni dokumentet e optimizimit të modelit për detaje.

Rregulloni numrin e fijeve

LiteRT mbështet bërthama me shumë fije për shumë operatorë. Ju mund të rrisni numrin e fijeve dhe të përshpejtoni ekzekutimin e operatorëve. Megjithatë, rritja e numrit të fijeve do ta bëjë modelin tuaj të përdorë më shumë burime dhe fuqi.

Për disa aplikacione, vonesa mund të jetë më e rëndësishme sesa efikasiteti i energjisë. Mund të rrisni numrin e fijeve të punës duke vendosur numrin e fijeve të interpretuesit. Megjithatë, ekzekutimi me shumë fije vjen me koston e rritjes së ndryshueshmërisë së performancës në varësi të asaj që tjetër ekzekutohet njëkohësisht. Ky është veçanërisht rasti për aplikacionet mobile. Për shembull, testet e izoluara mund të tregojnë shpejtësi 2-fish krahasuar me një fije të vetme, por, nëse një aplikacion tjetër po ekzekutohet në të njëjtën kohë, kjo mund të rezultojë në performancë më të keqe sesa me një fije të vetme.

Eliminoni kopjet e tepërta

Nëse aplikacioni juaj nuk është projektuar me kujdes, mund të ketë kopje të tepërta gjatë furnizimit me të dhëna hyrëse dhe leximit të të dhënave dalëse nga modeli. Sigurohuni që të eliminoni kopjet e tepërta. Nëse përdorni API të nivelit më të lartë, si Java, sigurohuni që të kontrolloni me kujdes dokumentacionin për paralajmërime në lidhje me performancën. Për shembull, API-ja e Java-s është shumë më e shpejtë nëse përdoren ByteBuffers si të dhëna hyrëse .

Profilizo aplikacionin tënd me mjete specifike për platformën

Mjetet specifike të platformës si Android Profiler dhe Instruments ofrojnë një mori informacionesh profilizimi që mund të përdoren për të debuguar aplikacionin tuaj. Ndonjëherë gabimi i performancës mund të mos jetë në model, por në pjesë të kodit të aplikacionit që bashkëveprojnë me modelin. Sigurohuni që të njiheni me mjetet specifike të profilizimit të platformës dhe praktikat më të mira për platformën tuaj.

Vlerësoni nëse modeli juaj përfiton nga përdorimi i përshpejtuesve të harduerit të disponueshëm në pajisje

LiteRT ka shtuar mënyra të reja për të përshpejtuar modelet me harduer më të shpejtë si GPU-të, DSP-të dhe përshpejtuesit nervorë. Në mënyrë tipike, këta përshpejtues ekspozohen përmes nënmoduleve të deleguar që marrin përsipër pjesë të ekzekutimit të interpretuesit. LiteRT mund të përdorë delegatët duke:

  • Delegati i GPU-së është i disponueshëm në Android dhe iOS, duke përdorur përkatësisht OpenGL/OpenCL dhe Metal. Për t'i provuar, shihni delegatin e GPU-së .
  • Është e mundur të krijoni delegatin tuaj nëse keni qasje në pajisje jo standarde. Shihni delegatët e LiteRT për më shumë informacion.

Kini parasysh se disa përshpejtues funksionojnë më mirë për lloje të ndryshme modelesh. Disa delegatë mbështesin vetëm modele lundruese ose modele të optimizuara në një mënyrë specifike. Është e rëndësishme të krahasoni secilin delegat për të parë nëse është një zgjedhje e mirë për aplikacionin tuaj. Për shembull, nëse keni një model shumë të vogël, mund të mos ia vlejë delegimi i modelit te GPU-ja. Anasjelltas, përshpejtuesit janë një zgjedhje e shkëlqyer për modele të mëdha që kanë intensitet të lartë aritmetik.