Kitengo 8 / 11

Utendaji na Uboreshaji wa Betri: Programu za Haraka na Bora zenye Akili Bandia

Faida:

  • Kwa kuchukua wasifu kwanza na kupima kizuizi halisi, kufanya uboreshaji kulingana na data badala ya kubahatisha na kuwa na matokeo ya wasifu kufasiriwa na akili ya bandia.
  • Uwezo wa kulenga operesheni ya gharama kubwa zaidi katika suala la wakati wa kuanza, ufasaha, kumbukumbu na betri na kuondoa kazi nzito kutoka kwa uzi kuu.
  • Uwezo wa kudhibiti gharama ya betri na processor ya uwezo wa AI kama vile modeli ya kifaa na kupiga simu kwa wingu kupitia sampuli na usindikaji wa kundi.

Watumiaji wa simu hawana subira. Ikiwa programu itafunguliwa polepole, hutegemea wakati wa kusogeza, au ikimaliza chaji haraka, mtumiaji huifuta na kuipa ukadiriaji wa nyota kwenye duka. Utendaji na ufanisi wa betri ni suala la maisha ya programu ya simu; Inaathiri moja kwa moja kuridhika kwa mtumiaji na cheo cha duka. AI ni usaidizi mkubwa katika kugundua vikwazo vya utendakazi (vijiti), kutafsiri matokeo ya kipimo, na kupendekeza uboreshaji. Lakini kanuni ya dhahabu inabaki: pima kwanza, boresha baadaye. Katika kitengo hiki, tutajifunza kutatua matatizo ya utendaji na betri kwa njia inayotegemea data na AI. Suala muhimu hasa ni kudhibiti athari kwenye betri na utendakazi wa uwezo wa AI tulioongeza katika vitengo vilivyotangulia (muundo wa kifaa, kupiga simu kupitia wingu).

Kuboresha bila kupima

Kosa kubwa la msanidi programu asiye na uzoefu ni uboreshaji wa ubashiri: kupoteza muda kusema "huyu lazima awe polepole". Shida ya kweli iko karibu kila wakati mahali usiyotarajiwa. Kwa hivyo kwanza wasifu unachukuliwa (kuweka wasifu - kupima ni sehemu gani ya programu hutumia muda/kumbukumbu/betri). Android Studio Profiler na Xcode Instruments ni kwa ajili ya kazi hii. Kutoa data ya kipimo kwa AI huharakisha tafsiri; Lakini bila kipimo, kuiambia AI "programu yangu ni polepole, iharakishe" inamaanisha kutabiri kwa upofu.

Axes nne kuu za utendaji ni:

mhimili

dalili

sababu ya kawaida

Wakati wa kuanza

Maombi hufunguliwa kwa kuchelewa

Kazi nzito kwenye thread kuu

Ufasaha (jank)

Kitabu kinakwama

Inachakata kwa muda mrefu, kuchora upya isiyo ya lazima katika mazungumzo ya UI

kumbukumbu

kuvimba, kuanguka

Uvujaji, picha kubwa, akiba isiyodhibitiwa

betri/joto

kumwaga kwa haraka

Mahali pa kudumu, mtandao, kihisi, kazi ya usuli

Kidokezo: Unapouliza AI kuhusu suala la utendakazi, toa matokeo ya wasifu (ambayo utendakazi huchukua muda gani, grafu ya kumbukumbu). Data ngumu kama "Kitendaji hicho huchukua 30ms kwa kila fremu" huruhusu AI kulenga kizuizi halisi; Kifungu cha maneno kama "polepole" hutoa jibu la jumla na lisilo na maana.

Gharama ya betri ya uwezo wa AI

Vipengele vya AI ambavyo tumeongeza katika moduli hii vina nguvu, lakini sio bure. Kuchimba modeli kwenye kifaa kunasumbua processor na betri; Utambuzi wa picha unaoendeshwa kila mara (k.m. kuchakata kamera kila fremu) utapasha moto simu na kumaliza betri ndani ya dakika chache. Simu za Cloud AI, kwa upande mwingine, hula betri kwa kuweka redio ya mtandao (antena inayotuma na kupokea data) ikiwa imewashwa kila wakati. Suluhisho: endesha muundo wa kifaa wakati tu inahitajika, sampuli ya kamera mara chache kwa sekunde badala ya kila fremu, bechi tuma maombi ya wingu, nyanyua vitu vizito wakati kifaa kinachaji au bila kitu.

