data scientiste big data

Le succès de Python pour les applications scientifiques (Data science, Big Data, Machine Learning…) requiert de plus en plus de capacités de calculs. Ce cours vous initie au paradigme du calcul parallèle/distribué, des concepts de base aux techniques et librairies les plus avancées de l’écosystème Python.

Description

Durée : 28 heures
Modalités techniques d’évaluation : Évaluation des connaissances par QCM, évaluation des compétences au travers de travaux pratiques et de cas d’études. Contrôle de l’acquisition des connaissances et des compétences pendant la formation par le formateur.
Moyens pédagogiques : Apports théoriques réalisés en classe et complétés par de nombreux travaux pratiques permettent aux participants de disposer d’une expérience concrète. A l’issue des sessions magistrales, réalisation de cas d’études tutorés.

Objectifs pédagogiques

À l’issue de la formation, le participant sera en mesure de :

  • Acquérir les concepts de la programmation parallèle
  • Savoir identifier les portions d’un programme qui sont parallélisables
  • Posséder une vision claire de l’écosystème de calcul parallèle pour Python
  • Développer des applications parallélisées (programmation asynchrone, multithreading, multiprocessing, calcul distribué)
  • Savoir exécuter des calculs sur les GPU des cartes graphiques
  • Savoir exécuter un workflow de tâches dans le Cloud

Méthodes pédagogiques

70% du temps est consacré à la mise en pratique des concepts et librairies présentées. L’utilisation des notebooks Jupyter et l’exécution de code dans le Cloud apportent une réelle interactivité.
PROGRAMME DE FORMATION

Le parallélisme et son écosystème Python

  • Les différentes formes du parallélisme et ses architectures (CPU, GPU, ASIC, FPGA, NUMA, OpenMP, MPI… ).
  • Contraintes et limites.
  • L’écosystème de calcul parallèle pour Python.

Travaux pratiques
Profiling d’un programme (cProfile, Kcachegrind et pyprof2calltree). Compiler un programme C avec les instructions SIMD. Bien installer Numpy : comment obtenir un gain de vitesse x40.

Les bases : programmation asynchrone, multithreading et multiprocessing

  • Programmation asynchrone : générateurs et asyncio.
  • Multithreading : accès concurrents, verrous…
  • Limites du multithreading en Python.
  • Multiprocessing : mémoire partagée, pools de process, conditions…
  • Premier cluster de calcul distribué avec les Managers et Proxy.

Travaux pratiques
Réalisation d’une même chaîne de traitement de données avec chaque modèle et d’un cluster de calcul distribué entre les machines des participants.

Calcul distribué : Celery, Dask et PySpark

  • Concepts et configuration.
  • Mise en œuvre de chaque librairie.

Travaux pratiques
Plusieurs exercices seront abordés (calcul matriciel, traitement d’image/texte, Bitcoin, Machine Learning…). Utilisation des notebooks Zeppelin.

Calculer sur GPU

  • Les architectures GPU : kernels, mémoire, threads…
  • Les librairies OpenCL et CUDA.
  • Mise en œuvre des librairies Scikit-cuda, PyCUDA et Numba.

Travaux pratiques
Calcul matriciel et traitement d’images. Machine Learning avec la librairie mxnet : Neural Art. Compilation Just In Time.

Autres librairies de programmation parallèle

  • Message Passing Interface avec MPI4py.
  • PyOpenCL : implémenter un code avec des systèmes hétérogènes.
  • Joblib : Les pipelines légers.
  • Greenlets : vers un meilleur multithreading.
  • Pythran : Compiler vos programmes Python sur architectures multicœurs et vectorisées.

Travaux pratiques
Exercices de base avec chaque librairie.

Créer des workflows de tâches

  • Les primitives disponibles avec Celery, Dask et PySpark.
  • Créer et superviser des workflows avec les librairies Luigi et Airflow.

Travaux pratiques
Création de pipelines de traitements de données avec chaque librairie.

Exécuter des calculs dans le Cloud

  • Panorama de l’offre Internet pour le Cloud.
  • Administrer un cluster avec Ansible.

Travaux pratiques
Effectuer des calculs dans le Cloud.