Vienetas 8 / 11

Našumo ir baterijos optimizavimas: greitos ir efektyvios programos su dirbtiniu intelektu

Pelnas:

  • Pirmiausia nustatant profilį ir išmatuojant tikrąją kliūtį, optimizuojant duomenis, o ne spėliojimu ir profilio išvestį interpretuojant dirbtiniu intelektu.
  • Galimybė nukreipti į brangiausią operaciją paleidimo laiko, sklandumo, atminties ir akumuliatoriaus atžvilgiu ir pašalinti sunkų darbą nuo pagrindinės gijos
  • Galimybė valdyti AI funkcijų, pvz., modelio įrenginyje ir skambučiai iš debesies, akumuliatoriaus ir procesoriaus sąnaudas, naudojant mėginių ėmimą ir paketinį apdorojimą

Mobilieji vartotojai nekantrūs. Jei programėlė atsidaro lėtai, stringa slenkant arba greitai išsikrauna baterija, vartotojas ją ištrina ir parduotuvėje įvertina žvaigždute. Našumas ir baterijos efektyvumas yra mobiliosios programėlės išlikimo klausimas; Tai tiesiogiai veikia vartotojų pasitenkinimą ir parduotuvės reitingą. AI yra galinga pagalba nustatant našumo kliūtis, interpretuojant matavimo rezultatus ir rekomenduojant optimizuoti. Tačiau auksinė taisyklė išlieka: pirmiausia išmatuokite, vėliau optimizuokite. Šiame skyriuje išmokysime spręsti našumo ir baterijos problemas duomenimis pagrįstu būdu su AI. Ypač svarbi problema yra valdyti ankstesniuose įrenginiuose pridėtų AI galimybių poveikį akumuliatoriui ir našumui (modelis įrenginyje, skambučiai iš debesies).

Optimizavimas be matavimų

Didžiausia nepatyrusio kūrėjo klaida – nuspėjamasis optimizavimas: gaištamas laikas sakydamas „šitas turi būti lėtas“. Tikroji kliūtis beveik visada yra netikėtoje vietoje. Taigi pirmiausia paimamas profilis (profiliavimas – matuojama, kuri programos dalis sunaudoja kiek laiko/atminties/baterijos). „Android Studio Profiler“ ir „Xcode Instruments“ yra skirti šiam darbui. Matavimo duomenų suteikimas AI pagreitina interpretaciją; Tačiau be matavimo AI pasakymas „mano programa lėta, paspartink“ reiškia aklai prognozuoti.

Keturios pagrindinės veiklos ašys yra šios:

ašį

simptomas

tipinė priežastis

Pradžios laikas

Paraiška atidaroma vėlai

Sunkus pagrindinės sriegio darbas

Sklandus kalbėjimas

Slinktis užstringa

Ilgas apdorojimas, nereikalingas perpiešimas vartotojo sąsajos gijoje

atmintis

patinimas, kolapsas

Nutekėjimas, didelis vaizdas, talpykla nekontroliuojama

baterija/šiluma

greita ejakuliacija

Nuolatinis vietos, tinklo, jutiklio, fono darbas

Patarimas: klausdami dirbtinio intelekto apie našumo problemą, nurodykite profilio išvestį (kuri funkcija kiek laiko užtrunka, atminties grafikas). Kietieji duomenys, pvz., „Ši funkcija trunka 30 ms vienam kadrui“, leidžia AI sutelkti dėmesį į tikrąją kliūtį; Subjektyvi frazė, tokia kaip „lėtas“, pateikia bendrą ir nenaudingą atsakymą.

AI galimybių baterijos kaina

AI funkcijos, kurias įtraukėme į šį modulį, yra galingos, tačiau jos nėra nemokamos. Įrenginyje esančio modelio ištraukimas apkrauna procesorių ir bateriją; Nuolat veikiantis vaizdo atpažinimas (pvz., fotoaparatas apdoroja kiekvieną kadrą) per kelias minutes įkaitins telefoną ir išsikraus bateriją. Kita vertus, debesies AI skambučiai eikvoja bateriją, nes tinklo radijas (antena, siunčianti ir priimanti duomenis) yra nuolat įjungta. Sprendimai: paleiskite įrenginyje esantį modelį tik tada, kai reikia, paimkite kameros pavyzdžius kelis kartus per sekundę, o ne kiekvieną kadrą, siųskite paketines debesies užklausas, atlikite sunkius darbus, kol įrenginys kraunamas arba neveikia.

