"Scalene" alimenté avec ChatGPT offre des suggestions d'efficacité aux programmeurs Python : un profileur Python CPU+GPU+mémoire avec des propositions d'optimisation alimentées par l'IA
Voici la présentation d'un outil open-source qui "utilise l'IA pour offrir des suggestions d'efficacité aux programmeurs Python". Connu sous le nom de "Scalene", le profileur (une sorte de débogueur pour les problèmes de performance) a été téléchargé plus de 900 000 fois sur GitHub.
"C'est génial en général, et génial pour un projet universitaire", a déclaré Emery Berger, professeur à UMass, qui a travaillé avec les doctorants Sam Stern et Juan Altmayer Pizzorno sur l'outil open-source...
Scalene mesure le temps et la mémoire consacrés à chaque ligne de code, en moyenne et en pointe, [ainsi que] le temps passé dans des bibliothèques efficaces et le temps passé en Python... En sélectionnant une icône en forme d'éclair, l'utilisateur peut "exploiter le moteur qui alimente ChatGPT pour obtenir une suggestion d'optimisation", a déclaré M. Berger. Dans une démonstration qu'il a montrée, un résultat a recommandé une action moins gourmande en mémoire pour réduire un très grand tableau créé par le code...
"Si votre code Python fonctionne déjà assez rapidement, vous n'avez pas besoin d'un profileur. Mais s'il est lent, je pense qu'il s'agit d'un profileur très pratique", a déclaré M. Berger.
À propos de Scalene
Scalene est un profileur CPU, GPU et mémoire haute performance pour Python qui fait un certain nombre de choses que les autres profileurs Python ne font pas et ne peuvent pas faire. Il fonctionne des ordres de grandeur plus rapidement que beaucoup d'autres profileurs tout en fournissant des informations beaucoup plus détaillées. C'est également le premier profileur à intégrer des propositions d'optimisation alimentées par l'IA.
Suggestions d'optimisation alimentées par l'IA
Remarque
Pour activer les suggestions d'optimisation alimentées par l'IA, vous devez saisir une clé OpenAI dans la case située sous "Options avancées". Votre compte doit avoir un solde positif pour que cela fonctionne.
Une fois que vous avez saisi votre clé OpenAI (voir ci-dessus), cliquez sur l'éclair (⚡) à côté d'une ligne ou sur l'explosion (💥
pour une région entière du code afin de générer une proposition d'optimisation. Cliquez sur une proposition d'optimisation pour la copier dans le presse-papiers.
Vous pouvez cliquer autant de fois que vous le souhaitez sur l'éclair ou l'explosion, et différentes optimisations seront proposées. Les résultats peuvent varier, mais dans certains cas, les suggestions sont assez impressionnantes (par exemple, des améliorations de l'ordre de la magnitude).
Démarrage rapide
Installation de Scalene :
python3 -m pip install -U scalene
ou
conda install -c conda-forge scalene
Utilisation de Scalene :
Après avoir installé Scalene, vous pouvez utiliser Scalene en ligne de commande ou en tant qu'extension de Visual Studio Code.
- Utilisation de l'extension Scalene VS Code :
Tout d'abord, installez l'extension Scalene à partir du VS Code Marketplace ou en la recherchant dans VS Code en tapant Command-Shift-X (Mac) ou Ctrl-Shift-X (Windows). Une fois l'extension installée, cliquez sur Command-Shift-P ou Ctrl-Shift-P pour ouvrir la palette de commandes. Sélectionnez ensuite "Scalene : AI-powered profiling..." (vous pouvez taper Scalene et il apparaîtra s'il est installé). Exécutez cette commande et, en supposant que votre code s'exécute pendant au moins une seconde, un profil Scalene apparaîtra dans une vue Web.
- Options de ligne de commande couramment utilisées :
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| scalene your_prog.py # full profile (outputs to web interface)
python3 -m scalene your_prog.py # equivalent alternative
scalene --cli your_prog.py # use the command-line only (no web interface)
scalene --cpu your_prog.py # only profile CPU
scalene --cpu --gpu your_prog.py # only profile CPU and GPU
scalene --cpu --gpu --memory your_prog.py # profile everything (same as no options)
scalene --reduced-profile your_prog.py # only profile lines with significant usage
scalene --profile-interval 5.0 your_prog.py # output a new profile every five seconds
scalene (Scalene options) --- your_prog.py (...) # use --- to tell Scalene to ignore options after that point
scalene --help # lists all options |
- Utilisation programmatique de Scalene dans votre code :
Invoquer l'utilisation de scalene comme ci-dessus et ensuite :
1 2 3 4 5 6 7
| from scalene import scalene_profiler
# Turn profiling on
scalene_profiler.start()
# Turn profiling off
scalene_profiler.stop() |
- Utilisation de Scalene pour profiler uniquement des fonctions spécifiques via @profile :
Il suffit de faire précéder les fonctions que vous souhaitez profiler du décorateur @profile et de les exécuter avec Scalene :
1 2 3 4 5 6
| # do not import profile!
@profile
def slow_function():
import time
time.sleep(3) |
Interface graphique basée sur le web
Scalene dispose à la fois d'un CLI et d'une interface graphique basée sur le web.
Par défaut, une fois que Scalene a profilé votre programme, il ouvre un onglet dans un navigateur web avec une interface utilisateur interactive (tout le traitement est fait localement). Survolez les barres pour voir la répartition de la consommation de CPU et de mémoire, et cliquez sur les en-têtes de colonne soulignés pour trier les colonnes. Le fichier profile.html généré est autonome et peut être sauvegardé pour une utilisation ultérieure.
Vue d'ensemble de Scalene
Présentation de Scalene (PyCon US 2021)
Cette conférence présentée à PyCon 2021 présente les avantages de Scalene et comment l'utiliser pour déboguer les performances d'une application (et fournit quelques détails techniques sur son fonctionnement interne). Il est recommandé vivement de regarder cette vidéo !
Rapide et précis
- Scalene est rapide. Il utilise l'échantillonnage au lieu d'instrumenter ou de s'appuyer sur les fonctions de traçage de Python. Son surcoût ne dépasse généralement pas 10 à 20 % (et souvent moins).
- Scalene est précis. La précision des profileurs de CPU a été testée et on a constaté que Scalene fait partie des profileurs les plus précis, mesurant correctement le temps passé.
- Scalene effectue le profilage au niveau de la ligne et par fonction, en pointant les fonctions et les lignes de code spécifiques responsables du temps d'exécution dans votre programme.
Profilage de la CPU
- Scalene sépare le temps passé en Python du temps passé en code natif (y compris les bibliothèques). La plupart des programmeurs Python ne vont pas optimiser les performances du code natif (qui se trouve généralement dans l'implémentation de Python ou dans des bibliothèques externes), ce qui aide les développeurs à concentrer leurs efforts d'optimisation sur le code qu'ils peuvent réellement améliorer.
- Scalene met en évidence les points chauds (code représentant un pourcentage significatif du temps CPU ou de l'allocation mémoire) en rouge, ce qui les rend encore plus faciles à repérer.
- Scalene sépare également le temps système, ce qui facilite la détection des goulets d'étranglement des E/S.
Profilage du GPU
- Scalene indique le temps passé sur le GPU (actuellement limité aux systèmes basés sur NVIDIA).
Profilage de la mémoire
- Scalene établit le profil de l'utilisation de la mémoire. En plus du suivi de l'utilisation de la CPU, Scalene indique également les lignes de code spécifiques responsables de la croissance de la mémoire. Pour ce faire, il utilise un allocateur de mémoire spécialisé.
- Scalene distingue le pourcentage de mémoire consommé par le code Python de celui consommé par le code natif.
- Scalene produit des profils de mémoire par ligne.
- Scalene identifie les lignes susceptibles de présenter des fuites de mémoire.
- Scalene établit le profil du volume de copie, ce qui permet de repérer facilement les copies involontaires, en particulier celles qui sont dues au franchissement des frontières entre Python et les bibliothèques (par exemple, la conversion accidentelle de tableaux numpy en tableaux Python, et vice-versa).
Autres caractéristiques
- Scalene peut produire des profils réduits (via --reduced-profile) qui ne rapportent que les lignes qui consomment plus de 1% de la CPU ou qui effectuent au moins 100 allocations.
- Scalene supporte les décorateurs @profile pour ne profiler que des fonctions spécifiques.
- Lorsque Scalene profile un programme lancé en arrière-plan (via &), vous pouvez suspendre et reprendre le profilage.
Comparaison avec d'autres profileurs
Performances et fonctionnalités
Vous trouverez ci-dessous un tableau comparant les performances et les fonctionnalités de divers profileurs à celles de Scalene.
- Ralentissement : le ralentissement lors de l'exécution d'un benchmark de la suite Pyperformance. Le vert signifie moins de 2 fois l'overhead. L'overhead de Scalene n'est qu'un ralentissement de 35%.
Scalene possède toutes les fonctionnalités suivantes, dont beaucoup ne sont prises en charge que par Scalene :
- Lignes ou fonctions : le profileur rapporte-t-il des informations uniquement pour des fonctions entières ou pour chaque ligne -- Scalene fait les deux.
- Code non modifié : fonctionne sur du code non modifié.
- Threads : supporte les threads Python.
- Multiprocessing : supporte l'utilisation de la bibliothèque multiprocessing -- Scalene seulement
- Temps Python vs. C : décompose le temps passé en Python par rapport au code natif (par exemple, les bibliothèques) -- Scalene seulement
- Temps système : décompose le temps système (par exemple, en dormant ou en effectuant des E/S) -- Scalene uniquement
- Mémoire des profils : rapporte la consommation de mémoire par ligne / fonction
- GPU : indique le temps passé sur un GPU NVIDIA (si présent) -- Scalene uniquement
- Tendances de la mémoire : indique l'utilisation de la mémoire au fil du temps par ligne / fonction -- Scalene uniquement
- Volume de copie : indique les mégaoctets copiés par seconde -- Scalene uniquement
- Détecte les fuites : identifie automatiquement les lignes responsables de fuites de mémoire probables -- Scalene uniquement
Source : Emery Berger, Sam Stern, et Juan Altmayer Pizzorno (Contributeur de Scalene)
Et vous ?
Quel est votre avis sur le sujet ?
Voir aussi :
Python 3.13 ajoute un compilateur JIT qui pourrait améliorer les performances du langage d'environ 9 %, mais l'annonce suscite des réactions mitigées
Python est facile. Go est simple. Simple != FacilePyt. hon et Go ont des qualités distinctes qui peuvent se compléter, par Preslav Rachev, ingénieur en informatique
Popularité des langages sur GitHub : Python, Go et JavaScript en progression, tandis que Java et C++ sont en légère baisse mais restent dans le Top 5 d'après GitHut 2.0
Partager