IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)

Vous êtes nouveau sur Developpez.com ? Créez votre compte ou connectez-vous afin de pouvoir participer !

Vous devez avoir un compte Developpez.com et être connecté pour pouvoir participer aux discussions.

Vous n'avez pas encore de compte Developpez.com ? Créez-en un en quelques instants, c'est entièrement gratuit !

Si vous disposez déjà d'un compte et qu'il est bien activé, connectez-vous à l'aide du formulaire ci-dessous.

Identifiez-vous
Identifiant
Mot de passe
Mot de passe oublié ?
Créer un compte

L'inscription est gratuite et ne vous prendra que quelques instants !

Je m'inscris !

"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

Le , par Jade Emy

10PARTAGES

4  0 
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 (&#9889 à côté d'une ligne ou sur l'explosion (&#128165 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 :

Code : Sélectionner tout
python3 -m pip install -U scalene
ou

Code : Sélectionner tout
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 :

    Code : Sélectionner tout
    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 :

    Code : Sélectionner tout
    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 :

    Code : Sélectionner tout
    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 du 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 du 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% du 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

Une erreur dans cette actualité ? Signalez-nous-la !

Avatar de Sve@r
Expert éminent sénior https://www.developpez.com
Le 29/01/2024 à 12:56
Bonjour
Citation Envoyé par Jade Emy Voir le message
Et vous ?

Quel est votre avis sur le sujet ?
Pourquoi pas. C'est un outil de plus qui peut sûrement apporter beaucoup.
Moi je n'ai jamais d'avis négatif sur les outils tant qu'on n'oublie pas que les outils ne sont qu'un support, une aide ; et que ce ne sont pas un cerveau de remplacement.
1  0