Yunit 8 / 11

Pagganap at Pag-optimize ng Baterya: Mabilis at Mahusay na Application na may Artipisyal na Katalinuhan

Mga nadagdag:

  • Sa pamamagitan ng unang pagkuha ng isang profile at pagsukat ng tunay na bottleneck, paggawa ng pag-optimize batay sa data sa halip na paghula at pagkakaroon ng output ng profile na binibigyang kahulugan ng artificial intelligence
  • Kakayahang i-target ang pinakamahal na operasyon sa mga tuntunin ng oras ng pagsisimula, katatasan, memorya at baterya at alisin ang mabibigat na gawain mula sa pangunahing thread
  • Kakayahang pamahalaan ang gastos ng baterya at processor ng mga kakayahan ng AI tulad ng on-device na modelo at cloud calling sa pamamagitan ng sampling at batch processing

Ang mga gumagamit ng mobile ay naiinip. Kung mabagal na bumukas ang app, nag-hang habang nag-i-scroll, o mabilis na naubos ang baterya, ide-delete ito ng user at bibigyan ito ng star rating sa store. Ang pagganap at kahusayan ng baterya ay isang bagay sa kaligtasan ng isang mobile app; Direkta itong nakakaapekto sa kasiyahan ng user at pagraranggo ng tindahan. Ang AI ay isang mahusay na tulong sa pag-detect ng mga bottleneck ng performance (mga bottleneck), pagbibigay-kahulugan sa mga resulta ng pagsukat, at pagrerekomenda ng mga pag-optimize. Ngunit nananatili ang ginintuang panuntunan: sukatin muna, i-optimize sa ibang pagkakataon. Sa unit na ito, matututunan nating lutasin ang mga problema sa performance at baterya sa paraang nakabatay sa data gamit ang AI. Ang isang partikular na mahalagang isyu ay ang pamamahala sa epekto sa baterya at pagganap ng mga kakayahan ng AI na idinagdag namin sa mga nakaraang unit (modelo sa device, cloud calling).

Pag-optimize nang walang pagsukat

Ang pinakamalaking pagkakamali ng isang walang karanasan na developer ay predictive optimization: pag-aaksaya ng oras sa pagsasabing "ito ay dapat mabagal." Ang tunay na bottleneck ay halos palaging nasa isang hindi inaasahang lugar. Kaya muna ang profile ay kinuha (profiling — pagsukat kung aling bahagi ng application ang kumukonsumo kung gaano karaming oras/memorya/baterya). Ang Android Studio Profiler at Xcode Instruments ay para sa trabahong ito. Ang pagbibigay ng data ng pagsukat sa AI ay nagpapabilis ng interpretasyon; Ngunit nang walang pagsukat, ang pagsasabi sa AI na "mabagal ang aking aplikasyon, pabilisin ito" ay nangangahulugan ng walang taros na paggawa ng mga hula.

Ang apat na pangunahing axes ng pagganap ay:

axis

sintomas

karaniwang dahilan

Oras ng pagsisimula

Ang aplikasyon ay nagbubukas nang huli

Mabigat na gawain sa pangunahing thread

Katatasan (jank)

Natigil ang pag-scroll

Mahabang pagpoproseso, hindi kinakailangang redraw sa UI thread

alaala

pamamaga, pagbagsak

Leak, malaking imahe, hindi makontrol ang cache

baterya/init

mabilis na bulalas

Patuloy na lokasyon, network, sensor, trabaho sa background

Tip: Kapag nagtatanong sa AI tungkol sa isang isyu sa pagganap, ibigay ang output ng profile (kung aling function ang tatagal, memory graph). Ang hard data tulad ng "Ang function na iyon ay tumatagal ng 30ms bawat frame" ay nagbibigay-daan sa AI na tumuon sa tunay na bottleneck; Ang isang subjective na parirala tulad ng "mabagal" ay gumagawa ng isang generic at walang silbi na sagot.

Gastos ng baterya ng mga kakayahan ng AI

