Jedinica 8 / 11

Optimizacija performansi i baterije: brze i učinkovite aplikacije s umjetnom inteligencijom

Dobici:

  • Najprije uzimanjem profila i mjerenjem stvarnog uskog grla, optimizacijom temeljenom na podacima, a ne nagađanjima i tumačenjem rezultata profila pomoću umjetne inteligencije
  • Sposobnost ciljanja najskuplje operacije u smislu vremena pokretanja, tečnosti, memorije i baterije i uklanjanja teškog posla iz glavne niti
  • Sposobnost upravljanja baterijom i troškovima procesora AI mogućnosti kao što su model na uređaju i pozivanje u oblaku putem uzorkovanja i skupne obrade

Mobilni korisnici su nestrpljivi. Ako se aplikacija otvara sporo, zastaje dok se pomiče ili brzo prazni bateriju, korisnik je briše i ocjenjuje zvjezdicom u trgovini. Performanse i učinkovitost baterije pitanje su opstanka mobilne aplikacije; To izravno utječe i na zadovoljstvo korisnika i na rangiranje u trgovini. AI je snažna pomoć u otkrivanju uskih grla (uskih grla), tumačenju rezultata mjerenja i preporučivanju optimizacija. Ali zlatno pravilo ostaje: prvo mjerite, kasnije optimizirajte. U ovoj jedinici naučit ćemo rješavati probleme s performansama i baterijom na način temeljen na podacima pomoću umjetne inteligencije. Posebno važno pitanje je upravljanje utjecajem na bateriju i performanse AI mogućnosti koje smo dodali u prethodnim jedinicama (model na uređaju, pozivanje u oblaku).

Optimizacija bez mjerenja

Najveća pogreška neiskusnog programera je prediktivna optimizacija: gubljenje vremena govoreći "ova mora biti spora". Pravo usko grlo je gotovo uvijek na neočekivanom mjestu. Dakle, prvo se uzima profil (profiliranje — mjerenje koji dio aplikacije troši koliko vremena/memorije/baterije). Android Studio Profiler i Xcode Instruments su za ovaj posao. Davanje mjernih podataka AI ubrzava tumačenje; Ali bez mjerenja, reći umjetnoj inteligenciji "moja je aplikacija spora, ubrzaj je" znači naslijepo predviđati.

Četiri glavne osi učinka su:

osovina

simptom

tipičan uzrok

Vrijeme početka

Prijava se otvara kasno

Teški rad na glavnoj niti

tečno (jank)

Svitak se zaglavi

Duga obrada, nepotrebno ponovno crtanje u niti korisničkog sučelja

pamćenje

oteklina, kolaps

Curenje, velika slika, nekontrolirana predmemorija

baterija/toplina

brza ejakulacija

Neprekidna lokacija, mreža, senzor, pozadinski posao

Savjet: kada pitate AI o problemu s performansama, dajte izlaz profila (koja funkcija traje koliko dugo, grafikon memorije). Čvrsti podaci poput "Ta funkcija traje 30 ms po okviru" omogućuju AI da se usredotoči na stvarno usko grlo; Subjektivna fraza poput "sporo" proizvodi generički i beskoristan odgovor.

Cijena baterije AI sposobnosti

AI značajke koje smo dodali u ovaj modul su moćne, ali nisu besplatne. Izdvajanje modela na uređaju opterećuje procesor i bateriju; Stalno pokrenuto prepoznavanje slike (npr. kamera obrađuje svaki kadar) zagrijat će telefon i isprazniti bateriju u roku od nekoliko minuta. Cloud AI pozivi, s druge strane, troše bateriju držeći mrežni radio (antena koja šalje i prima podatke) uključenim cijelo vrijeme. Rješenja: pokrenite model na uređaju samo kada je to potrebno, uzorkujte kameru nekoliko puta u sekundi umjesto svakog okvira, grupno šaljite zahtjeve u oblaku, obavljajte teške poslove dok se uređaj puni ili je u stanju mirovanja.

Oprez: Značajka umjetne inteligencije koja stalno radi (prevod uživo, kontinuirano prepoznavanje objekata) može vrlo brzo isprazniti bateriju, zagrijati uređaj i sustav može biti prigušen. Značajka zbog koje korisnik osjeća da je ovaj trošak izbrisan. Uvijek pitam AI "kako ovu značajku učiniti prilagođenom bateriji?" Također postavite pitanje.

Koraci optimizacije

  1. Mjera. Pronađite pravo usko grlo uz Profiler; ne pogađaj.
  2. Odaberite najveći problem. Nemojte juriti za 1% poboljšanja; Ciljajte na najskuplju transakciju.
  3. Pitajte AI s podacima. Zatražite prijedlog optimizacije s izlazom profila + relevantnim kodom.
  4. Nanesite i ponovno izmjerite. Je li poboljšanje stvarno? Je li broj pao?
  5. Kontrola regresije. Je li optimizacija nešto pokvarila? Ponovite vizualno i funkcionalno testiranje.

tri mini kućišta

Slučaj 1 — Pretraživanje na pogrešnom mjestu. Jedan tim je mislio da su popisi zapeli i tjednima je bezuspješno prerađivao kod za pomicanje. Kad su uzeli profiler i unijeli podatke u AI, pokazalo se da je pravo usko grlo slike koje se ponovno učitavaju preko mreže sa svakim redom. Kada je dodana vizualna predmemorija, tečnost je porasla s 42 FPS na 60 FPS. Pouka: mjerenjem se izbjegavaju tjedni uzaludnog truda.

