MrBayes con MPI y BEAGLE compilado con CUDA para ejecutar análisis filogenéticos bayesianos.
65
Este repositorio contiene imágenes de contenedor para MrBayes compilado con soporte para MPI y BEAGLE, incluyendo aceleración por CUDA, para ejecutar análisis filogenéticos bayesianos aprovechando GPUs NVIDIA.
MrBayes permite realizar inferencia filogenética bayesiana mediante MCMC, incluyendo análisis filogenéticos con modelos de sustitución molecular, particiones, cadenas múltiples, corridas independientes y comparación de hipótesis evolutivas.
MPI permite ejecutar MrBayes en modo paralelo, distribuyendo procesos para acelerar análisis o ejecutar múltiples cadenas/corridas de forma eficiente en ambientes HPC.
BEAGLE es una biblioteca de alto rendimiento que acelera el cálculo de verosimilitudes filogenéticas y permite utilizar procesadores paralelos, incluyendo GPUs NVIDIA.
Las imágenes están pensadas para facilitar el uso de MrBayes + MPI + BEAGLE + CUDA en servidores, estaciones de trabajo y ambientes HPC mediante Docker o Apptainer.
Esta imagen fue probada exitosamente en un nodo con GPUs:
La prueba confirmó que MrBayes fue compilado con BEAGLE y MPI:
Version: 3.2.7
Features: SSE AVX FMA Beagle MPI
También confirmó que BEAGLE reconoce las GPUs Tesla V100 como recursos disponibles:
Available resources reported by beagle library:
Resource 0:
Name: CPU
Resource 1:
Name: Tesla V100-PCIE-32GB
Flags: PROCESSOR_GPU PRECISION_DOUBLE PRECISION_SINGLE ...
Resource 2:
Name: Tesla V100-PCIE-32GB
Flags: PROCESSOR_GPU PRECISION_DOUBLE PRECISION_SINGLE ...
Resource 3:
Name: Tesla V100-PCIE-32GB
Flags: PROCESSOR_GPU PRECISION_DOUBLE PRECISION_SINGLE ...
BEAGLE version: 3.1.2
La imagen contiene:
sm_70La arquitectura sm_70 corresponde a GPUs NVIDIA Volta, como la Tesla V100.
Etiqueta principal recomendada:
ccervantess/mrbayes-beagle-cuda-mpi:3.2.7-gpu-v100
Etiqueta más descriptiva:
ccervantess/mrbayes-beagle-cuda-mpi:3.2.7-beagle3.1.2-cuda12.4-mpi-v100
Para análisis reproducibles se recomienda usar siempre etiquetas específicas y evitar depender exclusivamente de latest.
La imagen incluye:
mbmrbayesmpirunTambién incluye un script de diagnóstico:
test_mrbayes_beagle_gpu
Este script permite verificar rápidamente si la imagen detecta NVIDIA-SMI, MrBayes, OpenMPI, BEAGLE y los recursos GPU disponibles.
Verificar la versión de MrBayes:
docker run --rm \
ccervantess/mrbayes-beagle-cuda-mpi:3.2.7-gpu-v100 \
-v
Ejecutar el diagnóstico completo:
docker run --rm --gpus all \
--entrypoint test_mrbayes_beagle_gpu \
ccervantess/mrbayes-beagle-cuda-mpi:3.2.7-gpu-v100
Ejecutar MrBayes con un archivo Nexus:
docker run --rm --gpus all \
-v "$PWD":/data \
-w /data \
ccervantess/mrbayes-beagle-cuda-mpi:3.2.7-gpu-v100 \
analisis.nex
Ejecutar una prueba con MPI dentro del contenedor:
docker run --rm --gpus all \
--entrypoint mpirun \
ccervantess/mrbayes-beagle-cuda-mpi:3.2.7-gpu-v100 \
--oversubscribe -np 2 mb -v
Descargar la imagen desde Docker Hub:
apptainer pull mrbayes_3.2.7_mpi_beagle_cuda12_v100.sif \
docker://ccervantess/mrbayes-beagle-cuda-mpi:3.2.7-gpu-v100
Verificar la versión de MrBayes:
apptainer exec --cleanenv \
mrbayes_3.2.7_mpi_beagle_cuda12_v100.sif \
mb -v
Verificar que MrBayes detecta BEAGLE y las GPUs:
apptainer exec --cleanenv --nv \
mrbayes_3.2.7_mpi_beagle_cuda12_v100.sif \
bash -lc 'printf "showbeagle;\nquit;\n" | mb'
Ejecutar el diagnóstico completo:
apptainer exec --cleanenv --nv \
mrbayes_3.2.7_mpi_beagle_cuda12_v100.sif \
test_mrbayes_beagle_gpu
Probar MPI con 2 procesos:
apptainer exec --cleanenv --nv \
mrbayes_3.2.7_mpi_beagle_cuda12_v100.sif \
mpirun --oversubscribe -np 2 mb -v
Ejecutar un análisis con MrBayes:
apptainer exec --cleanenv --nv \
mrbayes_3.2.7_mpi_beagle_cuda12_v100.sif \
mb analisis.nex
Ejecutar un análisis con MPI dentro del contenedor:
apptainer exec --cleanenv --nv \
mrbayes_3.2.7_mpi_beagle_cuda12_v100.sif \
mpirun --oversubscribe -np 2 mb analisis.nex
Dentro del bloque mrbayes del archivo Nexus se puede activar BEAGLE y seleccionar GPU con instrucciones como:
begin mrbayes;
set usebeagle=yes;
set beagledevice=gpu;
set beagleresource=1;
set beagleprecision=single;
set beaglescaling=dynamic;
mcmc ngen=1000000 samplefreq=1000 printfreq=1000 diagnfreq=10000 nchains=4 nruns=2;
end;
En muchos sistemas, el recurso 0 corresponde a CPU y el recurso 1 corresponde a la primera GPU detectada por BEAGLE.
Para ver los recursos disponibles:
showbeagle;
Ejemplo de script para ejecutar MrBayes + MPI + BEAGLE en una GPU NVIDIA V100:
#!/bin/bash
#SBATCH --job-name=mrbayes_v100
#SBATCH --partition=gpu_V100
#SBATCH --gres=gpu:1
#SBATCH --ntasks=2
#SBATCH --cpus-per-task=1
#SBATCH --mem=16G
#SBATCH --time=5-00:00:00
#SBATCH --output=mrbayes_v100_%j.out
#SBATCH --error=mrbayes_v100_%j.err
SIF=$HOME/mrbayes_3.2.7_mpi_beagle_cuda12_v100.sif
NEXUS=$1
echo "Nodo:"
hostname
echo "GPU asignada:"
nvidia-smi
echo "Versión de MrBayes:"
apptainer exec --cleanenv --nv "$SIF" mb -v
echo "Recursos BEAGLE:"
apptainer exec --cleanenv --nv "$SIF" \
bash -lc 'printf "showbeagle;\nquit;\n" | mb'
echo "Prueba MPI:"
apptainer exec --cleanenv --nv "$SIF" \
mpirun --oversubscribe -np "$SLURM_NTASKS" mb -v
echo "Iniciando análisis con MrBayes MPI + BEAGLE GPU..."
apptainer exec --cleanenv --nv "$SIF" \
mpirun --oversubscribe -np "$SLURM_NTASKS" \
mb "$NEXUS"
Enviar el trabajo:
sbatch run_mrbayes_v100.slurm analisis.nex
Para usar GPU con Apptainer es necesario ejecutar el contenedor con:
--nv
Sin esta opción, el contenedor puede ejecutarse, pero no tendrá acceso a las GPUs NVIDIA del sistema.
En ambientes Slurm se recomienda usar también:
--cleanenv
Esto evita que OpenMPI dentro del contenedor herede variables de Slurm/PMI/PMIx incompatibles con el OpenMPI compilado dentro de la imagen.
Para usar GPU con Docker es necesario contar con NVIDIA Container Toolkit y ejecutar la imagen con:
--gpus all
Aunque el sistema anfitrión muestre una versión de CUDA más reciente mediante nvidia-smi, la imagen utiliza CUDA Toolkit 12.4.1 internamente. Esto permite mantener un ambiente controlado y reproducible para MrBayes + MPI + BEAGLE.
Para análisis reproducibles se recomienda indicar explícitamente la etiqueta usada, por ejemplo:
ccervantess/mrbayes-beagle-cuda-mpi:3.2.7-gpu-v100
La etiqueta latest, si existe, puede cambiar con el tiempo.
Cristian Cervantes Unidad de Síntesis en Sistemática y Evolución Instituto de Biología Universidad Nacional Autónoma de México
Este contenedor integra software de terceros. Cada programa conserva su propia licencia. Se recomienda revisar las licencias individuales de MrBayes, BEAGLE, CUDA, OpenMPI y las bibliotecas incluidas antes de su redistribución o uso en producción.
Content type
Image
Digest
sha256:81bd6165a…
Size
4 GB
Last updated
5 months ago
docker pull ccervantess/mrbayes-beagle-cuda-mpi:3.2.7-beagle3.1.2-cuda12.4-mpi-v100