Description
Cette formation de trois jours permet à des ingénieurs déjà autonomes en Python de choisir et mettre en œuvre la bonne stratégie de parallélisation ou de distribution selon la nature de leurs traitements et le matériel disponible. L'objectif n'est pas de couvrir un outil unique, mais de donner une méthode d'arbitrage entre multithreading, programmation asynchrone, multiprocessing, calcul distribué avec Dask et calcul sur GPU, en s'appuyant sur une démarche de diagnostic préalable.
Objectifs pédagogiques
- Identifier la nature d'un traitement (CPU-bound, I/O-bound, memory-bound) à partir d'une démarche de profilage
- Diagnostiquer un goulot d'étranglement avant toute tentative de parallélisation
- Choisir le modèle d'exécution adapté parmi multithreading, asynchrone, multiprocessing, Dask et GPU selon le type de tâche et le matériel disponible
- Implémenter un traitement avec Dask sur des volumes importants, y compris dans des scénarios dépassant la mémoire disponible
- Comparer les performances des différentes approches sur des cas représentatifs du métier
- Évaluer l'opportunité d'un portage de calcul sur GPU et en mesurer les conditions et les limites
Public concerné
Ingénieurs d'études exploitant Python au quotidien
Profils data scientist / data analyst
Développeurs scientifiques et géomaticiens amenés à paralléliser ou distribuer des traitements Python
Prérequis
Pratiquer Python au quotidien et maîtriser son écosystème scientifique (NumPy, Pandas)
Avoir un usage, même empirique, de la librairie multiprocessing
Être à l'aise avec les notions de données volumineuses et de traitement par lots
Déroulé du programme
1
Séquence 1 : Concurrence, parallélisme et GIL (1h30)
1h
2
• Rappels structurants : processus vs threads, concurrence vs parallélisme, latence vs débit
3
• Le GIL (Global Interpreter Lock) : rôle, mécanisme, ce qu'il autorise et ce qu'il empêche réellement
4
• Conséquences concrètes sur le choix d'une stratégie de parallélisation
5
• Distinction CPU-bound vs I/O-bound comme critère de décision déterminant
6
• Évolutions récentes autour du GIL, notamment les builds free-threaded (Python 3.13+) : intérêt, limites, maturité et impact réel en production
7
• TP : classer une série de traitements représentatifs selon leur nature (CPU-bound / I/O-bound) et anticiper la stratégie adaptée
8
Séquence 2: Profilage et diagnostic avant parallélisation (1h30)
1h
9
• Pourquoi mesurer avant de paralléliser : éviter d'optimiser au mauvais endroit
10
• Mesure des temps d'exécution : time, timeit, profileurs (cProfile, line_profiler)
11
• Identification de la nature de la charge : CPU-bound, I/O-bound, memory-bound
12
• Repérage des coûts cachés : sérialisation, copies de données inutiles, transferts mémoire
13
• Notion de granularité de tâche : équilibre entre parallélisme et surcoût de coordination
14
• TP : profilage d'un traitement représentatif, identification du goulot d'étranglement
15
Séquence 3: Multithreading et programmation asynchrone (2h00)
2h
16
• threading : cas d'usage pertinents (I/O-bound), synchronisation, limites liées au GIL
17
• asyncio : boucle d'événements, coroutines, async / await, cas d'usage adaptés
18
• concurrent.futures : interface haut niveau pour threads et processus
19
• Positionnement clair : outils d'arbitrage pour les cas I/O, non solution au calcul CPU intensif
20
• TP : parallélisation d'un traitement I/O-bound, mesure du gain réel
21
Séquence 4 : Multiprocessing raisonné (2h00)
2h
22
• Le module multiprocessing: Process, Pool, map/apply
23
• Contournement du GIL par la multiplication des processus pour les tâches CPU-bound
24
• Consolidation de la pratique existante : passage d'un usage empirique à un usage argumenté
25
• TP: parallélisation d'un traitement CPU-bound, comparaison des temps selon le nombre de processus
26
Séquence 5 : Multiprocessing avancé et limites du modèle mono-machine (1h30)
1h
27
• Coût de la sérialisation (pickle) et du transfert de données entre processus
28
• Partage de données : Queue, Pipe, mémoire partagée
29
• Consommation mémoire, granularité des tâches, plafond de scalabilité sur une seule machine
30
• Identification du moment où le multiprocessing atteint ses limites et où la distribution devient nécessaire
31
• TP : mise en évidence du surcoût de sérialisation sur un cas concret
32
Séquence 6: Dask, concepts fondamentaux (2h00)
2h
33
• Positionnement de Dask : bibliothèque de calcul parallèle et distribué, au-delà de la mémoire et de la machine unique
34
• Graphe de tâches et évaluation paresseuse (lazy evaluation)
35
• Les schedulers Dask (local threads, local processus, distribué) et leurs usages respectifs
36
• Le tableau de bord (dashboard) pour visualiser et diagnostiquer l'exécution
37
• TP : construction et exécution d'un graphe de calcul, lecture du dashboard
38
Séquence 7: Dask Array et Dask DataFrame (2h00)
2h
39
• Dask Array : parallélisation des opérations de type NumPy, notion de chunks et dimensionnement
40
• Dask DataFrame : parallélisation des opérations de type Pandas, notion de partitions
41
• Bonnes pratiques : dimensionnement des chunks et partitions, opérations coûteuses à éviter
42
• TP : traitement d'un jeu de données volumineux, comparaison avec l'approche Pandas / NumPy classique
43
Séquence 8: TP métier, traitement volumineux appliqué (1h30)
1h
44
• Mise en situation sur une chaîne de traitement inspirée de cas géomatiques : données raster, vectorielles ou tabulaires volumineuses (lecture de formats vectoriels via Fiona, manipulation avec GeoPandas / Shapely, données raster avec Rasterio)
45
• Application concrète des bonnes pratiques de dimensionnement vues précédemment
46
• TP: confrontation des choix d'architecture (chunks, partitions) à un cas proche du métier des apprenants
47
Séquence 9: Opportunité du calcul sur GPU (1h30)
1h
48
• Modèle d'exécution GPU : architecture massivement parallèle, notion de kernel
49
• Types de calculs qui bénéficient du GPU et ceux qui n'en tirent aucun gain
50
• Coût de transfert des données entre CPU (hôte) et GPU, et son impact sur le bilan de performance
51
• Critères de décision pour envisager un portage sur GPU dans un contexte data science et géomatique
52
• TP : analyse d'un cas de traitement pour statuer sur la pertinence d'un portage GPU
53
Séquence 10 : CuPy, RAPIDS et PyTorch (2h00)
2h
54
• CuPy: équivalent GPU de NumPy, portage de code existant, points de compatibilité et limites
55
• Écosystème RAPIDS : cuDF (traitement DataFrame proche de Pandas), cuML (ML accéléré, API proche de scikit-learn)
56
• Articulation avec PyTorch, déjà utilisé par les apprenants : manipulation de tenseurs, exécution de calculs GPU au-delà du strict cadre deep learning
57
• Point d'attention sur l'environnement : dépendance à la version CUDA, aux drivers Nvidia, à Python et à l'OS ; l'installation de RAPIDS / CuPy nécessite un environnement validé au préalable
58
• TP: portage d'un calcul NumPy vers CuPy et lecture comparative des résultats
59
Séquence 11 : Démonstration ou TP GPU selon environnement disponible (1h30)
1h
60
• Portage d'un calcul NumPy vers CuPy et comparaison de performance
61
• Modalité conditionnée à la disponibilité d'un environnement GPU Nvidia préconfiguré et validé : démonstration, ou TP si l'environnement est prêt
62
• Lecture critique des résultats : gain réel, coût de transfert, cas où le GPU n'apporte pas d'avantage
63
• TP ou démonstration : mesure comparative CPU / GPU sur un traitement représentatif
64
Séquence 12: Cas métier et grille d'arbitrage (2h00)
2h
65
• Application aux traitements réels des apprenants : traitement d'images (OpenCV), calcul vectoriel et géospatial, machine learning
66
• Exemples inspirés de l'écosystème géomatique (GeoPandas, Shapely, Fiona, Rasterio), du traitement d'images (OpenCV) et scientifique (SciPy, scikit-learn)
67
• Synthèse transversale : grille d'arbitrage entre profilage, multithreading, asyncio, multiprocessing, Dask et GPU
68
• TP : sur un cas métier apporté, choisir et justifier la stratégie de parallélisation la plus adaptée
Informations
Durée
3 jour(s)
21h
Tarif
Sur demande
Formations similaires
IA & Data
Migration vers le Cloud
2 jour(s)
Sur demande
IA & Data
Agents IA — Concevoir des systèmes autonomes avec LangChain et LangGraph - Avancé
3 jour(s)
Sur demande
IA & Data
AI Act européen — Comprendre vos obligations et vous mettre en conformité - Niveau débutant
1 jour(s)
Sur demande
IA & Data
Analyse bayésienne (4-107)
3 jour(s)
Sur demande