Slučaj 2 — Čudovišna značajka baterije. Aplikacija za prevođenje dodala je prijevod teksta uživo s kamerom; Korisnici su se žalili da se "telefon zagrijao za 15 minuta i da je nestalo 30% baterije". Kada je AI konzultiran, ustanovljeno je da kamera obrađuje 30 sličica u sekundi; Kad je to smanjeno na 5 okvira i rezultat ažuriran u razmaku od nekoliko okvira, potrošnja baterije se smanjila na jednu trećinu, a kvaliteta nije bila primjetna. Lekcija: Uvijek postavite AI s okom baterije.

Slučaj 3 — Spori početak. Aplikacija se otvarala za 4,5 sekunde; 20% korisnika izlazilo je pri pokretanju. Profil je pokazao da je sav inicijalni posao (analitika, učitavanje podataka, priprema modela) obavljen uzastopno na glavnoj niti. Uz prijedlog umjetne inteligencije, oni su odgođeni i stavljeni u drugi plan; Vrijeme otvaranja smanjeno je na 1,3 sekunde, a stopa napuštanja prepolovljena. Pouka: u početku radite samo bitne poslove.

Slab upit / Jak upit

Slab upit: "Moja je aplikacija spora, ubrzaj je."

Snažan upit: "Pomicanje popisa se zaglavilo (jank) u mojoj Android aplikaciji. Podaci Profilera: bindImageView traje 28 ms za svaki okvir, slike se svaki put učitavaju s mreže, nema predmemorije. Povezani kod: [Kôd adaptera RecyclerView]. Preporučite 3 najučinkovitije optimizacije prema redoslijedu utjecaja. Navedite očekivani dobitak i moguće nuspojave za svaku. Dajte prioritet rješenjima koja ne smanjuju kvalitetu slike."

Predlošci koji se mogu kopirati

Predložak analize uskog grla: "Interpretirajte sljedeće podatke profila i pronađite 3 najskuplje operacije: [izlaz profilera]. Predložite mogući uzrok i konkretnu optimizaciju za svaku. Prvo dajte najveći učinak."

Predložak za optimizaciju baterije: "Ova značajka brzo prazni bateriju: [značajka, npr. stalna lokacija]. Učinite je prilagođenom bateriji:- Smanjite učestalost uzorkovanja- Ograničenje u pozadini- Skupna obrada- Pokreni samo kada je potrebno Sortiraj rješenja bez ometanja korisničkog iskustva. [kod]"

Predložak za ubrzanje pokretanja: "Ubrzajte pokretanje aplikacije. Stvari koje se trenutno rade pri pokretanju: [popis]. Što se može odgoditi, raditi u pozadini ili lijeno učitati? Odvojite one bitne. [kod]"

Predložak cijene značajke umjetne inteligencije: "Procijenite izvedbu i cijenu baterije značajke [model na uređaju / poziv u oblaku] koju sam dodao. Navedite mjerne podatke koje bih trebao mjeriti i strategije za smanjenje troškova. [kod]"

Uobičajene greške

  • Optimizacija bez mjerenja. Pravo usko grlo često je na drugom mjestu od predviđenog.
  • Jurnjava za malim dobicima. Ciljajte na najskuplju akciju, a ne na poboljšanje od 1%.
  • Ignoriranje troškova baterije AI značajki. Konstantno uključen model/kamera/mreža troši bateriju.
  • Zamaranje glavne niti. Težak posao pokretanja i pomicanja ne bi trebao biti na niti korisničkog sučelja.
  • Nema ponovnog mjerenja nakon optimizacije. Provjerite je li poboljšanje stvarno i ništa ne kvari.
  • Mjerenje performansi u emulatoru. Stvarna brzina uređaja, temperatura i baterija potpuno su drugačiji.

Ukratko

Performanse i baterija stvar su opstanka mobilne aplikacije. Zlatno pravilo: prvo mjeri, kasnije optimiziraj. Davanje podataka o profilu AI-u ubrzava tumačenje; Neizmjerna želja za „ubrzanjem“ dovodi do slijepih nagađanja. Ciljajte na najskuplju transakciju, nemojte juriti za malim profitom. Mogućnosti umjetne inteligencije dodane u ovaj modul su moćne, ali nose troškove baterije i procesora; Upravljajte ovim troškom smanjenjem učestalosti uzorkovanja, grupnim spajanjem i pokretanjem samo po potrebi. Ponovno izmjerite na stvarnom uređaju nakon svake optimizacije.

Zadatak aplikacije

Uvezite profil u aplikaciju (vaš vlastiti projekt ili primjer) ili izradite ogledni izlaz profila i neka ga AI interpretira pomoću "Predloška analize uskog grla". Primijenite optimizaciju najvećeg učinka i ponovno izmjerite: je li broj doista pao? Također, procijenite značajku umjetne inteligencije koju ste dodali u ovaj modul (model na uređaju ili poziv u oblaku) u smislu baterije pomoću "predloška cijene značajke umjetne inteligencije" i odredite barem jednu postavku prilagođenu bateriji.

popis za provjeru

  • [ ] Dobio sam profil prije optimizacije, nisam pogodio
  • [ ] Ciljao sam na najskuplju trgovinu, nisam se razbacivao malim profitom
  • [ ] Dao sam podatke profila AI u konkretnim brojevima
  • [ ] Procijenio sam cijenu baterije/procesora za značajke umjetne inteligencije
  • [ ] Uklonio sam težak posao s glavne niti
  • [ ] Nakon optimizacije ponovno sam mjerio na stvarnom uređaju i provjerio regresiju