Tahadhari: Kipengele cha AI kinachoendeshwa kila mara (utafsiri wa moja kwa moja, utambuzi wa kitu unaoendelea) kinaweza kumaliza betri haraka sana, kuwasha moto kifaa, na huenda kukabanwa na mfumo. Kipengele kinachomfanya mtumiaji ahisi kuwa gharama hii imefutwa. Mimi huuliza AI kila wakati "nitafanyaje kipengele hiki kiwe rafiki kwa betri?" Pia uliza swali.

Hatua za uboreshaji

  1. Pima. Pata kizuizi halisi na Profaili; usidhani.
  2. Chagua tatizo kubwa zaidi. Usifuate uboreshaji wa 1%; Lengo kwa shughuli ya gharama kubwa zaidi.
  3. Uliza AI na data. Omba pendekezo la uboreshaji na pato la wasifu + msimbo unaofaa.
  4. Omba na upime tena. Je, uboreshaji ni kweli? Je, nambari imeshuka?
  5. Udhibiti wa kurudi nyuma. Je, uboreshaji ulivunja chochote? Rudia upimaji wa kuona na kazi.

kesi tatu ndogo

Kesi 1 - Kutafuta mahali pasipofaa. Timu moja ilifikiri kuwa orodha zilikwama na ikarekebisha msimbo wa kusogeza kwa wiki bila mafanikio. Walipochukua profaili na kulisha data kwa AI, ikawa kwamba kizuizi halisi kilikuwa picha zilizopakiwa tena kwenye mtandao na kila safu. Akiba ya kuona ilipoongezwa, ufasaha uliongezeka kutoka ramprogrammen 42 hadi ramprogrammen 60. Somo: kipimo huepuka wiki za juhudi zisizo na maana.

Kesi ya 2 - Kipengele cha monster ya betri. Programu ya kutafsiri iliongeza tafsiri ya maandishi ya moja kwa moja na kamera; Watumiaji walilalamika kuwa "simu iliwasha moto ndani ya dakika 15 na 30% ya betri ilipotea." Wakati AI ilishauriwa, kamera iligunduliwa kuwa inashughulikia fremu 30 kwa sekunde; Wakati hii ilipunguzwa hadi fremu 5 na matokeo kusasishwa kwa fremu chache kando, matumizi ya betri yalipungua hadi theluthi moja, na ubora haukuonekana. Somo: Weka AI kila wakati kwa jicho la betri.

Kesi ya 3 - Kuanza polepole. Programu ilikuwa ikifunguliwa kwa sekunde 4.5; 20% ya watumiaji walikuwa wakiondoka wakati wa kuanza. Wasifu ulionyesha kuwa kazi zote za awali (uchambuzi, upakiaji wa data, utayarishaji wa mfano) ulifanyika kwa mlolongo kwenye thread kuu. Kwa pendekezo la AI, hizi zimeahirishwa na kuwekwa kwenye burner ya nyuma; Muda wa ufunguzi ulipunguzwa hadi sekunde 1.3, na kiwango cha kuacha kilipunguzwa kwa nusu. Somo: fanya kazi muhimu tu mwanzoni.

Mwongozo dhaifu / Mwongozo thabiti

Kidokezo dhaifu: "Programu yangu ni polepole, iharakishe."

Kidokezo chenye nguvu: "Kusogeza kwa orodha kunakwama (jank) kwenye programu yangu ya Android. Data ya Profiler: bindImageView inachukua milisekunde 28 kwa kila fremu, picha hupakiwa kutoka kwa mtandao kila wakati, hakuna akiba. Msimbo unaohusiana: [RecyclerView adapta code]. Pendekeza uboreshaji 3 bora zaidi ili kuleta athari. Taja madhara yanayoweza kupunguzwa ambayo yatapunguza ubora wa kila picha na punguza ubora unaotarajiwa.

Violezo vinavyoweza kunakiliwa

