Enota 8 / 11

Zmogljivost in optimizacija baterije: hitre in učinkovite aplikacije z umetno inteligenco

Dobički:

  • Tako, da najprej vzamete profil in izmerite pravo ozko grlo, naredite optimizacijo, ki temelji na podatkih in ne na ugibanjih, in da izhod profila interpretira umetna inteligenca
  • Sposobnost ciljanja na najdražjo operacijo v smislu zagonskega časa, tekočnosti, pomnilnika in baterije ter odstranitev težkega dela iz glavne niti
  • Zmožnost upravljanja stroškov baterije in procesorja zmogljivosti umetne inteligence, kot sta model v napravi in klicanje v oblaku, prek vzorčenja in paketne obdelave

Mobilni uporabniki so nepotrpežljivi. Če se aplikacija odpira počasi, med premikanjem visi ali hitro prazni baterijo, jo uporabnik izbriše in v trgovini oceni z zvezdicami. Zmogljivost in učinkovitost baterije sta stvar preživetja mobilne aplikacije; Neposredno vpliva tako na zadovoljstvo uporabnikov kot na uvrstitev v trgovini. AI je močan pripomoček pri odkrivanju ozkih grl (ozkih grl), interpretaciji rezultatov meritev in priporočanju optimizacij. Toda zlato pravilo ostaja: najprej izmerite, nato optimizirajte. V tej enoti se bomo naučili reševati težave z zmogljivostjo in baterijo na način, ki temelji na podatkih, z AI. Posebej pomembno vprašanje je upravljanje vpliva na baterijo in delovanje zmogljivosti AI, ki smo jih dodali v prejšnjih enotah (model na napravi, klicanje v oblaku).

Optimizacija brez merjenja

Največja napaka neizkušenega razvijalca je prediktivna optimizacija: izgubljanje časa z besedami "ta mora biti počasen". Pravo ozko grlo je skoraj vedno na nepričakovanem mestu. Torej najprej se vzame profil (profiliranje — merjenje, kateri del aplikacije porabi koliko časa/pomnilnika/baterije). Android Studio Profiler in Xcode Instruments sta za to nalogo. Posredovanje merilnih podatkov AI pospeši interpretacijo; Toda brez merjenja reči AI "moja aplikacija je počasna, pospeši jo" pomeni slepo napovedovanje.

Štiri glavne osi uspešnosti so:

os

simptom

tipični vzrok

Začetni čas

Aplikacija se odpre pozno

Težko delo na glavni niti

tekoče (jank)

Drsnik se zatakne

Dolga obdelava, nepotrebno ponovno risanje v niti uporabniškega vmesnika

spomin

oteklina, kolaps

Puščanje, velika slika, nenadzorovan predpomnilnik

baterija/gretje

hitra ejakulacija

Neprekinjena lokacija, omrežje, senzor, opravilo v ozadju

Nasvet: ko sprašujete AI o težavi z zmogljivostjo, dajte izhod profila (katera funkcija traja koliko časa, graf pomnilnika). Trdi podatki, kot je »Ta funkcija traja 30 ms na okvir«, omogočajo AI, da se osredotoči na pravo ozko grlo; Subjektivna besedna zveza, kot je "počasen", ustvari splošen in neuporaben odgovor.

Stroški baterije za sposobnosti AI

Funkcije AI, ki smo jih dodali v ta modul, so zmogljive, vendar niso brezplačne. Ekstrahiranje modela v napravi obremenjuje procesor in baterijo; Nenehno delujoče prepoznavanje slike (npr. kamera obdeluje vsak okvir) bo v nekaj minutah segrelo telefon in izpraznilo baterijo. Klici z umetno inteligenco v oblaku pa požirajo baterijo, saj je omrežni radio (antena, ki pošilja in sprejema podatke) ves čas vključen. Rešitve: zaženite model v napravi samo, ko je to potrebno, vzorčite kamero nekajkrat na sekundo namesto vsake sličice, paketno pošljite zahteve v oblaku, opravljajte težja dela, medtem ko se naprava polni ali je v stanju mirovanja.

Pozor: Stalno delujoča funkcija umetne inteligence (prevajanje v živo, neprekinjeno prepoznavanje predmetov) lahko zelo hitro izprazni baterijo, segreje napravo in jo sistem lahko zaduši. Funkcija, zaradi katere uporabnik čuti, da je ta strošek izbrisan. Vedno vprašam AI, "kako naj naredim to funkcijo prijazno do baterije?" Postavite tudi vprašanje.

Koraki optimizacije

  1. Izmeri. Poiščite pravo ozko grlo s Profilerjem; ne ugibajte.
  2. Izberite največji problem. Ne lovite 1% izboljšave; Ciljajte na najdražjo transakcijo.
  3. Vprašajte AI s podatki. Zahtevajte predlog za optimizacijo z izhodom profila + ustrezno kodo.
  4. Nanesite in ponovno izmerite. Ali je izboljšanje resnično? Je številka padla?
  5. Nadzor regresije. Je optimizacija kaj pokvarila? Ponovite vizualno in funkcionalno testiranje.

trije mini kovčki

Primer 1 — Iskanje na napačnem mestu. Ena ekipa je menila, da so se seznami zataknili, in tedne brez uspeha predelovala drsno kodo. Ko so vzeli profiler in podatke vnesli v AI, se je izkazalo, da je pravo ozko grlo slike, ki se znova nalagajo po omrežju z vsako vrstico. Ko je bil dodan vizualni predpomnilnik, se je tekočnost povečala z 42 FPS na 60 FPS. Nauk: meritve se izognejo tednom zaman truda.