Įspėjimas: nuolat veikianti AI funkcija (tiesioginis vertimas, nuolatinis objektų atpažinimas) gali labai greitai iškrauti akumuliatorių, įkaisti įrenginį ir gali būti užblokuotas sistemos. Funkcija, leidžianti vartotojui pajusti, kad ši kaina panaikinta. Aš visada klausiu AI „kaip padaryti šią funkciją draugišką akumuliatoriui? Taip pat užduokite klausimą.

Optimizavimo žingsniai

  1. Išmatuoti. Raskite tikrąją kliūtį naudodami Profiler; nespėk.
  2. Pasirinkite didžiausią problemą. Nesiekite 1% pagerėjimo; Siekite brangiausio sandorio.
  3. Paklauskite AI su duomenimis. Prašyti optimizavimo pasiūlymo su profilio išvestimi + atitinkamu kodu.
  4. Užtepkite ir dar kartą išmatuokite. Ar pagerėjimas realus? Ar skaičius sumažėjo?
  5. Regresijos kontrolė. Ar optimizavimas ką nors sugadino? Pakartokite vizualinį ir funkcinį testavimą.

trys mini dėklai

1 atvejis – paieška netinkamoje vietoje. Viena komanda manė, kad sąrašai įstrigo, ir savaitėmis perdarė slinkimo kodą be jokios naudos. Kai jie paėmė profiliuotoją ir padavė duomenis į AI, paaiškėjo, kad tikroji kliūtis buvo vaizdai, kurie tinkle įkeliami iš naujo su kiekviena eilute. Pridėjus vizualinę talpyklą, sklandumas padidėjo nuo 42 FPS iki 60 FPS. Pamoka: matuojant išvengiama savaitės beprasmiškų pastangų.

2 atvejis – akumuliatoriaus monstro funkcija. Vertimo programėlė pridėjo tiesioginį teksto vertimą su kamera; Vartotojai skundėsi, kad „telefonas įkaito per 15 minučių ir dingo 30 % akumuliatoriaus“. Pasikonsultavus su AI, nustatyta, kad fotoaparatas apdoroja 30 kadrų per sekundę; Sumažinus tai iki 5 kadrų, o rezultatą atnaujinus kelių kadrų atstumu, baterijos sąnaudos sumažėjo iki trečdalio, o kokybė nebuvo pastebima. Pamoka: Visada nustatykite AI naudodami akumuliatoriaus ąselę.

3 atvejis – lėta pradžia. Programėlė atsidarė per 4,5 sekundės; 20 % vartotojų išėjo paleisties metu. Profilis parodė, kad visi pradiniai darbai (analizė, duomenų įkėlimas, modelio paruošimas) buvo atliekami nuosekliai pagrindinėje gijoje. Pasiūlius dirbtinį intelektą, jie buvo atidėti ir nustumti atgal; Atidarymo laikas buvo sutrumpintas iki 1,3 sekundės, o atsisakymo rodiklis sumažėjo perpus. Pamoka: pradžioje atlik tik būtiniausius darbus.

Silpnas raginimas / Stiprus raginimas

Silpnas raginimas: „Mano programa lėta, paspartinkite“.

Galingas raginimas: "Sąrašo slinkimas įstringa (jank) mano Android programoje. Profiliavimo duomenys: bindImageView užtrunka 28 ms kiekviename kadre, vaizdai įkeliami iš tinklo kiekvieną kartą, nėra talpyklos. Susijęs kodas: [RecyclerView adapterio kodas]. Rekomenduokite 3 efektyviausius optimizavimo būdus poveikio tvarka. Nurodykite kiekvieno tikėtino vaizdo kokybės padidėjimo ir galimo šalutinio poveikio nesumažinkite."

Kopijuojami šablonai

