pres.md 5.54 KB
Newer Older
Martin Souchal's avatar
Martin Souchal committed
1 2
<!-- $theme: default -->

Martin Souchal's avatar
Martin Souchal committed
3 4 5 6 7 8 9 10 11 12
Conteneurs pour le calcul
===

# ![](images/singu.png)
# ![](images/licence.png)

###### Martin Souchal (Centre de calcul Francois Arago)

---
<!-- footer: Conteneurs pour le calcul - Martin Souchal -->
Martin Souchal's avatar
Martin Souchal committed
13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47
---
#### En quoi les conteneurs peuvent nous aider dans le contexte scientifique ?

* Collaboration
    - Diffusion et partage simple de logiciels
    - Portabilité des logiciels
    - Technologie simple à mettre en œuvre
    - Rapidité de mise œuvre

* Reproductibilité
    - Assurance de répétabilité 
    - Assurance de retrouver le même environnement
    - Assurance de retrouver les même résultats

* Autres
    - Solution identique du laptop au meso-centre
    - Interface graphique

---
# Cas d'usage pratique dans la science

* Environnement de travail python prêt à l'emploi transportable sur n'importe quel cluster de calcul
* Les données restent dans les espaces de travail et n'ont pas besoin d'être intégrées au conteneur
* Tout ça de manière sécurisée sans avoir besoin d'être root

---
# Répétabilité

* Le journal [Rescience](http://rescience.github.io/) offre la possibilité de soumettre des articles scientifiques qui se doivent d'être reproductible.
* Figer l'environnement d'execution dans un conteneur et le joindre à une publication garantit la reproductibilité
* Voir le TP de Loic Gouarin : https://github.com/gouarin/container_precis2017

⚠️<span class="alert">Attention pas de reproductibilité avec les conteneurs mais de la répétabilité !</span>

---
Martin Souchal's avatar
Martin Souchal committed
48
# Docker et le calcul
Martin Souchal's avatar
Martin Souchal committed
49
![bg](images/docker.png)
Martin Souchal's avatar
Martin Souchal committed
50 51 52 53 54 55 56 57

- Docker est un micro service
- Virtualisation réseau (bridge, puis interfaces avec des IP privées)
- Image docker : superpositions de couches
- GPU, infiniband, openmpi pas intégrés
- Sécurité
	- daemon root
	- pas d’isolation : une appli root du conteneur qui s’échappe = un attaquant root sur la machine physique
Martin Souchal's avatar
Martin Souchal committed
58 59

![](images/docker-filesystems-multilayer.png)
Martin Souchal's avatar
Martin Souchal committed
60
---
Martin Souchal's avatar
Martin Souchal committed
61
# Conteneurs orientés calcul
Martin Souchal's avatar
Martin Souchal committed
62
### Conteneurs usermode compatibles openMPI
Martin Souchal's avatar
Martin Souchal committed
63 64 65

- Charlie-cloud
- Singularity
Martin Souchal's avatar
Martin Souchal committed
66
- Shifter
Martin Souchal's avatar
Martin Souchal committed
67 68
---
# Charlie-cloud
Martin Souchal's avatar
Martin Souchal committed
69
![bg](images/charlie.png)
Martin Souchal's avatar
Martin Souchal committed
70 71

- Univers docker
Martin Souchal's avatar
Martin Souchal committed
72 73
- nécessite de modifier la configuration kernel (user.max_user_namespaces, namespace.unpriv_enable=1)
- necessite docker pour créer un conteneur
Martin Souchal's avatar
Martin Souchal committed
74
- utilisable sans droits root
Martin Souchal's avatar
Martin Souchal committed
75 76 77 78 79 80 81 82 83 84 85 86
- un conteneur = un repertoire

---
# Shifter
![bg](images/shifterlogo_2.png)

- Images docker converties mais ne nécessite pas docker installé
- Nombreuses dépendances
- Necessite un Image gateway pour faire lien entre docker et shifter
- utilisable sans droits root mais avec un daemon
- Support GPU natif
- Infiniband natif
Martin Souchal's avatar
Martin Souchal committed
87 88

---
Martin Souchal's avatar
Martin Souchal committed
89 90
# Singularity 
![bg](images/singu.png)
Martin Souchal's avatar
Martin Souchal committed
91 92

- Aucune dépendance
Martin Souchal's avatar
Martin Souchal committed
93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212
- compatible toute distribution linux
- droits root nécessaires pour créer le conteneur
- compatible avec docker
- Support GPU natif
- Infiniband natif
- un conteneur = un fichier (meilleures perfs sur fs distribué) ou un répertoire

---
# Avantages de Singularity
![bg](images/singu.png)

- Facile à installer et à déployer sur un cluster de calcul
- Compatibilité avec Docker
- Utilisation de registres Public/Privé
- Un conteneur est facile à transporter pour l'utilisateur
- Singularity apps
- Compatible tous scheduler
- Intégration de tests et d'aide intégrée dans le conteneur

---
## Création d'un conteneur Singularity
### Avant de commencer
![bg](images/singu.png)

* Conteneur en mode "sandbox"
    * Pour le déveleppement, tests
    * Possibilité de modifier le conteneur au fur et a mesure

* Conteneur en mode distribution (par défaut)
    * Il n'est plus modifiable une fois construit
    * Assurance que le destinataire du conteneur ne puisse pas altérer son contenu
    * Pour mettre a jour le conteneur, il faut l'incrémenter
---
# Commandes de bases
![bg](images/singu.png)

* build: Create the container
* exec: Execute a command to your container
* inspect: See labels, run and test scripts, and environment variables
* pull: pull an image from Docker or Singularity Hub
* run: Run your image as an executable
* shell: Shell into your image
* apps : list apps
* help : help me !

```bash
singularity help example.img
Help me. I'm in the container.
```
---
# Création d'un conteneur
![bg](images/singu.png)

* Création du conteneur depuis un fichier de "recette"
```bash
singularity build example.img example.def
```
* Import depuis *Docker*
```bash
singularity import example.img docker://sysmso/openmpi
```
* Execution d'un code dans un conteneur (compilation)
```bash
singularity exec example.img mpicc mpi-ping.c -o ./mpi-ping
```
* Execution d'un programme *OpenMPI*
```bash
mpirun -np 20 singularity exec example.img ./mpi-ping
```

---
# Bootstrap file
![bg](images/singu.png)
```bash
Bootstrap: docker
From: ubuntu:latest
%labels
    AUTHOR souchal@apc.in2p3.fr
    version 1.0
%post
    apt-get update
    apt-get -y install python
    exit 0    
%help
    Help me. Im in the container.
%files
    pymultinest_demo_minimal.py /pymultinest_demo_minimal.py
%environment
    LD_LIBRARY_PATH=/usr/local/lib/
    export LD_LIBRARY_PATH
%runscript
    python /pymultinest_demo_minimal.py
```
---
## Singularity apps
### Nouveauté de la version 2.4
![bg](images/singu.png)
- un conteneur, plusieurs applications avec des environnements différents
- pratique pour les workflow partageant les mêmes dépendances

```bash
%apprun foo
    exec echo "RUNNING FOO"
%applabels foo
   BESTAPP=FOO
   export BESTAPP
%appinstall foo
   touch foo.exec
%appenv foo
    SOFTWARE=foo
    export SOFTWARE
%apphelp foo
    This is the help for foo.
%appfiles foo
   avocados.txt
```

---
# Questions
![bg](images/singu.png)