2. primer – Funkcija pošastne baterije. Aplikacija za prevajanje je dodala prevod besedila v živo s kamero; Uporabniki so se pritoževali, da se je "telefon segrel v 15 minutah in da je izpraznjena 30% baterije." Po posvetovanju z AI je bilo ugotovljeno, da kamera obdeluje 30 sličic na sekundo; Ko je bilo to zmanjšano na 5 sličic in je bil rezultat posodobljen z nekaj sličicami narazen, se je poraba baterije zmanjšala na tretjino, kakovost pa ni bila opazna. Lekcija: AI vedno nastavite z očesom baterije.

Primer 3 – Počasen začetek. Aplikacija se je odprla v 4,5 sekunde; 20 % uporabnikov je zapuščalo ob zagonu. Profil je pokazal, da je bilo vse začetno delo (analitika, nalaganje podatkov, priprava modela) opravljeno zaporedno na glavni niti. S predlogom umetne inteligence so bili ti odloženi in postavljeni na stranski tir; Odpiralni čas se je zmanjšal na 1,3 sekunde, stopnja opustitve pa prepolovila. Nauk: na začetku opravite le bistvena dela.

Šibek poziv/močan poziv

Šibek poziv: "Moja aplikacija je počasna, pospešite jo."

Zmogljiv poziv: "Drsenje po seznamu se zatakne (jank) v moji aplikaciji za Android. Podatki profilerja: bindImageView potrebuje 28 ms za vsak okvir, slike se vsakič naložijo iz omrežja, ni predpomnilnika. Povezana koda: [koda adapterja RecyclerView]. Priporočite 3 najučinkovitejše optimizacije po vrstnem redu vpliva. Navedite pričakovano pridobitev in možne stranske učinke za vsako. Dajte prednost rešitvam, ki ne zmanjšajo kakovosti slike."

Kopirane predloge

Predloga za analizo ozkih grl: "Interpretirajte naslednje podatke profila in poiščite 3 najdražje operacije: [izhod profilerja]. Predlagajte možen vzrok in konkretno optimizacijo za vsako. Najprej zagotovite največji učinek."

Predloga za optimizacijo baterije: "Ta funkcija hitro prazni baterijo: [funkcija, npr. stalna lokacija]. Naj bo prijazna bateriji: - Zmanjšajte frekvenco vzorčenja - Omejitev v ozadju - Paketna obdelava - Zaženite samo, ko je potrebno, Razvrstite rešitve, ne da bi motili uporabniško izkušnjo. [koda]"

Predloga za pospešitev zagona: "Pospešite zagon aplikacije. Stvari, ki se trenutno izvajajo ob zagonu: [seznam]. Katere je mogoče odložiti, v ozadju ali leno naložiti? Ločite bistvene. [koda]"

Predloga stroškov funkcije umetne inteligence: "Ocenite zmogljivost in stroške baterije funkcije [model v napravi / klic v oblaku], ki sem jo dodal. Navedite meritve, ki jih moram izmeriti, in strategije za zmanjšanje stroškov. [koda]"

Pogoste napake

  • Optimizacija brez merjenja. Pravo ozko grlo je pogosto na drugi lokaciji od predvidene.
  • Lov na majhne dobičke. Ciljajte na najdražje dejanje in ne na 1 % izboljšanje.
  • Zanemarjanje stroškov baterije funkcij AI. Stalno delujoč model/kamera/omrežje požre baterijo.
  • Utrujanje glavne niti. Težko dvigovanje zagona in drsenja ne bi smelo biti na niti uporabniškega vmesnika.
  • Brez ponovnega merjenja po optimizaciji. Preverite, ali je izboljšava resnična in ne pokvari ničesar.
  • Merjenje zmogljivosti v emulatorju. Dejanska hitrost naprave, temperatura in baterija so popolnoma drugačne.

Če povzamem

Zmogljivost in baterija sta stvar preživetja mobilne aplikacije. Zlato pravilo: najprej izmerite, nato optimizirajte. Posredovanje podatkov o profilu AI pospeši interpretacijo; Neizmerna želja po »pospešitvi« vodi v slepo ugibanje. Stremite k najdražji transakciji, ne lovite majhnih dobičkov. Zmogljivosti umetne inteligence, dodane v ta modul, so zmogljive, vendar povzročajo stroške baterije in procesorja; Upravljajte s temi stroški tako, da zmanjšate pogostost vzorčenja, serijsko obdelavo in zagon samo po potrebi. Po vsaki optimizaciji znova izmerite na pravi napravi.

Aplikacijska naloga

Uvozite profil v aplikacijo (vaš lastni projekt ali primer) ali ustvarite vzorčni izhod profila in ga prenesite AI s "Predlogo za analizo ozkih grl". Uporabite optimizacijo z največjim učinkom in znova izmerite: ali je številka dejansko padla? Prav tako ocenite funkcijo umetne inteligence, ki ste jo dodali v tem modulu (model v napravi ali klic v oblaku), glede na baterijo s »predlogo stroškov funkcije umetne inteligence« in določite vsaj eno nastavitev, prijazno do baterije.

kontrolni seznam

  • [ ] Profil sem dobil pred optimizacijo, nisem uganil
  • [ ] Ciljal sem na najdražjo trgovino, nisem trosil na majhne dobičke
  • [ ] Podatke profila AI sem podal v konkretnih številkah
  • [ ] Ocenil sem stroške baterije/procesorja funkcij umetne inteligence
  • [ ] Odstranil sem težko delo z glavne niti
  • [ ] Po optimizaciji sem ponovno izmeril na realni napravi in preveril regresijo