Formation en IA & Data: Calcul distribué avec Python - Ascent Formation
Retour aux formations
IA & Data

Calcul distribué avec Python

3 jour(s)21h

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