Python

De Wiki de Calcul Québec
Aller à : Navigation, rechercher
Cette page contient des modifications qui ne sont pas marquées pour la traduction.

Autres langues :anglais 100% • ‎français 100%

Note : Cette documentation a été testée sur Colosse. Certaines instructions pourraient être différentes sur d'autres serveurs.

Sommaire

Description

Python est un langage de programmation interprété dont la philosophie de design repose principalement sur la lisibilité du code. Sa syntaxe est simple et expressive. Python possède une bibliothèque de modules standard très étendue.

Les capacités du langage de programmation peuvent aussi être étendues à l'aide de modules développés par de tiers partis. En général, nous n'installons pas ces modules tiers dans le répertoire de logiciels disponibles afin de simplifier le plus possible les opérations. En revanche, nous mettons à votre disposition plusieurs versions de l'interpréteur et les outils nécessaires pour que vous puissiez installer de façon simple les modules dont vous avez besoin.

Les sections suivantes présentent le fonctionnement de l'environnement virtuel, son utilisation et l'installation de modules à l'intérieur d'un tel environnement.

Charger l'interpréteur

Pour connaître les versions de l'interpréteur Python disponibles :

[nom@serveur $] module avail apps/python


Vous pouvez ensuite charger la version de votre choix via la commande suivante, par exemple pour 2.7.10 sur Colosse:

[nom@serveur $] module load apps/python/2.7.10


Créer et utiliser un environnement virtuel

Avec chaque version de Python, nous fournissons l'outil virtualenv. Cet outil permet de créer des environnements virtuels à l'intérieur desquels vous pourrez installer facilement vos modules Python. Ces environnements permettent par exemple d'installer plusieurs versions d'un même module, ou encore de compartimenter les installations en fonction des besoins ou des expériences à réaliser.

Pour créer un environnement virtuel, entrez la commande suivante, où ENV est le nom du répertoire (vide) qui contiendra votre environnement :

[nom@serveur $] virtualenv ENV


Notez qu'à compter de Python 3.4.0, virtualenv est intégré à Python et se nomme plutôt pyvenv. Vous devez donc plutôt utiliser la commande

[nom@serveur $] pyvenv ENV


Une fois l'environnement virtuel créé, il ne vous reste plus qu'à l'activer  :

[nom@serveur $] source ENV/bin/activate


Pour quitter l'environnement virtuel, entrez simple la commande deactivate :

[nom@serveur $] deactivate


ATTENTION! Vous serez tentés de démarrer vos analyses directement, mais abstenez-vous! Pour exécuter une tâche, il est critique que vous consultiez les sections Votre code sur les serveurs de calcul et Exécuter une tâche. Si vous hésitez, contactez support@calculquebec.ca. N’oubliez pas de fournir des détails comme le nom du serveur et du code que vous utilisez, et au besoin le numéro de la tâche.

Installer des modules

Une fois que vous avez chargé un environnement virtuel, vous aurez accès à la commande pip. Cette commande prend en charge la compilation et l'installation de la plupart des modules Python et de leurs dépendances.

L'ensemble des commandes disponibles sont expliquées dans le manuel de pip. Nous mentionnons ici les commandes les plus importantes en présentant un exemple d'installation du module Numpy.

Chargeons d'abord l'interpréteur Python :

[nom@serveur $] module load apps/python/2.7.10


Créons ensuite un nouvel environnement virtuel nommé exp1  :

[nom@serveur $] virtualenv exp1


Notez qu'à compter de Python 3.4.0, virtualenv est intégré à Python et se nomme plutôt pyvenv. Vous devez donc plutôt utiliser la commande

[nom@serveur $] pyvenv exp1


Ensuite, activons l'environnement virtuel :

[nom@serveur $] source exp1/bin/activate


Vous devrez charger l'interpréteur et activer l'environnement virtuel à chaque utilisation de Python. Finalement, nous pouvons installer la dernière version stable de Numpy :

[nom@serveur $] pip install numpy


Si on voulait installer la version de développement de Numpy, on peut spécifier le lien vers le dépôt Git :

[nom@serveur $] pip install git+git://github.com/numpy/numpy.git


Installer Numpy en utilisant MKL (sur Colosse et Helios)

Sur Colosse et Helios, un simple

[nom@serveur $] pip install numpy


installera automatiquement une version de numpy utilisant MKL.

Installer Numpy en utilisant MKL (sur les autres serveurs)

MKL contient une version très optimisée de BLAS et LAPACK développée et maintenue par Intel. Il est toujours préférable d'utiliser MKL plutôt qu'une version générique de BLAS telle que celle fournie par Numpy. L'installation de Numpy en utilisant MKL se fait simplement en ajoutant un fichier de configuration dans votre répertoire d'accueil. Pour créer ce fichier, chargez d'abord le module MKL approprié, par exemple :

[nom@serveur $] module load libs/mkl


Le fichier peut ensuite être créé en copiant les lignes suivantes dans une invite de commande :

