Atelier Python avancé pour le calcul scientifique

Le langage Python est maintenant largement utilisé par la communauté scientifique et ce, dans de nombreux domaines. Un certain nombre de packages sont disponibles (NumPy, SciPy, ...) et permettent de réaliser rapidement des prototypes validant des algorithmes de calcul. Mais qu’en est-il du passage à l’échelle ? C’est-à-dire lorsque l’on a validé notre algorithme et que l’on veut maintenant s’en servir sur des millions voire des milliards d’inconnues. Est-ce que le seul usage de NumPy et de Scipy est suffisant ? Bien souvent, la réponse est non. Il est alors nécessaire de s’appuyer sur d’autres outils permettant de passer à des langages proches de la machines en conservant une certaine abstraction. Ces outils sont aujourd’hui nombreux.

Nous avons décidé lors de cet atelier de vous en présenter trois : Cython qui permet d’avoir un grain fin sur les optimisations ; Pythran et Numba qui permettent, à moindre coût, d’avoir de bonnes performances.

Cet atelier est un niveau avancé et s’adresse à des personnes ayant déjà une bonne compréhension de NumPy (stockage mémoire, manipulation des tableaux, …).


Organisateurs

- Loic Gouarin (LMO)
- Serge Guelton (Quarkslab)
- Konrad Hinsen (CBM)
- Xavier Juvigny (ONERA)
- Marc Poinot (SAFRAN)


Lieu

Amphi Charpak à Jussieu (Paris) (plan).


Horaires

Mardi 4 juillet 2017 : 9h - 17h30
Mercredi 5 juillet 2017 : 9h - 17h30
Jeudi 6 juillet 2017 : 9h - 17h30


Inscription

Les inscriptions pour cet atelier sont gratuites mais obligatoires et sont sujettes à validation par un test permettant d’évaluer votre niveau en NumPy.

Le nombre de participants est limité à 40 personnes.

Pour vous inscrire, suivez ce lien :

http://calcul.math.cnrs.fr/C3I/index.php?sid=41228&lang=fr


Matériel

Il n’est pas nécessaire d’installer des logiciels sur les machines. Nous ferons l’ensemble des séances sur le centre de calcul ROMEO

Merci à Arnaud Renard, Jean-Matthieu Etancelin et Fabien Berini !!


Programme

Mardi 4 juillet 2017

9h - 17h30  : Cython (Xavier Juvigny (ONERA))

supports
mandelbrot.zip

Mercredi 5 juillet 2017

9h - 17h30  : Pythran (Serge Guelton (Quarkslab))

supports profiling
supports pythran

Jeudi 6 juillet 2017

9h - 17h30  : Numba (Loic Gouarin (LMO/CNRS))

supports

Supports des TPs

Résumés

Cython : Xavier Juvigny

Cython est une extension du langage Python permettant soit d’optimiser des parties d’un module ou un script python soit de faciliter l’interfaçage d’une bibliothèque C ou C++ avec Python.

Utilisé comme optimiseur, Cython permet avec peu d’efforts de générer des modules Python écrits en C dont les performances sont proches d’un code écrit en pure C. Des modules sont proposés avec Cython permettant d’interfacer facilement un script Cython avec divers modules python tel que numpy. De même, Cython propose des scripts permettant de facilement faire appel à des fonctions ou des objets des bibliothèques standards C et C++ ( stdio, std ::vector, etc. ). Il est également possible de relâcher le GIL à l’intérieur d’un script Python pour profiter du multithreading via les threads C ou OpenMP.

Utilisé comme langage d’interface avec le C ou le C++, Cython propose divers mécanisme permettant de gérer les fonctions ( passage par pointeur ou valeurs ) ou les structures C, ainsi que les classes C++, les fonctions et les classes templates mais aussi les passages par références, etc. Tout cela demande d’organiser son module d’une façon propre et rigoureuse, ce qui sera également vu dans cette formation.

Enfin, des exercices seront proposés sur un code de traitement de l’image écrit en pure Python utilisant numpy et scipy, montrant la puissance de Cython pour optimiser un code Python et la facilité d’interfacer une petite bibliothèque C avec Cython.

Pythran : Serge Guelton

Pythran est un compilateur pour un DSL embarqué dans Python, spécialisé pour le calcul scientifique, qui se veut le moins intrusif possible sur la base de code existante.

Inutile de préciser le type de chaque variable ou de réécrire les appels aux fonctions numpy à la main (même si cela reste possible) : idéalement, une fois un noyau de calcul identifié, celui-ci est isolé dans un module, un unique commentaire de type est ajouté et Pythran est capable de le traduire en un code natif, qui n’utilise plus la libpython pour faire un calcul équivalent. Et qui relâche le GIL si le code a besoin d’être appelé dans un contexte multi-threadé.

Le code python d’origine est toujours interprétable, ce qui permet de prototyper son application en pure Python, et d’accélerer les fonctions gourmandes en ressources CPU une fois le prototype validé, sans étape de conversion coûteuse en temps de développement.

Cette promesse sera vérifiée sur plusieurs cas pratiques après une introduction rapide aux différents concepts nécessaires à une bonne utilisation de pythran.

Numba : Loïc Gouarin

Numba est un projet open source permettant d’optimiser vos codes numériques en faisant du Just In Time sans écrire une ligne de code en langages bas niveau (C, C++ ou Fortran). Il s’appuie sur LLVM pour analyser la fonction Python à améliorer. Son utilisation est simple puisqu’il faut juste ajouter un décorateur Python pour optimiser les fonctions qui consomment du temps dans notre application.Il est également possible de faire, comme Pythran le propose, du Ahead Of Time. Numba offre tout un tas d’options permettant de voir chaque étape de l’optimisation réalisée par LLVM permettant de comprendre un peu mieux le code généré.

Tout comme Pythran, il est possible de relâcher le GIL. Les boucles sont vectorisées par défaut lorsque c’est possible. Un des points forts de Numba est qu’il est également possible de générer des fonctions qui peuvent être appelées sur votre GPU soit en utilisant un décorateur, soit à un niveau plus fin en écrivant un kernel CUDA en Python.

Lors de cette présentation, nous vous donnerons de bonnes bases pour utiliser Numba en illustrant ses fonctionnalités par des exemples.


titre documents joints

7 novembre 2017
info document : Zip
1.2 ko

4 juillet 2017
info document : PDF
183.7 ko

Accueil | Contact | Plan du site | | Statistiques du site | Visiteurs : 2428 / 482003

Suivre la vie du site fr  Suivre la vie du site Présentation du Groupe Calcul  Suivre la vie du site Formations / Ecoles   ?

Site réalisé avec SPIP 3.0.17 + AHUNTSIC

Creative Commons License