Ang mga tampok ng AI na idinagdag namin sa modyul na ito ay makapangyarihan, ngunit hindi sila libre. Ang pag-extract ng isang on-device na modelo ay nagpapahirap sa processor at baterya; Ang patuloy na gumaganang pagkilala sa imahe (hal. pagpoproseso ng camera sa bawat frame) ay magpapainit sa telepono at maubos ang baterya sa loob ng ilang minuto. Ang mga tawag sa Cloud AI, sa kabilang banda, ay kumakain ng baterya sa pamamagitan ng pagpapanatili ng network radio (ang antenna na nagpapadala at tumatanggap ng data) sa lahat ng oras. Mga Solusyon: patakbuhin lang ang on-device na modelo kapag kailangan, sample ng camera ng ilang beses bawat segundo sa halip na ang bawat frame, batch send cloud requests, gawin ang heavy lifting habang nagcha-charge o idle ang device.

Babala: Ang isang patuloy na gumaganang tampok na AI (live na pagsasalin, tuluy-tuloy na pagkilala sa bagay) ay maaaring maubos ang baterya nang napakabilis, magpainit ng device, at maaaring ma-throttle ng system. Ang isang tampok na nagpaparamdam sa gumagamit na ang gastos na ito ay tinanggal. Palagi kong tinatanong ang AI "paano ko gagawin ang feature na ito na battery friendly?" Magtanong din.

Mga hakbang ng pag-optimize

  1. Sukatin. Hanapin ang tunay na bottleneck sa Profiler; huwag mong hulaan.
  2. Piliin ang pinakamalaking problema. Huwag habulin ang 1% na pagpapabuti; Layunin ang pinakamahal na transaksyon.
  3. Magtanong sa AI na may data. Humiling ng mungkahi sa pag-optimize na may output ng profile + may-katuturang code.
  4. Ilapat at sukatin muli. Totoo ba ang pagpapabuti? Bumaba ba ang numero?
  5. Kontrol ng regression. May sinira ba ang pag-optimize? Ulitin ang visual at functional na pagsubok.

tatlong mini case

Case 1 — Paghahanap sa maling lugar. Naisip ng isang koponan na ang mga listahan ay natigil at muling ginawa ang scrolling code sa loob ng ilang linggo nang hindi nagtagumpay. Nang kinuha nila ang profiler at ipinakain ang data sa AI, lumabas na ang tunay na bottleneck ay ang mga imahe na nire-reload sa network sa bawat hilera. Kapag naidagdag ang visual cache, tumaas ang fluency mula 42 FPS hanggang 60 FPS. Aralin: iniiwasan ng pagsukat ang mga linggo ng walang saysay na pagsisikap.

Case 2 — Baterya monster feature. Nagdagdag ang isang app ng pagsasalin ng live na pagsasalin ng teksto gamit ang camera; Ang mga gumagamit ay nagreklamo na "ang telepono ay uminit sa loob ng 15 minuto at 30% ng baterya ay nawala." Nang konsultahin ang AI, napag-alamang nagpoproseso ang camera ng 30 frame bawat segundo; Kapag ito ay nabawasan sa 5 mga frame at ang resulta ay na-update ng ilang mga frame sa pagitan, ang pagkonsumo ng baterya ay bumaba sa isang ikatlo, at ang kalidad ay hindi napapansin. Aralin: Palaging itakda ang AI gamit ang mata ng baterya.

Kaso 3 — Mabagal na pagsisimula. Bubukas ang isang app sa loob ng 4.5 segundo; 20% ng mga user ay lumabas sa startup. Ipinakita ng profile na ang lahat ng paunang gawain (analytics, pag-load ng data, paghahanda ng modelo) ay ginawa nang sunud-sunod sa pangunahing thread. Sa panukala ng AI, ang mga ito ay ipinagpaliban at inilagay sa back burner; Ang oras ng pagbubukas ay nabawasan sa 1.3 segundo, at ang rate ng pag-abandona ay nahati sa kalahati. Aralin: gawin lamang ang mahahalagang gawain sa simula.

Mahinang prompt / Malakas na prompt

Mahinang prompt: "Mabagal ang aking app, bilisan ito."

Napakahusay na prompt: "Ang pag-scroll ng listahan ay natigil (jank) sa aking Android application. Data ng profiler: ang bindImageView ay tumatagal ng 28ms sa bawat frame, ang mga larawan ay nilo-load mula sa network sa bawat oras, walang cache. Kaugnay na code: [RecyclerView adapter code]. Inirerekomenda ang 3 pinakaepektibong pag-optimize ayon sa pagkakasunud-sunod ng epekto. Sabihin ang inaasahang pakinabang at posibleng mga side effect para sa bawat isa.

Mga nakopyang template