Kiolezo cha uchanganuzi wa Bottleneck: "Tafsiri data ifuatayo ya wasifu na utafute shughuli 3 za gharama kubwa zaidi: [toleo la wasifu]. Pendekeza sababu inayowezekana na uboreshaji madhubuti kwa kila moja. Toa athari ya juu zaidi kwanza."

Kiolezo cha uboreshaji wa betri:"Kipengele hiki humaliza betri haraka: [kipengele, k.m. eneo la kudumu]. Ifanye ifae betri:- Punguza frequency ya sampuli- Kizuizi cha chinichini- Usindikaji wa bechi- Endesha tu inapohitajika Panga suluhu bila kutatiza matumizi ya mtumiaji. [code]"

Kiolezo cha kuongeza kasi ya uanzishaji: "Hakikisha uanzishaji wa programu. Mambo yanayofanywa kwa sasa wakati wa kuanzishwa: [orodha]. Ni yapi yanaweza kuahirishwa, kuwekwa chinichini, au kupakiwa kwa uvivu? Tenganisha muhimu. [code]"

Kiolezo cha gharama ya kipengele cha AI: "Tathmini utendakazi na gharama ya betri ya kipengele cha [modeli ya kifaa/wingu] nilichoongeza. Orodhesha vipimo ninavyopaswa kupima na mikakati ya kupunguza gharama. [code]"

Makosa ya kawaida

  • Kuboresha bila kupima. Shida ya kweli mara nyingi iko katika eneo tofauti kuliko ilivyotabiriwa.
  • Kutafuta faida ndogo. Lenga hatua ghali zaidi badala ya uboreshaji wa 1%.
  • Kupuuza gharama ya betri ya vipengele vya AI. Model/kamera/mtandao unaoendeshwa kila mara hula betri.
  • Kumaliza thread mkuu. Unyanyuaji mzito wa kuanza na kusogeza haufai kuwa kwenye uzi wa UI.
  • Haipimi tena baada ya uboreshaji. Thibitisha kuwa uboreshaji ni halisi na hauvunji chochote.
  • Kupima utendaji katika emulator. Kasi halisi ya kifaa, halijoto na betri ni tofauti kabisa.

Kwa muhtasari

Utendaji na betri ni suala la maisha ya programu ya simu. Kanuni ya dhahabu: pima kwanza, boresha baadaye. Kutoa data ya wasifu kwa AI huharakisha tafsiri; Tamaa isiyo na kipimo ya "kuharakisha" inaongoza kwa kubahatisha kwa upofu. Lenga ununuzi wa gharama kubwa zaidi, usifuate faida ndogo. Uwezo wa AI ulioongezwa katika moduli hii ni nguvu lakini hubeba gharama za betri na processor; Dhibiti gharama hii kwa kupunguza marudio ya sampuli, kuunganisha na kukimbia inapohitajika tu. Pima tena kwenye kifaa halisi baada ya kila uboreshaji.

Jukumu la maombi

Ingiza wasifu katika programu (mradi au mfano wako mwenyewe) au unda sampuli ya matokeo na ufasiriwe na AI kwa "kiolezo cha uchambuzi wa Bottleneck". Tumia uboreshaji wa athari ya juu zaidi na upime tena: je, nambari ilishuka? Pia, tathmini kipengele cha AI ulichokiongeza katika sehemu hii (muundo wa kifaa au simu ya wingu) kulingana na betri ukitumia "Kiolezo cha gharama ya kipengele cha AI" na ubaini angalau mpangilio mmoja unaofaa betri.

orodha ya ukaguzi

  • [ ] Nilipata wasifu kabla ya uboreshaji, sikukisia
  • [ ] Nililenga biashara ya gharama kubwa zaidi, sikutawanyika kwa faida ndogo
  • [ ] Nilitoa data ya wasifu wa AI katika nambari madhubuti
  • [ ] Nilitathmini gharama ya betri/kichakataji cha vipengele vya AI
  • [ ] Niliondoa kinyanyua kizito kutoka kwa uzi kuu
  • [ ] Baada ya uboreshaji, nilipima tena kwenye kifaa halisi na kuangalia urejeshaji