Unité 8 / 11

Optimisation des performances et de la batterie : applications rapides et efficaces grâce à l'intelligence artificielle

Gains :

  • En prenant d'abord un profil et en mesurant le véritable goulot d'étranglement, en effectuant une optimisation basée sur des données plutôt que des conjectures et en faisant interpréter le résultat du profil par l'intelligence artificielle.
  • Possibilité de cibler l'opération la plus coûteuse en termes de temps de démarrage, de fluidité, de mémoire et de batterie et de supprimer le travail fastidieux du thread principal
  • Capacité à gérer le coût de la batterie et du processeur des capacités d'IA telles que le modèle sur l'appareil et les appels dans le cloud via l'échantillonnage et le traitement par lots

Les utilisateurs mobiles sont impatients. Si l'application s'ouvre lentement, se bloque pendant le défilement ou vide rapidement la batterie, l'utilisateur la supprime et lui attribue une note dans le magasin. Les performances et l'efficacité de la batterie sont une question de survie d'une application mobile ; Cela affecte directement à la fois la satisfaction des utilisateurs et le classement des magasins. L’IA est une aide puissante pour détecter les goulots d’étranglement des performances (goulots d’étranglement), interpréter les résultats de mesure et recommander des optimisations. Mais la règle d’or demeure : mesurer d’abord, optimiser ensuite. Dans cette unité, nous apprendrons à résoudre les problèmes de performances et de batterie de manière basée sur les données avec l'IA. Un problème particulièrement important est la gestion de l'impact sur la batterie et les performances des capacités d'IA que nous avons ajoutées dans les unités précédentes (modèle sur appareil, appels cloud).

Optimiser sans mesurer

La plus grosse erreur d'un développeur inexpérimenté est l'optimisation prédictive : perdre du temps à dire « celle-ci doit être lente ». Le véritable goulot d’étranglement se situe presque toujours dans un endroit inattendu. Le profil est donc d'abord pris (profilage - mesure quelle partie de l'application consomme combien de temps/mémoire/batterie). Android Studio Profiler et Xcode Instruments sont destinés à ce travail. La transmission des données de mesure à l’IA accélère l’interprétation ; Mais sans mesure, dire à l’IA « mon application est lente, accélère-la » signifie faire des prédictions aveuglément.

Les quatre grands axes de performance sont :

axe

symptôme

cause typique

Heure de début

L'application s'ouvre tard

Gros travail sur le fil principal

Maîtrise (jank)

Le défilement reste bloqué

Traitement long, redessinage inutile dans le fil de l'interface utilisateur

mémoire

gonflement, effondrement

Fuite, grande image, cache incontrôlé

batterie/chaleur

éjaculation rapide

Localisation continue, réseau, capteur, travail en arrière-plan

Astuce : lorsque vous interrogez l'IA sur un problème de performances, donnez le résultat du profil (quelle fonction prend combien de temps, graphique de la mémoire). Des données concrètes telles que « Cette fonction prend 30 ms par image » permettent à l'IA de se concentrer sur le véritable goulot d'étranglement ; Une expression subjective comme « lent » produit une réponse générique et inutile.

Coût de la batterie des capacités de l'IA

Les fonctionnalités d'IA que nous avons ajoutées dans ce module sont puissantes, mais elles ne sont pas gratuites. L'extraction d'un modèle sur l'appareil met à rude épreuve le processeur et la batterie ; Une reconnaissance d'image en cours d'exécution en permanence (par exemple, la caméra traitant chaque image) chauffera le téléphone et videra la batterie en quelques minutes. Les appels Cloud AI, en revanche, consomment de la batterie en gardant la radio réseau (l'antenne qui envoie et reçoit des données) allumée en permanence. Solutions : exécutez le modèle sur l'appareil uniquement lorsque cela est nécessaire, échantillonnez la caméra plusieurs fois par seconde au lieu de chaque image, envoyez des requêtes cloud par lots, faites le gros du travail pendant que l'appareil est en charge ou inactif.

Attention : une fonctionnalité d'IA fonctionnant en permanence (traduction en direct, reconnaissance continue d'objets) peut vider la batterie très rapidement, chauffer l'appareil et être limitée par le système. Une fonctionnalité qui donne à l'utilisateur l'impression que ce coût est supprimé. Je demande toujours à l'IA "comment puis-je rendre cette fonctionnalité compatible avec la batterie ?" Posez également la question.

Étapes d'optimisation

  1. Mesurer. Trouvez le véritable goulot d'étranglement avec Profiler ; ne devine pas.
  2. Choisissez le plus gros problème. Ne recherchez pas une amélioration de 1 % ; Visez la transaction la plus chère.
  3. Demandez à l'IA avec des données. Demander une suggestion d'optimisation avec sortie de profil + code pertinent.
  4. Appliquer et mesurer à nouveau. L’amélioration est-elle réelle ? Le nombre a-t-il baissé ?
  5. Contrôle de régression. L'optimisation a-t-elle cassé quelque chose ? Répétez les tests visuels et fonctionnels.

trois mini-cases

Cas 1 — Recherche au mauvais endroit. Une équipe pensait que les listes étaient bloquées et a retravaillé le code de défilement pendant des semaines en vain. Lorsqu’ils ont pris le profileur et transmis les données à l’IA, il s’est avéré que le véritable goulot d’étranglement était le rechargement des images sur le réseau à chaque ligne. Lorsque le cache visuel a été ajouté, la fluidité est passée de 42 FPS à 60 FPS. Leçon : la mesure évite des semaines d’efforts inutiles.

