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.
[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