Κέρδη:
- Παίρνοντας πρώτα ένα προφίλ και μετρώντας το πραγματικό σημείο συμφόρησης, κάνοντας βελτιστοποίηση με βάση δεδομένα και όχι εικασίες και ερμηνεύοντας την έξοδο του προφίλ από την τεχνητή νοημοσύνη
- Δυνατότητα στόχευσης της πιο ακριβής λειτουργίας όσον αφορά τον χρόνο εκκίνησης, την ευχέρεια, τη μνήμη και την μπαταρία και να αφαιρέσετε τη βαριά εργασία από το κύριο νήμα
- Δυνατότητα διαχείρισης του κόστους μπαταρίας και επεξεργαστή των δυνατοτήτων τεχνητής νοημοσύνης, όπως το μοντέλο στη συσκευή και οι κλήσεις στο cloud μέσω δειγματοληψίας και επεξεργασίας παρτίδων
Οι χρήστες κινητών είναι ανυπόμονοι. Εάν η εφαρμογή ανοίγει αργά, κολλάει κατά την κύλιση ή αδειάζει γρήγορα την μπαταρία, ο χρήστης τη διαγράφει και της βαθμολογεί με αστέρια στο κατάστημα. Η απόδοση και η αποδοτικότητα της μπαταρίας είναι θέμα επιβίωσης μιας εφαρμογής για κινητά. Επηρεάζει άμεσα τόσο την ικανοποίηση των χρηστών όσο και την κατάταξη του καταστήματος. Η τεχνητή νοημοσύνη είναι ένα ισχυρό βοήθημα για την ανίχνευση σημείων συμφόρησης απόδοσης (bottlenecks), την ερμηνεία των αποτελεσμάτων των μετρήσεων και τη σύσταση βελτιστοποιήσεων. Όμως ο χρυσός κανόνας παραμένει: μετρήστε πρώτα, βελτιστοποιήστε αργότερα. Σε αυτήν την ενότητα, θα μάθουμε να επιλύουμε προβλήματα απόδοσης και μπαταρίας με τρόπο που βασίζεται σε δεδομένα με AI. Ένα ιδιαίτερα σημαντικό ζήτημα είναι η διαχείριση του αντίκτυπου στην μπαταρία και στην απόδοση των δυνατοτήτων AI που προσθέσαμε σε προηγούμενες μονάδες (μοντέλο στη συσκευή, κλήσεις cloud).
Βελτιστοποίηση χωρίς μέτρηση
Το μεγαλύτερο λάθος ενός άπειρου προγραμματιστή είναι η προγνωστική βελτιστοποίηση: χάνουμε χρόνο λέγοντας "αυτός πρέπει να είναι αργός". Το πραγματικό σημείο συμφόρησης βρίσκεται σχεδόν πάντα σε ένα απροσδόκητο μέρος. Έτσι πρώτα λαμβάνεται το προφίλ (προφίλ — μέτρηση ποιο μέρος της εφαρμογής καταναλώνει πόσο χρόνο/μνήμη/μπαταρία). Το Android Studio Profiler και τα όργανα Xcode είναι για αυτήν τη δουλειά. Η παροχή δεδομένων μέτρησης στο AI επιταχύνει την ερμηνεία. Αλλά χωρίς μέτρηση, το να πεις στην τεχνητή νοημοσύνη «η εφαρμογή μου είναι αργή, επιτάχυνε την» σημαίνει να κάνω τυφλά προβλέψεις.
Οι τέσσερις βασικοί άξονες απόδοσης είναι:
άξονα
σύμπτωμα
τυπική αιτία
Ώρα έναρξης
Η εφαρμογή ανοίγει αργά
Βαριά δουλειά στο κύριο νήμα
Ευφράδεια (jank)
Η κύλιση κολλάει
Μακρά επεξεργασία, περιττή επανασχεδίαση στο νήμα διεπαφής χρήστη
μνήμη
πρήξιμο, κατάρρευση
Διαρροή, μεγάλη εικόνα, μη ελεγχόμενη κρυφή μνήμη
μπαταρία/θερμότητα
γρήγορη εκσπερμάτιση
Συνεχής θέση, δίκτυο, αισθητήρας, εργασία στο παρασκήνιο
Συμβουλή: Όταν ρωτάτε την τεχνητή νοημοσύνη για ένα ζήτημα απόδοσης, δώστε την έξοδο του προφίλ (ποια λειτουργία διαρκεί πόσο χρόνο, γράφημα μνήμης). Τα σκληρά δεδομένα όπως "Αυτή η λειτουργία διαρκεί 30 ms ανά καρέ" επιτρέπει στο AI να εστιάσει στο πραγματικό σημείο συμφόρησης. Μια υποκειμενική φράση όπως "αργή" παράγει μια γενική και άχρηστη απάντηση.
Κόστος μπαταρίας ικανοτήτων AI
Οι δυνατότητες AI που προσθέσαμε σε αυτήν την ενότητα είναι ισχυρές, αλλά δεν είναι δωρεάν. Η εξαγωγή ενός μοντέλου στη συσκευή καταπονεί τον επεξεργαστή και την μπαταρία. Η συνεχής λειτουργία αναγνώρισης εικόνας (π.χ. κάμερα που επεξεργάζεται κάθε καρέ) θα ζεστάνει το τηλέφωνο και θα εξαντλήσει την μπαταρία μέσα σε λίγα λεπτά. Οι κλήσεις Cloud AI, από την άλλη πλευρά, καταναλώνουν την μπαταρία κρατώντας το ραδιόφωνο δικτύου (την κεραία που στέλνει και λαμβάνει δεδομένα) συνεχώς ανοιχτό. Λύσεις: εκτελέστε το μοντέλο της συσκευής μόνο όταν χρειάζεται, δοκιμάστε την κάμερα μερικές φορές το δευτερόλεπτο αντί για κάθε καρέ, στείλτε ομαδικά αιτήματα στο cloud, κάντε τη βαριά ανύψωση ενώ η συσκευή φορτίζεται ή είναι σε αδράνεια.
Προσοχή: Μια λειτουργία τεχνητής νοημοσύνης που λειτουργεί συνεχώς (ζωντανή μετάφραση, συνεχής αναγνώριση αντικειμένων) μπορεί να εξαντλήσει την μπαταρία πολύ γρήγορα, να θερμάνει τη συσκευή και μπορεί να πνιγεί από το σύστημα. Μια δυνατότητα που κάνει τον χρήστη να αισθάνεται ότι αυτό το κόστος έχει διαγραφεί. Πάντα ρωτάω την τεχνητή νοημοσύνη "πώς μπορώ να κάνω αυτό το χαρακτηριστικό φιλικό προς την μπαταρία;" Κάντε επίσης την ερώτηση.
Βήματα βελτιστοποίησης
- Μέτρο. Βρείτε το πραγματικό σημείο συμφόρησης με το Profiler. μην μαντέψετε.
- Επιλέξτε το μεγαλύτερο πρόβλημα. Μην κυνηγάτε τη βελτίωση του 1%. Στοχεύστε στην πιο ακριβή συναλλαγή.
- Ρωτήστε AI με δεδομένα. Ζητήστε πρόταση βελτιστοποίησης με έξοδο προφίλ + σχετικό κωδικό.
- Εφαρμόστε και μετρήστε ξανά. Είναι πραγματική η βελτίωση; Έχει πέσει ο αριθμός;
- Έλεγχος παλινδρόμησης. Έσπασε κάτι η βελτιστοποίηση; Επαναλάβετε την οπτική και λειτουργική δοκιμή.
τρεις μίνι θήκες
Περίπτωση 1 — Αναζήτηση σε λάθος μέρος. Μια ομάδα θεώρησε ότι οι λίστες είχαν κολλήσει και επεξεργάστηκε ξανά τον κώδικα κύλισης για εβδομάδες χωρίς αποτέλεσμα. Όταν πήραν τον προφίλ και τροφοδότησαν τα δεδομένα στο AI, αποδείχθηκε ότι το πραγματικό εμπόδιο ήταν οι εικόνες που φορτώνονταν ξανά μέσω του δικτύου με κάθε σειρά. Όταν προστέθηκε η οπτική κρυφή μνήμη, η ευχέρεια αυξήθηκε από 42 FPS σε 60 FPS. Μάθημα: η μέτρηση αποφεύγει εβδομάδες μάταιης προσπάθειας.
Περίπτωση 2 — Χαρακτηριστικό τέρας μπαταρίας. Μια εφαρμογή μετάφρασης πρόσθεσε ζωντανή μετάφραση κειμένου με κάμερα. Οι χρήστες παραπονέθηκαν ότι «το τηλέφωνο θερμάνθηκε σε 15 λεπτά και το 30% της μπαταρίας είχε φύγει». Όταν ζητήθηκε η γνώμη του AI, η κάμερα διαπιστώθηκε ότι επεξεργάζεται 30 καρέ ανά δευτερόλεπτο. Όταν αυτό μειώθηκε στα 5 καρέ και το αποτέλεσμα ενημερώθηκε με λίγα καρέ διαφορά, η κατανάλωση μπαταρίας μειώθηκε στο ένα τρίτο και η ποιότητα δεν ήταν αισθητή. Μάθημα: Να ρυθμίζετε πάντα το AI με το μάτι της μπαταρίας.
Περίπτωση 3 — Αργή έναρξη. Μια εφαρμογή άνοιγε σε 4,5 δευτερόλεπτα. Το 20% των χρηστών έβγαιναν κατά την εκκίνηση. Το προφίλ έδειξε ότι όλη η αρχική εργασία (αναλύσεις, φόρτωση δεδομένων, προετοιμασία μοντέλου) έγινε διαδοχικά στο κύριο νήμα. Με την πρόταση τεχνητής νοημοσύνης, αυτά αναβλήθηκαν και μπήκαν στο πίσω μέρος. Ο χρόνος ανοίγματος μειώθηκε στα 1,3 δευτερόλεπτα και το ποσοστό εγκατάλειψης μειώθηκε στο μισό. Μάθημα: κάντε μόνο βασικές εργασίες στην αρχή.
Αδύναμη προτροπή / Ισχυρή προτροπή
Αδύναμο μήνυμα: "Η εφαρμογή μου είναι αργή, επιταχύνετε".
Ισχυρό μήνυμα: "Η κύλιση λίστας κολλάει (jank) στην εφαρμογή μου Android. Δεδομένα προφίλ: το bindImageView διαρκεί 28 ms σε κάθε καρέ, οι εικόνες φορτώνονται από το δίκτυο κάθε φορά, δεν υπάρχει κρυφή μνήμη. Σχετικός κώδικας: [RecyclerView code adapter]. Προτείνετε τις 3 πιο αποτελεσματικές βελτιστοποιήσεις για κάθε πιθανή βελτιστοποίηση με τη σειρά του αναμενόμενου αντίκτυπου. ποιότητα."
Αντιγράψιμα πρότυπα
Πρότυπο ανάλυσης Bottleneck: "Ερμηνεύστε τα ακόλουθα δεδομένα προφίλ και βρείτε τις 3 πιο ακριβές λειτουργίες: [έξοδος προφίλ]. Προτείνετε πιθανή αιτία και συγκεκριμένη βελτιστοποίηση για καθεμία. Δώστε πρώτα τον υψηλότερο αντίκτυπο."
Πρότυπο βελτιστοποίησης μπαταρίας: "Αυτή η δυνατότητα εξαντλεί γρήγορα την μπαταρία: [λειτουργία, π.χ. μόνιμη τοποθεσία]. Κάντε τη φιλική προς την μπαταρία: - Μειώστε τη συχνότητα δειγματοληψίας - Περιορισμός στο παρασκήνιο - Επεξεργασία παρτίδας - Εκτελέστε μόνο όταν είναι απαραίτητο Ταξινόμηση λύσεων χωρίς διακοπή της εμπειρίας χρήστη. [κωδικός]"
Πρότυπο επιτάχυνσης εκκίνησης: "Επιταχύνετε την εκκίνηση εφαρμογών. Πράγματα που γίνονται αυτήν τη στιγμή κατά την εκκίνηση: [λίστα]. Ποια μπορούν να αναβληθούν, να τοποθετηθούν στο παρασκήνιο ή να φορτωθούν με καθυστέρηση; Διαχωρίστε τις βασικές. [κωδικός]"
Πρότυπο κόστους λειτουργίας τεχνητής νοημοσύνης: "Αξιολογήστε την απόδοση και το κόστος μπαταρίας της λειτουργίας [μοντέλο στη συσκευή / κλήση cloud] που πρόσθεσα. Καταγράψτε τις μετρήσεις που πρέπει να μετρήσω και τις στρατηγικές για τη μείωση του κόστους. [κωδικός]"
Συνήθη λάθη
- Βελτιστοποίηση χωρίς μέτρηση. Το πραγματικό σημείο συμφόρησης βρίσκεται συχνά σε διαφορετική τοποθεσία από την προβλεπόμενη.
- Κυνηγώντας μικρά κέρδη. Επιδιώξτε την πιο ακριβή ενέργεια αντί για τη βελτίωση κατά 1%.
- Αγνοώντας το κόστος της μπαταρίας των λειτουργιών AI. Το μοντέλο/κάμερα/δίκτυο που λειτουργεί συνεχώς καταναλώνει την μπαταρία.
- Κουράζω το κύριο νήμα. Η βαριά ανύψωση της εκκίνησης και της κύλισης δεν πρέπει να είναι στο νήμα της διεπαφής χρήστη.
- Δεν γίνεται εκ νέου μέτρηση μετά τη βελτιστοποίηση. Βεβαιωθείτε ότι η βελτίωση είναι πραγματική και δεν καταστρέφει τίποτα.
- Μέτρηση απόδοσης στον εξομοιωτή. Η πραγματική ταχύτητα της συσκευής, η θερμοκρασία και η μπαταρία είναι εντελώς διαφορετικές.
Συνοπτικά
Η απόδοση και η μπαταρία είναι θέμα επιβίωσης εφαρμογών για κινητά. Ο χρυσός κανόνας: μετρήστε πρώτα, βελτιστοποιήστε αργότερα. Η παροχή δεδομένων προφίλ στο AI επιταχύνει την ερμηνεία. Η αμέτρητη επιθυμία για «επιτάχυνση» οδηγεί σε τυφλές εικασίες. Στοχεύστε στην πιο ακριβή συναλλαγή, μην κυνηγάτε μικρά κέρδη. Οι δυνατότητες AI που προστίθενται σε αυτήν την ενότητα είναι ισχυρές, αλλά επιβαρύνουν το κόστος της μπαταρίας και του επεξεργαστή. Διαχειριστείτε αυτό το κόστος μειώνοντας τη συχνότητα δειγματοληψίας, τη μαζική εκτέλεση και την εκτέλεση μόνο όταν χρειάζεται. Μετρήστε ξανά στην πραγματική συσκευή μετά από κάθε βελτιστοποίηση.
Εργασία εφαρμογής
Εισαγάγετε ένα προφίλ σε μια εφαρμογή (το δικό σας έργο ή παράδειγμα) ή δημιουργήστε ένα δείγμα εξόδου προφίλ και ερμηνεύστε το από το AI με το "Πρότυπο ανάλυσης Bottleneck". Εφαρμόστε τη βελτιστοποίηση του υψηλότερου αντίκτυπου και μετρήστε ξανά: έπεσε πράγματι ο αριθμός; Επίσης, αξιολογήστε μια λειτουργία τεχνητής νοημοσύνης που προσθέσατε σε αυτήν τη λειτουργική μονάδα (μοντέλο στη συσκευή ή κλήση cloud) όσον αφορά την μπαταρία με το "πρότυπο κόστους λειτουργιών AI" και καθορίστε τουλάχιστον μία ρύθμιση φιλική προς την μπαταρία.
λίστα ελέγχου
- [ ] Πήρα προφίλ πριν από τη βελτιστοποίηση, δεν το μάντεψα
- [ ] Στόχευα στο πιο ακριβό εμπόριο, δεν σκόρπισα σε μικρά κέρδη
- [ ] Έδωσα τα δεδομένα προφίλ AI σε συγκεκριμένους αριθμούς
- [ ] Αξιολόγησα το κόστος μπαταρίας/επεξεργαστή των χαρακτηριστικών τεχνητής νοημοσύνης
- [ ] Αφαίρεσα τη βαριά ανύψωση από το κύριο νήμα
- [ ] Μετά τη βελτιστοποίηση, μέτρησα ξανά στην πραγματική συσκευή και έλεγξα την παλινδρόμηση