[nom@serveur $] cat > ~/.numpy-site.cfg << EOF
[mkl]
library_dirs = $MKLROOT/lib/intel64
include_dirs = $MKLROOT/include
mkl_libs = mkl_rt
lapack_libs =
EOF


Ensuite, exécutez, tel que précédemment :

 
 [nom@serveur $] virtualenv exp1
 [nom@serveur $] source exp1/bin/activate
 


Avec GCC

[nom@serveur $] pip install numpy


ATTENTION : Les instructions d'installation dépendent par la suite du compilateur choisi. Par défaut, sur Colosse, le compilateur est Intel. Suivez donc les instructions de la section Avec Intel.

Avec Intel[1]

Vous devez d'abord télécharger les sources de Numpy, puisqu'il vous faudra les modifier. Une fois les sources téléchargées et décompressées, déplacez vous dans le répertoire des sources et exécutez la commande suivante:

[nom@serveur $] sed -i "s/self.cc_exe =.*/self.cc_exe = 'icc -O3 -g -fPIC -fp-model strict -fomit-frame-pointer -openmp -xhost'/g" numpy/distutils/intelccompiler.py


Finalement, pour compiler et installer, entrez la commande suivante.

[nom@serveur $] python setup.py config --compiler=intelem build_clib --compiler=intelem build_ext --compiler=intelem install


Installer PyCuda

Pour installer PyCuda, il faut d'abord installer NumPy. Suivez les instructions de la section ci-dessus. Puis, toujours dans le même environnement virtuel, exécutez

[nom@serveur $] pip install pycuda

.

Profiler votre code

Vous pouvez profiler votre code Python simplement en ligne de commande, grâce à l'option -m cProfile :

[nom@serveur $] python -m cProfile script.py 
 885812 function calls (883641 primitive calls) in 38.299 CPU seconds
   Ordered by: standard name
   ncalls  tottime  percall  cumtime  percall filename:lineno(function)
        1    0.000    0.000   38.299   38.299 <string>:1(<module>)
        1    0.000    0.000    0.000    0.000 <string>:1(ParseResult)
        1    0.000    0.000    0.000    0.000 <string>:1(SplitResult)
        1    0.000    0.000    0.000    0.000 ConfigParser.py:106(Error)
        1    0.000    0.000    0.000    0.000 ConfigParser.py:133(NoSectionError)
        1    0.000    0.000    0.000    0.000 ConfigParser.py:140(DuplicateSectionError)
        1    0.000    0.000    0.000    0.000 ConfigParser.py:147(NoOptionError)
...


Par défaut, cela affiche la liste des fonctions en ordre alphabétique. Vous pouvez changer l'ordre d'affiche avec l'option -s. Par exemple, pour trier en ordre de temps passé dans la fonction, ajoutez -s time :

[nom@serveur $] python -m cProfile -s time script.py 
 885206 function calls (883035 primitive calls) in 37.897 CPU seconds
   Ordered by: internal time
   ncalls  tottime  percall  cumtime  percall filename:lineno(function)
     1262   34.225    0.027   34.225    0.027 {time.sleep}
     1750    2.627    0.002    2.627    0.002 {select.select}
      335    0.167    0.000    0.167    0.000 {posix.forkpty}
   524253    0.110    0.000    0.110    0.000 Module.py:18(<lambda>)
     4745    0.099    0.000    0.209    0.000 {filter}
    47784    0.077    0.000    0.077    0.000 {built-in method sub}
        1    0.040    0.040    0.056    0.056 pexpect.py:64(<module>)
...


Les options de tri possibles sont listées sur cette page de la documentation officielle de Python.

Parallélisation aisée avec SCOOP

Des paquets sont disponibles afin de faciliter la programmation parallèle sous Python. Un de ces projets libre est Scalable Concurrent Operations in Python (SCOOP). Pour l'utiliser sur le supercalculateur, il suffit de l'installer dans votre environnement :

 
 [nom@serveur $] pip install pyzmq
 [nom@serveur $] pip install scoop
 


Vous pourrez maintenant utiliser les fonctions de SCOOP afin de paralléliser aisément votre programme.

Pour utiliser plus d'un nœud dans votre calcul parallèle, vous devez générer des clés SSH afin de permettre une connexion entre les nœuds.

Pour démarrer vos applications développées avec SCOOP, vous pouvez utiliser un fichier de soumission similaire à celui ci-dessous.

Fichier : submit.tmpl.sh
#!/bin/bash
 
#PBS -S /bin/bash
#PBS -N TASK
#PBS -A xxx-yyy-zz (votre # de projet)
#PBS -l nodes=2:ppn=8
#PBS -l walltime=300
 
python -m scoop examples/piCalc.py


Références

  1. https://software.intel.com/en-us/articles/numpyscipy-with-intel-mkl

Autres références

Outils personnels
Espaces de noms

Variantes
Actions
Navigation
Ressources de Calcul Québec
Outils
Partager