Python avancé pour le calcul scientifique

Programme

Pré-requis

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, …).

Inscriptions

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 :

https://sondages.ec-lyon.fr/index.php/889398/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 Régional ROMEO, via la plateforme romeoLAB.

En revanche, vous devez venir avec votre portable, doté d’une connection wifi fonctionnelle, sur lequel est installée une version récente de votre navigateur :

Vous pouvez vérifier que votre installation fonctionne pour les Notebook prévus dans le cours en allant sur ce lien. Les sections des WebSockets (Port 8080) doivent être cochés en vert.

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

Résumés

Cython

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

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

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.

Accès

Voir la carte