Springe direkt zu Inhalt

Programm aus Container

Einleitung

Ausführen von Software aus einem Docker-Container auf Curta

Exemplarisch wird das Holen, Umwandeln und Starten von Software aus einem Docker-Container am Beispiel eines Programmpakets für Molekulardynamik, Gromacs [1], gezeigt. Gromas ist auch lokal installiert, vgl. module av gromacs.

Singularity [2] wird für die Ausführung des Containers aufgerufen.

[1] https://www.gromacs.org/ 

[2] https://sylabs.io/guides/2.6/user-guide/singularity_and_docker.html

Vorbereitung:

Erzeugen Sie ein Verzeichnis unter /scratch, z.B. /scratch/$USER/gromacs. Wechseln Sie in das neu erzeugte Verzeichnis. cd /scratch/$USER/gromacs. Holen Sie Eingabedateien für eine Molekulardynamiksimulation mit Gromacs mit wget https://www.mpibpc.mpg.de/15101317/benchMEM.zip.Packen Sie das Archiv aus. unzip benchMEM.zip.Die inhaltliche Beschreibung der Rechnung findet sich unter https://www.mpibpc.mpg.de/grubmueller/bench

Holen des Containers von Docker Hub und Umwandeln für die lokale Ausführung

Da die Umwandlung je nach Größe merklich CPU-Zeit benötigen kann, wird bereits dieser Schritt über den Ressourcen-Manager slurm mit dem Script get_container.sh durchgeführt.

#!/bin/bash
#SBATCH --job-name=singularity_build
#SBATCH --ntasks=1
#SBATCH --mem=2gb                                                       # depends on the size of the container
#SBATCH --time=00:10:00                                                 # see above
#SBATCH --qos=standard

module load singularity                                                 # Environment for running containers

#Create a place for your containers. If you don't change the content of the container, use /scratch.
mkdir -p /scratch/$USER/images
cd /scratch/$USER/images

# Get and prepare the container
# Infos for this gromacs container https://hub.docker.com/r/gromacs/gromacs
singularity pull docker://gromacs/gromacs:2020.2

#Check the result
ls -l

Container prüfen

Script ausführen

# sbatch get_container.sh


Prüfen Sie vor dem nächsten Schritt, ob ein gromacs_2020.2.sif in /scratch/$USER/images entstanden ist. Prüfen Sie auch die Ausgabe des Jobs in slurm-XXXXXX.out.

Den Pfad zum gewünschten Programm und dessen genauen Name sowie ggf. vom lokalen System benötigte Bibliotheken und Programme können Sie der Dokumentation des Containers entnehmen.

Gromacs kann für die Beschleunigung der Rechnung durch GPUs so kompiliert werden, dass Programmteile CUDA-Bibliotheken verwenden. In diesem Beispiel wird die lokale CUDA-Installation des Clusters verwendet und die Pfade dazu werden mit dem Aufruf von module load CUDAcore/11.1.1 gesetzt.

Über den Schalter "-nv" wird die Verwendung durch Singularity für das (CUDA-fähige)-Programm Gromacs in diesem Beispiel gesteuert.

Ob alle Pfade stimmen und ein funktionsfähiges Programm gefunden wird, ergibt bei Gromacs ein Programmaufruf mit der Option --version.

Prüfung auf Funktionsfähigkeit des Containers und auf die gewünschte Gromacs-Version

#!/bin/bash
#SBATCH --job-name=singularity_gmx_version
#SBATCH --ntasks=1
#SBATCH --mem=1gb                                                       # depends on the size of the container
#SBATCH --time=00:00:30                                                  # see above
#SBATCH --qos=standard
#SBATCH --partition=gpu
#SBATCH --gres=gpu:1

#module load mksquashfs
module load singularity CUDAcore/11.1.1

mkdir -p /scratch/$USER/gromacs
cd /scratch/$USER/gromacs
# singularity arguments
# run
# --nv for Nvidia Cuda driver access
# --bind map filesystem into the container
singularity run  --nv --bind /scratch/$USER/gromacs:/myscratch /scratch/$USER/images/gromacs_2020.2.sif /gromacs/bin/gmx --version

Container ausführen

Im Joboutput sollte sich die GROMAS-Version finden:

grep "GROMACS version" slurm-XXXXXXX.out
GROMACS version: 2020.2

Programmaufruf mit Daten aus dem lokalen Dateisystem

Zur leichteren Umsetzbarkeit sind das Erzeugen des Arbeitsverzeichnisses sowie Holen und Auspacken der Eingabedatei enthalten. Entfernen Sie die Auskommentierung, falls Sie den Schritt zum Holen der Datei oben übersprungen haben. Zur Demonstration der Funktionsfähigkeit werden nur zwei Zeitschritte gerechnet.

#!/bin/bash
#SBATCH --job-name=singularity_gmx_version
#SBATCH --ntasks=1
#SBATCH --mem=500mb                                                       # depends on the size of the container
#SBATCH --time=00:00:10                                                     # see above
#SBATCH --qos=standard
#SBATCH --partition=gpu
#SBATCH --gres=gpu:1

module load singularity CUDAcore/11.1.1

mkdir -p /scratch/$USER/gromacs
cd /scratch/$USER/gromacs

#wget https://www.mpibpc.mpg.de/15101317/benchMEM.zip
#unzip benchMEM.zip
ls -l

# run gromacs in a singularity container
# singularity arguments
# run
# --nv for Nvidia Cuda driver access
# --bind map filesystem into the container

singularity run  --nv --bind /scratch/$USER/gromacs:/myscratch \
/scratch/$USER/images/gromacs_2020.2.sif \
/gromacs/bin/gmx \
mdrun -s /myscratch/benchMEM.tpr -nsteps 2

# Files from outside of the container, normal file system
ls -l /scratch/$USER/gromacs

Schlagwörter