Comment détecter et corriger 5 goulets d'étranglement pandas avec cudf.pandas
Sources: https://developer.nvidia.com/blog/how-to-spot-and-fix-5-common-performance-bottlenecks-in-pandas-workflows, https://developer.nvidia.com/blog/how-to-spot-and-fix-5-common-performance-bottlenecks-in-pandas-workflows/, NVIDIA Dev Blog
Aperçu
Lentis au chargement des données, jointures gourmandes en mémoire et opérations de longue durée sont des points problématiques récurrents dans les flux pandas. Ce guide traite cinq goulets d’étranglement fréquents, comment les repérer et des solutions pratiques pour le CPU avec quelques ajustements de code. Il présente également un accélérateur GPU en mode drop-in, cudf.pandas, qui offre des gains d’ordre de grandeur sans modification du code. Si vous n’avez pas de GPU, vous pouvez utiliser cudf.pandas gratuitement dans Google Colab, où les GPU sont disponibles et la bibliothèque est préinstallée.
Caractéristiques clés
- Accélération GPU en mode drop-in pour les flux pandas via cudf.pandas, permettant le parallélisme sur des milliers de threads GPU sans nécessiter de changements de code pour de nombreuses opérations.
- E/S rapide et traitement des données : des solutions côté CPU incluent l’utilisation d’un parseur plus rapide comme PyArrow et des stratégies telles que charger uniquement les colonnes nécessaires ou lire par morceaux ; côté GPU, le cuDF accélère les lectures/écritures CSV/Parquet.
- Grandes jointures : réduction des mouvements de données côté CPU par le préfiltrage et les colonnes; accélération GPU des jointures lorsque cudf.pandas est activé.
- Efficacité mémoire : réduction du type numérique (downcasting) et conversion des chaînes à faible cardinalité en category pour économiser la RAM; mémoire unifiée pour les jeux de données plus grands que la mémoire GPU.
- Accélération des chaînes et des colonnes à haute cardinalité : kernels GPU optimisés pour les chaînes, len(), contains(), et jointures sur des clés chaînes.
- Exemples et notebooks de référence : démonstrations concrètes sur des charges de travail représentatives pour illustrer l’impact des accélérateurs.
Cas d’usage courants
- Chargement et parsing des données : remplacer ou compléter le parsing CSV de pandas par des moteurs plus rapides et envisager les formats Parquet/Feather pour un I/O plus rapide.
- Grandes jointures et regroupements : réduire le déplacement des données en évitant les colonnes inutiles avant les merges et utiliser les jointures indexées lorsque possible.
- Colonnes objets/chaînes larges : transformer les chaînes à faible cardinalité en category pour économiser la mémoire ; conserver les colonnes à haute cardinalité sous forme de chaînes.
- Groupby et agrégations sur de grands jeux de données : pré-filtrer les données et supprimer les colonnes inutiles pour réduire l’échantillon regroupé; utiliser observed=True pour les clés catégoriques afin d’éviter les combinaisons non utilisées.
- Fluids mémoire : lorsque les données dépassent la RAM CPU, cudf.pandas avec Unified Virtual Memory (UVM) permet de combiner VRAM et RAM et paginer automatiquement.
Setup et installation
L’approche est conçue pour être non intrusive : activez l’extension cudf.pandas et continuez à utiliser le code pandas habituel lorsque c’est possible.
%load_ext cudf.pandas
Note : dans Colab, vous pouvez accéder gratuitement au GPU et utiliser cudf.pandas sans réécrire votre code.
Démarrage rapide
Le même code pandas peut être utilisé après activation de cudf.pandas. Vous pouvez exécuter des opérations DataFrame typiques et un simple groupby, avec l’accélération GPU appliquée en coulisse.
import pandas as pd
# Après activation de l’extension cudf.pandas, on peut utiliser le code pandas habituel
df = pd.DataFrame({"ville": ["New York", "San Francisco", "New York"],
"valeur": [1, 2, 3]})
# Même API pandas, maintenant accélérée sur GPU lorsque cudf.pandas est actif
resultat = df.groupby("ville").sum()
print(resultat)
Pour des charges de travail réelles et plus lourdes, l’approche peut scale à des millions de lignes et des agrégations complexes sans changer le code.
Pour/Contre
- Pour
- Pas besoin de modifier le code pour de nombreuses opérations lorsque vous utilisez cudf.pandas.
- Gains substantiels pour les grandes jointures, les groupby et les opérations sur chaînes lorsque exécuté sur GPU.
- Mémoire unifiée permet de traiter des données plus grandes que la mémoire GPU avec pagination automatique.
- Accès GPU gratuit dans Colab facilite l’expérimentation.
- Contre
- Nécessite un GPU ou l’accès à Colab pour bénéficier des avantages GPU.
- Certains cas limites ou opérations exotiques peuvent nécessiter des ajustements ou vérifications.
- L’installation dépend de l’extension cudf.pandas et n’est pas nécessairement préinstallée dans tous les environnements.
Alternatives (brève comparaison)
Le article présente plusieurs approches en complément du cudf.pandas :
- PyArrow pour le parsing CSV sur CPU : parsing plus rapide que le parser pandas par défaut.
- Parquet/Feather : lectures plus rapides pour les données en colonne.
- Polars avec moteur GPU alimenté par cuDF : accélération équivalente pour les jointures, groupbys, agrégations et E/S sans modifier les requêtes Polars. | Approche | Avantages typiques | Quand l’utiliser |---|---|---| | cudf.pandas (GPU) | Substantiels gains sur les lectures, jointures, groupbys et chaînes | GPU disponible et préférence pour la continuité du code |PyArrow CSV | Parsing CSV rapide sur CPU | Lecture intensive de CSV sur CPU |Parquet/Feather | I/O rapide | Données stockées en format colonne |Polars avec moteur cuDF | Avantages similaires pour les flux Polars | Utilisation de Polars et besoin de gains GPU |
Prix ou Licence
Non spécifié dans cet article.
Références
More resources
CUDA Toolkit 13.0 pour Jetson Thor : Écosystème Arm Unifié et Plus
Kit CUDA unifié pour Arm sur Jetson Thor avec cohérence mémoire complète, partage du GPU entre processus, interop OpenRM/dmabuf, support NUMA et outils améliorés pour l’embarqué et le serveur.
Réduire les coûts de déploiement des modèles tout en conservant les performances grâce au swap de mémoire GPU
Exploitez le swap mémoire GPU (hot-swapping de modèles) pour partager les GPUs entre plusieurs LLM, réduire les coûts inoccupés et améliorer l’auto-Scaling tout en respectant les SLA.
Amélioration de l’auto-tuning GEMM avec nvMatmulHeuristics dans CUTLASS 4.2
Présente nvMatmulHeuristics pour sélectionner rapidement un petit ensemble de configurations de kernels GEMM à fort potentiel pour CUTLASS 4.2, réduisant considérablement le temps de tuning tout en approchant les performances d’une Recherche Exhaustive.
Accélérez ZeroGPU Spaces avec la compilation ahead-of-time (AoT) de PyTorch
Découvrez comment la compilation AoT de PyTorch accélère ZeroGPU Spaces en exportant un modèle compilé et en le rechargeant instantanément, avec quantification FP8, formes dynamiques et intégration au flux Spaces GPU.
Fine-Tuning gpt-oss pour la précision et les performances avec l’entraînement par quantisation (QAT)
Guide du fine-tuning de gpt-oss utilisant SFT + QAT pour récupérer la précision FP4 tout en préservant l’efficacité, avec upcast vers BF16, MXFP4, NVFP4 et déploiement avec TensorRT-LLM.
Comment les petits modèles linguistiques contribuent à une IA agentique évolutive
Explique comment les petits modèles linguistiques permettent une IA agentique plus rentable et flexible, aux côtés des LLMs, via NVIDIA NeMo et Nemotron Nano 2.