HyperAI
Back to Headlines

Amélioration des Performances avec les DataFrames Immutables dans Python 3.13t Libéré des Threads

il y a 2 jours

Amélioration des Performances avec des DataFrame Immutables dans Python Free-Threaded Contexte de l'Innovation Les opérations de traitement de each row (chaque ligne) d'un DataFrame sont courantes en programmation scientifique et data science. Ces opérations sont naturellement parallélisables, car chaque ligne peut être traitée indépendamment. Avec une CPU multi-cœur, plusieurs lignes peuvent être traitées simultanément, ce qui a jusqu'à récemment été impossible en Python en raison du Global Interpreter Lock (GIL). Le GIL, un verrou global, empêche l'exécution simultanée de plusieurs threads CPU-bound. Cependant, la version “3.13 free-threading build” expérimentale de Python offre une solution en supprimant le GIL, permettant ainsi une véritable concurrence multi-thread pour les opérations CPU-bound. Performances Exceptionnelles Cette nouvelle fonctionnalité amène des gains de performance remarquables. Par exemple, sur un DataFrame carré de 1 million d'entiers, le calcul de la somme de toutes les valeurs paires dans chaque ligne peut être réalisé deux fois plus rapidement en utilisant Python 3.13t (free-threaded) plutôt que la version simple-threaded classique. La durée moyenne passe de 21,3 ms à 7,89 ms, une réduction spectaculaire de plus de 60%. Pour ce test, l'interface iter_series(axis=1) est utilisée pour appliquer une fonction à chaque ligne, suivie par apply() pour une exécution mono-thread ou apply_pool() pour une exécution multi-thread (use_threads=True) ou multi-processeur (use_threads=False). Évaluer la Performance Les tests de performance étendus ont montré que les avantages de Python free-threaded sont robustes et se manifestent de manière cohérente pour une large gamme de types et formes de DataFrames. Cela inclut des DataFrames de différentes tailles (taille de 10 000 à 100 millions d'éléments) et de différents niveaux d'homogénéité de type (colonne unique, mixte et uniforme). Exemples : DataFrames Carrés (1 000 x 1 000) : Standard Python 3.13 (mono-thread) : 17,7 ms Standard Python 3.13 (multi-thread) : 39,9 ms Free-threaded Python 3.13t (multi-thread) : 7,89 ms DataFrames Longs (10 000 x 100) : Standard Python 3.13 (mono-thread) : 4,36 ms Standard Python 3.13 (multi-thread) : 6,92 ms Free-threaded Python 3.13t (multi-thread) : 1,92 ms DataFrames Élargis (100 x 10 000) : Standard Python 3.13 (mono-thread) : 3,08 ms Standard Python 3.13 (multi-thread) : 5,91 ms Free-threaded Python 3.13t (multi-thread) : 2,42 ms Avantages et Inconvénients Utiliser Python free-threaded présente certains compromis. Le traitement mono-thread est plus lent (21,3 ms sur 3.13t contre 17,7 ms sur 3.13 standard) en raison de l'overhead supplémentaire. Celas reste un domaine actif de développement pour CPython, et des améliorations sont prévues dans les futures versions, notamment 3.14t. De plus, il y a des risques liés à la concurrence de threads et aux courses d'accès à la donnée. StaticFrame élimine ces risques grâce à l'immutabilité des données. Elle utilise des arrays NumPy immuables (avec flags.writeable fixé à False) et interdit les mutations in situ, garantissant ainsi la sécurité des threads sans avoir besoin de verrous ou de copies défensives. Évolution des Performances Pour un DataFrame de 100 millions d'éléments, les gains de performance s'intensifient. Le temps de traitement est réduit de plus de 70% pour tous les types de DataFrames, sauf deux. Pour les DataFrames de taille petite (10 000 éléments), les avantages du multi-threading sont également perceptibles, avec des réductions de moitié pour les DataFrames hauts et carrés, bien que les DataFrames larges n'en bénéficient pas. Conclusion La suppression du GIL dans Python free-threaded permet une parallélisation efficace, amenant des réductions de temps de traitement de 50% à 90%, même lorsqu'une grande partie de la performance est limitée par les bibliothèques C-extensions comme NumPy. Cette innovation ouvre la voie à des améliorations substantielles dans d'autres opérations DataFrames, telles que les group-by, les fonctions de fenêtre, etc. Avis des Professionnels et Profil de StaticFrame Les professionnels de l'industrie voient dans cette évolution une avancée majeure pour Python. La capacité à partager des structures de données immuables de manière sûre entre threads rend Python plus compétitif pour les tâches intensives de calcul. StaticFrame, une bibliothèque open-source conçue pour les DataFrames immuables, profite pleinement de cette innovation. Son approche stricte de l'immutabilité et son intégration avec Python free-threaded en font un choix idéal pour les projets nécessitant des performances élevées.

Related Links