Bottleneck analysis template: "I-interpret ang sumusunod na data ng profile at hanapin ang 3 pinakamahal na operasyon: [profiler output]. Magmungkahi ng posibleng dahilan at konkretong pag-optimize para sa bawat isa. Ibigay muna ang pinakamataas na epekto."

Template ng pag-optimize ng baterya:"Mabilis na nakakaubos ng baterya ang feature na ito: [feature, e.g. permanenteng lokasyon]. Gawin itong battery friendly:- Bawasan ang dalas ng sampling- Restriction sa background- Batch processing- Patakbuhin lang kapag kinakailangan Pagbukud-bukurin ang mga solusyon nang hindi nakakaabala sa karanasan ng user. [code]"

Template ng bilis ng startup: "Pabilisin ang pagsisimula ng application. Mga bagay na kasalukuyang ginagawa sa pagsisimula: [listahan]. Alin ang maaaring ipagpaliban, i-background, o tamad na i-load? Paghiwalayin ang mga mahahalagang bagay. [code]"

Template ng gastos sa feature ng AI: "Suriin ang performance at gastos ng baterya ng feature na [on-device na modelo / cloud call] na idinagdag ko. Ilista ang mga sukatan na dapat kong sukatin at mga diskarte para mabawasan ang gastos. [code]"

Mga karaniwang pagkakamali

  • Pag-optimize nang walang pagsukat. Ang tunay na bottleneck ay kadalasang nasa ibang lokasyon kaysa sa hinulaang.
  • Hinahabol ang maliliit na pakinabang. Layunin ang pinakamahal na aksyon sa halip na ang 1% na pagpapabuti.
  • Hindi pinapansin ang halaga ng baterya ng mga feature ng AI. Ang patuloy na pagpapatakbo ng modelo/camera/network ay kumakain ng baterya.
  • Nakakapagod ang main thread. Ang mabigat na pag-angat ng pagsisimula at pag-scroll ay hindi dapat nasa UI thread.
  • Hindi muling pagsukat pagkatapos ng pag-optimize. I-verify na totoo ang improvement at walang sinisira.
  • Pagsukat ng pagganap sa emulator. Ang aktwal na bilis ng device, temperatura at baterya ay ganap na naiiba.

Sa buod

Ang pagganap at baterya ay isang bagay ng kaligtasan ng mobile app. Ang ginintuang panuntunan: sukatin muna, i-optimize sa ibang pagkakataon. Ang pagbibigay ng data ng profile sa AI ay nagpapabilis ng interpretasyon; Ang hindi masusukat na pagnanais na "pabilisin" ay humahantong sa mga bulag na hula. Layunin ang pinakamahal na transaksyon, huwag habulin ang maliliit na kita. Ang mga kakayahan ng AI na idinagdag sa modyul na ito ay makapangyarihan ngunit nagdadala ng mga gastos sa baterya at processor; Pamahalaan ang gastos na ito sa pamamagitan ng pagbabawas ng dalas ng sampling, pag-batch, at pagpapatakbo lamang kapag kinakailangan. Sukatin muli sa totoong device pagkatapos ng bawat pag-optimize.

Gawain ng aplikasyon

Mag-import ng profile sa isang application (iyong sariling proyekto o halimbawa) o gumawa ng sample na profile output at ipakahulugan ito ng AI gamit ang "Bottleneck analysis template". Ilapat ang pinakamataas na epekto sa pag-optimize at sukatin muli: talagang bumaba ba ang bilang? Gayundin, suriin ang isang tampok na AI na idinagdag mo sa module na ito (modelo sa device o cloud call) sa mga tuntunin ng baterya gamit ang "template ng gastos ng tampok na AI" at tukuyin ang hindi bababa sa isang setting na madaling gamitin sa baterya.

checklist

  • [ ] Nakakuha ako ng profile bago ang pag-optimize, hindi ko nahulaan
  • [ ] Nilalayon ko ang pinakamahal na kalakalan, hindi ako nagkalat sa maliit na kita
  • [ ] Ibinigay ko ang data ng profile ng AI sa mga kongkretong numero
  • [ ] Sinuri ko ang halaga ng baterya/processor ng mga feature ng AI
  • [ ] Inalis ko ang mabigat na pagbubuhat sa pangunahing sinulid
  • [ ] Pagkatapos ng pag-optimize, sinukat ko muli sa totoong device at sinuri ang regression