Commit 8211f7c2 authored by Martin Souchal's avatar Martin Souchal
Browse files

First version

parent 80f3d6d6
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 21.0.2, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 98 27" enable-background="new 0 0 98 27" xml:space="preserve">
<title>Group</title>
<desc>Created with Sketch.</desc>
<g id="Page-1">
<g id="Landing" transform="translate(-167.000000, -19.000000)">
<g id="banner-2.0">
<g id="Group" transform="translate(168.000000, 19.000000)">
<path id="docker" fill="#FFFFFF" d="M47.9,6.5h0.2c0.6,0.1,0.8,0.4,0.8,0.8V14l0,1.1c0,0.9-0.4,1.9-1.1,2.9
c-1.1,1.2-2.3,1.7-3.6,1.7h-0.3c-1.3,0-2.5-0.6-3.7-1.8c-0.7-1-1-2-1-3c0-1.6,0.7-2.9,2.1-4c0.9-0.6,1.8-0.9,2.8-0.9
c1.2,0,2.2,0.3,3,1V7.9l0-0.6C47.3,6.8,47.6,6.5,47.9,6.5z M41.1,14.8V15c0,1.3,0.7,2.2,2,2.8c0.3,0.1,0.7,0.2,0.9,0.2h0.2
c1.2,0,2.1-0.7,2.8-2c0.1-0.4,0.2-0.7,0.2-0.9v-0.2c0-1.3-0.7-2.2-2-2.8c-0.4-0.1-0.7-0.2-1-0.2H44c-1.2,0-2.1,0.6-2.8,1.9
C41.1,14.2,41.1,14.5,41.1,14.8z M54.6,10.2c1.2,0,2.4,0.5,3.4,1.4c1,1,1.4,2.1,1.4,3.4c0,1.8-0.8,3.2-2.5,4.2
c-0.7,0.4-1.5,0.6-2.2,0.6h-0.3c-1.3,0-2.5-0.6-3.6-1.8c-0.7-1-1-2-1-3c0-1.6,0.7-2.9,2.1-3.9C52.8,10.5,53.7,10.2,54.6,10.2z
M51.7,14.9v0.2c0,1.1,0.5,2,1.6,2.6c0.4,0.2,0.8,0.3,1.2,0.3h0.2c1.1,0,2-0.6,2.6-1.8c0.1-0.4,0.2-0.7,0.2-1.1v-0.2
c0-0.9-0.4-1.7-1.3-2.3c-0.5-0.3-1.1-0.5-1.7-0.5c-1.3,0-2.2,0.7-2.8,2C51.7,14.4,51.7,14.6,51.7,14.9z M64.7,10.1
c1.2,0,2.4,0.5,3.4,1.4c0.1,0.2,0.2,0.4,0.2,0.5v0.1c-0.1,0.6-0.4,0.9-0.9,0.9h0c-0.2,0-0.6-0.2-1.2-0.7
c-0.4-0.2-0.9-0.3-1.3-0.3h-0.2c-1.2,0-2.1,0.6-2.7,1.9c-0.1,0.4-0.2,0.8-0.2,1.1c0,1.2,0.6,2.1,1.9,2.7
c0.4,0.1,0.8,0.2,1.2,0.2c0.7,0,1.4-0.3,2.1-0.9l0.4-0.1h0.1c0.5,0,0.8,0.3,0.9,0.9v0.1c0,0.6-0.8,1.2-2.3,1.8
c-0.5,0.1-0.9,0.1-1.1,0.1h-0.3c-1.3,0-2.5-0.6-3.6-1.8c-0.7-1-1-2-1-3c0-1.6,0.7-2.9,2.1-3.9C62.9,10.4,63.8,10.1,64.7,10.1z
M72.7,14.9l-1.1,0.7v3.3c0,0.5-0.3,0.8-0.9,0.9h-0.1c-0.5,0-0.8-0.3-0.9-0.8V7.4c0.1-0.6,0.4-0.9,0.8-0.9h0.2
c0.6,0.1,0.9,0.4,0.9,0.8v6.1c2.9-1.9,4.6-3,5.2-3.4H77c0.5,0,0.8,0.3,0.9,1c0,0.4-0.4,0.8-1.2,1.2c-1.3,0.9-2.1,1.5-2.5,1.7
l3.6,4.6l0.1,0.3v0.1c-0.1,0.6-0.4,0.9-0.9,0.9H77c-0.4,0-0.8-0.4-1.4-1.2L72.7,14.9z M83.4,10.2c1.9,0,3.3,0.9,4.3,2.6
c0.4,0.7,0.5,1.4,0.5,2.2v0.2c-0.1,0.6-0.4,0.9-0.9,0.9h-6.7c0.2,0.6,0.7,1.1,1.4,1.5c0.5,0.2,0.9,0.3,1.3,0.3
c0.5,0,1-0.2,1.7-0.5h0.3c0.6,0.1,0.8,0.4,0.8,0.9v0.1c0,0.7-0.9,1.2-2.6,1.4h-0.2c-1.7,0-3.1-0.8-4.2-2.4
c-0.4-0.8-0.6-1.6-0.6-2.4c0-1.8,0.8-3.2,2.5-4.2C81.9,10.4,82.7,10.2,83.4,10.2z M80.6,14.3h5.8c0-0.2-0.2-0.7-0.7-1.3
c-0.7-0.6-1.3-0.9-2-0.9h-0.4c-1,0-1.8,0.5-2.4,1.4C80.7,13.9,80.6,14.1,80.6,14.3z M90.8,10.1c0.6,0.1,0.9,0.4,0.9,0.8v0.1
c0.7-0.7,1.7-1,2.9-1c0.6,0,1.3,0.2,2.1,0.5c0.3,0.3,0.4,0.5,0.4,0.8v0.1c-0.1,0.6-0.4,0.9-0.9,0.9H96c-0.6-0.2-1.1-0.3-1.3-0.3
h-0.2c-1.2,0-2.1,0.6-2.6,1.9c-0.1,0.3-0.2,0.7-0.2,1.1v3.9c0,0.5-0.3,0.8-0.9,0.9h-0.1c-0.5,0-0.8-0.3-0.9-0.9v-7.8
C89.9,10.4,90.2,10.1,90.8,10.1z"/>
<path id="Shape" fill="#FFFFFF" stroke="#FFFFFF" stroke-width="0.7" d="M32.2,10c-0.1-1.5-0.9-2.8-2.3-3.9l-0.5-0.4L29,6.2
c-0.7,1.1-1,2.5-0.9,3.7c0.1,0.8,0.4,1.7,0.9,2.3c-0.4,0.3-1.7,0.9-3.4,0.9H0.4C-0.1,15.8,0.7,26,12.4,26
c8.7,0,15.8-3.9,19.1-12.1c1.1,0,3.9,0.2,5.3-2.5c0,0,0.4-0.7,0.4-0.7l-0.5-0.4C35.8,9.8,33.7,9.6,32.2,10z"/>
<rect id="Rectangle-3" x="16.6" fill="#FFFFFF" width="3.9" height="3.6"/>
<rect id="Rectangle-3_1_" x="16.6" y="4.3" fill="#FFFFFF" width="3.9" height="3.6"/>
<rect id="Rectangle-3_2_" x="12" y="4.3" fill="#FFFFFF" width="3.9" height="3.6"/>
<rect id="Rectangle-3_3_" x="7.4" y="4.3" fill="#FFFFFF" width="3.9" height="3.6"/>
<rect id="Rectangle-3_4_" x="2.8" y="8.5" fill="#FFFFFF" width="3.9" height="3.6"/>
<rect id="Rectangle-3_5_" x="7.4" y="8.5" fill="#FFFFFF" width="3.9" height="3.6"/>
<rect id="Rectangle-3_6_" x="12" y="8.5" fill="#FFFFFF" width="3.9" height="3.6"/>
<rect id="Rectangle-3_7_" x="16.6" y="8.5" fill="#FFFFFF" width="3.9" height="3.6"/>
<rect id="Rectangle-3_8_" x="21.2" y="8.5" fill="#FFFFFF" width="3.9" height="3.6"/>
</g>
</g>
</g>
</g>
</svg>
<!-- $theme: default -->
Conteneurs pour le calcul
===
......@@ -8,7 +10,43 @@ Conteneurs pour le calcul
---
<!-- footer: Conteneurs pour le calcul - Martin Souchal -->
---
#### 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>
---
# Docker et le calcul
![bg](images/docker.png)
- Docker est un micro service
- Virtualisation réseau (bridge, puis interfaces avec des IP privées)
......@@ -17,25 +55,158 @@ Conteneurs pour le calcul
- Sécurité
- daemon root
- pas d’isolation : une appli root du conteneur qui s’échappe = un attaquant root sur la machine physique
![](images/docker-filesystems-multilayer.png)
---
# Conteneurs orientés calcul
## Conteneurs usermode
### Conteneurs usermode compatibles openMPI
- Charlie-cloud
- Singularity
- udocker
- Shifter
---
# Charlie-cloud
![bg](images/charlie.png)
- Univers docker
- necessite des modifications admin : modifier configuration kernel
- necessite docker
- nécessite de modifier la configuration kernel (user.max_user_namespaces, namespace.unpriv_enable=1)
- necessite docker pour créer un conteneur
- utilisable sans droits root
- 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
---
# Singularity
# Singularity
![bg](images/singu.png)
- Aucune dépendance
- Pas de modif admin
- droits root necessaires pour certaines opérations
- utilisable avec docker
\ No newline at end of file
- 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)
\ No newline at end of file
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment