Un pipeline pandas existant sur un CSV de 40 Go est trop lent sur CPU.
→Remplacer pandas par cuDF ; la plupart des appels read/filter/groupby/join conservent la même API et s'exécutent sur le GPU.
Pourquoi: cuDF reflète l'API pandas par conception, la migration est donc principalement un changement d'importation plutôt qu'une réécriture.
Référence↗
L'équipe souhaite des accélérations GPU sans toucher au code pandas existant.
→Charger l'accélérateur cudf.pandas (%load_ext cudf.pandas ou python -m cudf.pandas) ; il exécute les opérations sur GPU et revient au CPU automatiquement.
Pourquoi: L'accélération sans modification de code avec un retour transparent au CPU permet de maintenir le fonctionnement des opérations non prises en charge.
Référence↗
Nécessite le chargement par colonne le plus rapide d'un grand ensemble de données analytiques sur GPU.
→Stocker au format Parquet et lire avec cudf.read_parquet ; l'élagage des colonnes et le predicate pushdown minimisent le transfert vers l'appareil.
Pourquoi: Le format Parquet columnar se mappe proprement à Arrow-backed cuDF et se lit beaucoup plus rapidement que le CSV orienté ligne.
cuDF est plus lent que pandas sur un fichier de 50 Mo.
→Conserver les petites données sur CPU ; les transferts hôte-vers-appareil et le coût de lancement du noyau dominent en dessous de ~1-2 Go.
Pourquoi: L'accélération GPU est rentable à grande échelle ; pour les données minuscules, le coût de copie dépasse le gain de calcul.
Agréger des milliards de lignes par clé avec plusieurs statistiques.
→Utiliser df.groupby(key).agg({...}) dans cuDF ; les agrégations s'exécutent comme des noyaux GPU parallèles.
Nettoyer et normaliser une colonne de texte à forte cardinalité à l'échelle du GPU.
→Utiliser l'accesseur .str de cuDF (lower, strip, replace, contains, split) ; les opérations de chaînes sont accélérées par le GPU via libcudf.
Pourquoi: cuDF dispose d'une couche de chaînes GPU dédiée, de sorte que le nettoyage de texte n'a pas besoin de revenir au CPU.
Joindre deux grands DataFrames d'appareil sur une clé partagée.
→Utiliser cudf.merge / df.merge avec la clé de jointure ; les jointures par hachage s'exécutent sur le GPU.
Pourquoi: Les deux frames doivent déjà être sur l'appareil pour éviter un aller-retour ; mélanger pandas et cuDF force une copie sur l'hôte.
L'ensemble de données contient des valeurs manquantes qui interrompent l'entraînement cuML en aval.
→Utiliser cuDF fillna/dropna et des casts de type de données explicites avant l'ajustement ; cuML s'attend à des tableaux d'appareils numériques propres.
Les types de données mixtes/objet provoquent des erreurs ou un gonflement de la mémoire dans cuDF.
→Convertir tôt vers des types de données numériques ou catégoriels compacts (int32/float32, category) pour réduire l'empreinte mémoire du GPU.
Pourquoi: La conversion vers un type de données inférieur réduit la pression de la mémoire de l'appareil, le goulot d'étranglement le plus courant sur un seul GPU.
Nécessite un encodage d'étiquettes/one-hot pour les caractéristiques catégorielles avant l'entraînement.
→Utiliser le type de données catégorielles cuDF avec .cat.codes ou les encodeurs de pré-traitement cuML pour garder les données sur l'appareil.
Nécessite des opérations mathématiques brutes sur des tableaux numériques non exposées par l'API DataFrame de cuDF.
→Convertir via df.values ou to_cupy() et opérer avec CuPy (tableaux GPU compatibles NumPy), puis ramener les résultats.
Pourquoi: cuDF et CuPy partagent la mémoire de l'appareil via l'__cuda_array_interface__, la conversion est donc sans copie.