Kliūties kaklelio analizės šablonas: "Interpretuokite šiuos profilio duomenis ir raskite 3 brangiausias operacijas: [profiliatoriaus išvestis]. Pasiūlykite galimą priežastį ir konkretų kiekvienos iš jų optimizavimą. Pirmiausia suteikite didžiausią poveikį."

Akumuliatoriaus optimizavimo šablonas: „Ši funkcija greitai išeikvoja akumuliatorių: [funkcija, pvz., nuolatinė vieta]. Padarykite ją draugišką akumuliatoriui: – Sumažinkite mėginių ėmimo dažnį – Apribokite fone – Pakeistinį apdorojimą – Vykdykite tik tada, kai reikia Rūšiuoti sprendimus nesutrikdant naudotojo patirties. [kodas]“

Paleidimo pagreitinimo šablonas: "Pagreitinkite programos paleidimą. Šiuo metu paleidžiant atliekami dalykai: [sąrašas]. Kurį galima atidėti, naudoti fone arba įkelti tingiai? Atskirkite esminius. [kodas]"

AI funkcijos kainos šablonas: „Įvertinkite mano pridėtos [įrenginio modelio / skambučio iš debesies] funkcijos našumą ir akumuliatoriaus kainą. Išvardykite metriką, kurią turėčiau įvertinti, ir strategijas, kaip sumažinti išlaidas. [kodas]“

Dažnos klaidos

  • Optimizavimas be matavimų. Tikroji kliūtis dažnai yra kitoje vietoje, nei buvo prognozuota.
  • Siekis nedidelio pelno. Siekite brangiausio veiksmo, o ne 1 % pagerinimo.
  • Nepaisoma AI funkcijų akumuliatoriaus kainos. Nuolat veikiantis modelis/kamera/tinklas eikvoja bateriją.
  • Nuvargina pagrindinė tema. Sunkus paleidimas ir slinkimas neturėtų būti susijęs su vartotojo sąsaja.
  • Po optimizavimo pakartotinai nematuojama. Patikrinkite, ar patobulinimas yra tikras ir nieko nepažeidžia.
  • Našumo matavimas emuliatoriuje. Faktinis įrenginio greitis, temperatūra ir baterija visiškai skiriasi.

Apibendrinant

Našumas ir baterija yra mobiliosios programos išlikimo klausimas. Auksinė taisyklė: pirmiausia išmatuokite, vėliau optimizuokite. Profilio duomenų suteikimas AI pagreitina interpretaciją; Neišmatuojamas noras „paspartinti“ priveda prie aklų spėlionių. Siekite brangiausio sandorio, nesivaikykite nedidelio pelno. Šiame modulyje pridėtos AI galimybės yra galingos, tačiau reikalauja baterijos ir procesoriaus išlaidų; Valdykite šias išlaidas sumažindami mėginių ėmimo dažnumą, paketavimą ir vykdydami tik tada, kai reikia. Po kiekvieno optimizavimo išmatuokite dar kartą realiame įrenginyje.

Taikymo užduotis

Importuokite profilį į programą (savo projektą ar pavyzdį) arba sukurkite pavyzdinį profilio išvestį ir pasirūpinkite, kad AI jį interpretuotų naudodamas „Bottelio kakliuko analizės šabloną“. Taikykite didžiausio poveikio optimizavimą ir dar kartą įvertinkite: ar skaičius iš tikrųjų sumažėjo? Be to, įvertinkite AI funkciją, kurią pridėjote šiame modulyje (įrenginio modelį arba skambutį iš debesies) pagal akumuliatorių naudodami „AI funkcijos kainos šabloną“ ir nustatykite bent vieną akumuliatorių tausojantį nustatymą.

kontrolinis sąrašas

  • [ ] Profilį gavau prieš optimizavimą, nespėjau
  • [ ] Siekiau į brangiausią prekybą, nesibarsčiau ant smulkaus pelno
  • [ ] AI profilio duomenis pateikiau konkrečiais skaičiais
  • [ ] Įvertinau AI funkcijų baterijos / procesoriaus kainą
  • [ ] Nuėmiau sunkų kėlimą nuo pagrindinio sriegio
  • [ ] Po optimizavimo dar kartą išmatavau realiame įrenginyje ir patikrinau regresiją