Sign inSign up
mrbayes-beagle-cuda-mpi logo

ccervantess/mrbayes-beagle-cuda-mpi

By ccervantess

•Updated 5 months ago

MrBayes con MPI y BEAGLE compilado con CUDA para ejecutar análisis filogenéticos bayesianos.

Image
0

65

ccervantess/mrbayes-beagle-cuda-mpi repository overview

⁠MrBayes + MPI + BEAGLE CUDA en Docker/Apptainer

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.

⁠Imagen probada en GPU

Esta imagen fue probada exitosamente en un nodo con GPUs:

  • NVIDIA Tesla V100-PCIE-32GB

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

⁠Versiones incluidas

La imagen contiene:

  • MrBayes 3.2.7
  • BEAGLE 3.1.2
  • OpenMPI 4.1.2
  • CUDA Toolkit 12.4.1
  • Compilación para arquitectura CUDA sm_70

La arquitectura sm_70 corresponde a GPUs NVIDIA Volta, como la Tesla V100.

⁠Versiones disponibles

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.

⁠Programas incluidos

La imagen incluye:

  • mb
  • mrbayes
  • mpirun
  • BEAGLE con backend CUDA
  • OpenMPI

Tambié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.

⁠Uso con Docker

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

⁠Uso con Apptainer

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

⁠Configuración recomendada en MrBayes

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 en Slurm con Apptainer

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

⁠Notas importantes

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.

⁠Reproducibilidad

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.

⁠Mantenedor

Cristian Cervantes Unidad de Síntesis en Sistemática y Evolución Instituto de Biología Universidad Nacional Autónoma de México

⁠Licencia

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.

Tag summary

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