Cas 2 — Fonctionnalité de monstre de batterie. Une application de traduction a ajouté une traduction de texte en direct avec une caméra ; Les utilisateurs se sont plaints que « le téléphone a chauffé en 15 minutes et que 30 % de la batterie était épuisée ». Lorsque l'IA a été consultée, il s'est avéré que la caméra traitait 30 images par seconde ; Lorsque cela a été réduit à 5 images et que le résultat a été mis à jour à quelques images d'intervalle, la consommation de la batterie a diminué d'un tiers et la qualité n'était pas perceptible. Leçon : réglez toujours l’IA avec l’œil de la batterie.

Cas 3 — Apparition lente. Une application s'ouvrait en 4,5 secondes ; 20 % des utilisateurs quittaient le système au démarrage. Le profil a montré que tous les travaux initiaux (analyses, chargement des données, préparation du modèle) étaient effectués séquentiellement sur le thread principal. Avec la proposition d’IA, celles-ci ont été reportées et mises en veilleuse ; Le temps d'ouverture a été réduit à 1,3 seconde et le taux d'abandon a été divisé par deux. Leçon : ne faites que le travail essentiel au début.

Invite faible/Invite forte

Invite faible : "Mon application est lente, accélérez-la."

Invite puissante : « Le défilement de la liste reste bloqué (jank) dans mon application Android. Données du profileur : bindImageView prend 28 ms sur chaque image, les images sont chargées depuis le réseau à chaque fois, il n'y a pas de cache. Code associé : [code de l'adaptateur RecyclerView]. Recommandez les 3 optimisations les plus efficaces par ordre d'impact. Indiquez le gain attendu et les effets secondaires possibles pour chacune. Donnez la priorité aux solutions qui ne réduisent pas la qualité de l'image.

Modèles copiables

Modèle d'analyse des goulots d'étranglement : "Interprétez les données de profil suivantes et trouvez les 3 opérations les plus coûteuses : [sortie du profileur]. Suggérez la cause possible et l'optimisation concrète pour chacune. Donnez d'abord l'impact le plus élevé."

Modèle d'optimisation de la batterie : "Cette fonctionnalité décharge rapidement la batterie : [fonctionnalité, par exemple emplacement permanent]. Rendez-la respectueuse de la batterie : - Réduisez la fréquence d'échantillonnage - Restriction en arrière-plan - Traitement par lots - Exécutez uniquement lorsque cela est nécessaire Triez les solutions sans perturber l'expérience utilisateur. [code] "

Modèle d'accélération du démarrage : "Accélérer le démarrage de l'application. Choses en cours au démarrage : [liste]. Lesquelles peuvent être reportées, mises en arrière-plan ou chargées paresseusement ? Séparez les tâches essentielles. [code]"

Modèle de coût des fonctionnalités d'IA : "Évaluez les performances et le coût de la batterie de la fonctionnalité [modèle sur appareil/appel cloud] que j'ai ajoutée. Répertoriez les mesures que je devrais mesurer et les stratégies pour réduire le coût. [code]"

Erreurs courantes

  • Optimiser sans mesurer. Le véritable goulot d’étranglement se situe souvent à un endroit différent de celui prévu.
  • À la poursuite de petits gains. Visez l’action la plus coûteuse plutôt que l’amélioration de 1 %.
  • Ignorer le coût de la batterie des fonctionnalités de l'IA. Le modèle/appareil photo/réseau en fonctionnement constant consomme la batterie.
  • Fatiguer le fil principal. Le gros du travail de démarrage et de défilement ne devrait pas être sur le fil de discussion de l'interface utilisateur.
  • Pas de nouvelle mesure après optimisation. Vérifiez que l'amélioration est réelle et ne casse rien.
  • Mesurer les performances dans l'émulateur. La vitesse, la température et la batterie réelles de l'appareil sont complètement différentes.

En résumé

Les performances et la batterie sont une question de survie des applications mobiles. La règle d’or : mesurer d’abord, optimiser ensuite. Donner des données de profil à l’IA accélère l’interprétation ; Le désir incommensurable d'« accélérer » conduit à des suppositions aveugles. Visez la transaction la plus chère, ne courez pas après les petits profits. Les capacités d'IA ajoutées dans ce module sont puissantes mais entraînent des coûts de batterie et de processeur ; Gérez ce coût en réduisant la fréquence d'échantillonnage, le traitement par lots et en exécutant uniquement lorsque cela est nécessaire. Mesurez à nouveau sur l'appareil réel après chaque optimisation.

Tâche de candidature

Importez un profil dans une application (votre propre projet ou exemple) ou créez un exemple de sortie de profil et faites-le interpréter par l'IA avec le "Modèle d'analyse des goulots d'étranglement". Appliquez l’optimisation à impact le plus élevé et mesurez à nouveau : le chiffre a-t-il réellement diminué ? Évaluez également une fonctionnalité IA que vous avez ajoutée dans ce module (modèle sur appareil ou appel cloud) en termes de batterie avec le « Modèle de coût des fonctionnalités IA » et déterminez au moins un paramètre respectueux de la batterie.

liste de contrôle

  • [ ] J'ai obtenu un profil avant l'optimisation, je n'ai pas deviné
  • [ ] J'ai visé le commerce le plus cher, je ne me suis pas éparpillé sur de petits profits
  • [ ] J'ai donné les données du profil IA en chiffres concrets
  • [ ] J'ai évalué le coût batterie/processeur des fonctionnalités d'IA
  • [ ] J'ai supprimé le gros du travail du fil principal
  • [ ] Après optimisation, j'ai mesuré à nouveau sur l'appareil réel et vérifié la régression