Contenedor a partir de un archivo de definición (.def)
⚙️ Crear un contenedor .sif
con soporte GPU usando un archivo .def
📄 Archivo de definición: mrbayes_gpu.def
Este archivo contiene instrucciones para:
Instalar herramientas básicas de desarrollo (g++, cmake, make, etc.).
Descargar e instalar la biblioteca BEAGLE desde su repositorio oficial.
Compilar MrBayes desde su rama
develop
con soporte para MPI y BEAGLE.Configurar variables de entorno para garantizar compatibilidad y desempeño.
Incluir
gpustat
(opcional) para monitorear uso de GPU dentro del contenedor.
🧱 Estructura y explicación de mrbayes_gpu.def
# === Apptainer definition file para MrBayes + BEAGLE + GPU ===
# Indica que se usará una imagen de Docker como base
Bootstrap: docker
# Imagen base: Ubuntu 22.04 con CUDA 12.2 (soporte GPU)
From: nvidia/cuda:12.2.0-devel-ubuntu22.04
# === Variables de entorno persistentes dentro del contenedor ===
%environment
# Configuración regional básica
export LANG=C.UTF-8
export LC_ALL=C.UTF-8
# Asegura que se encuentren las bibliotecas instaladas en /usr/local/lib
export LD_LIBRARY_PATH=/usr/local/lib:$LD_LIBRARY_PATH
export PKG_CONFIG_PATH=/usr/lib/pkgconfig:$PKG_CONFIG_PATH
# === Instrucciones para construir el contenedor ===
%post
# Evita prompts interactivos al instalar paquetes
export DEBIAN_FRONTEND=noninteractive
# Actualiza paquetes e instala herramientas de compilación y utilidades básicas
apt update && apt install -y \
\
g++ \
git \
make \
cmake \
automake \
wget \
nano \
libopenmpi-dev \
python3 \
python3-pip
curl
# (Opcional) Instala gpustat para monitorear la GPU dentro del contenedor
pip3 install gpustat
# === Instalación de la biblioteca BEAGLE ===
cd /
# Clona el repositorio oficial de BEAGLE (última versión)
git clone --depth=1 https://github.com/beagle-dev/beagle-lib.git
cd beagle-lib
mkdir build
cd build
# Compila BEAGLE sin soporte JNI ni OpenCL (solo GPU vía CUDA)
cmake -DBUILD_JNI=OFF -DBUILD_OPENCL=OFF ..
make
make install
# Asegura que las rutas a BEAGLE estén disponibles
export LD_LIBRARY_PATH=/usr/local/lib:$LD_LIBRARY_PATH
export PKG_CONFIG_PATH=/usr/lib/pkgconfig:$PKG_CONFIG_PATH
# === Instalación de MrBayes desde la rama 'develop' ===
cd /
# Clona la rama de desarrollo (última versión activa)
git clone --depth=1 --branch=develop https://github.com/NBISweden/MrBayes.git
cd MrBayes
# Configura MrBayes con soporte para MPI y BEAGLE
./configure --with-mpi --with-beagle=/usr/local
# Compila e instala MrBayes
make
make install
# === Comando por defecto al ejecutar el contenedor con 'run' ===
%runscript
echo "Contenedor MrBayes con BEAGLE y GPU listo"
# Ejecuta cualquier comando que se pase al contenedor
exec "$@"
🔹 From:
— Imagen base
From: nvidia/cuda:12.2.0-devel-ubuntu22.04
Indica la imagen base de Docker sobre la que se construirá el contenedor. En este caso:
Ubuntu 22.04 como sistema operativo
CUDA 12.2 preinstalado, necesario para usar aceleración por GPU.
🔹 %environment
— Variables de entorno persistentes
%environment export LANG=C.UTF-8 export LC_ALL=C.UTF-8 export LD_LIBRARY_PATH=/usr/local/lib:$LD_LIBRARY_PATH export PKG_CONFIG_PATH=/usr/lib/pkgconfig:$PKG_CONFIG_PATH
Esta sección define variables de entorno que estarán disponibles cada vez que el contenedor se ejecute (
shell
,exec
,run
, etc.).Es útil para asegurarte de que programas como MrBayes encuentren las librerías necesarias sin que el usuario tenga que configurar nada.
¿Qué hacen esas variables?
LANG
yLC_ALL
: Configuran la codificación del sistema (evita errores de caracteres).LD_LIBRARY_PATH
: Le dice al sistema dónde buscar bibliotecas compartidas al ejecutar programas.PKG_CONFIG_PATH
: Indica dónde buscar archivos.pc
que describen cómo compilar y vincular bibliotecas.
🔹 %post
— Instrucciones para construir el contenedor
%post
Esta sección se ejecuta durante la construcción del contenedor (
build
).Aquí se instalan paquetes, descargan programas, compilan y configuran los entornos de ejecución.
Secciones destacadas dentro de %post
:
Prevenir prompts interactivos:
export DEBIAN_FRONTEND=noninteractive
Así
apt
no pedirá confirmaciones durante la instalación.Instalar dependencias:
apt update && apt install -y ...
Se instalan herramientas de compilación, Python, MPI, etc.
Instalar software adicional:
gpustat
: Monitorea el uso de GPU (opcional).BEAGLE: Librería para acelerar análisis filogenéticos.
MrBayes: Se descarga, configura y compila con soporte para MPI y BEAGLE.
Ajustes adicionales al entorno:
Se vuelven a declarar variables comoLD_LIBRARY_PATH
para asegurar que las rutas estén accesibles durante compilación.
🔹 %runscript
— Comando por defecto
%runscript echo "Contenedor MrBayes con BEAGLE y GPU listo" exec "$@"
Esta sección define qué pasará si alguien usa
apptainer run archivo.sif
.Aquí se imprime un mensaje y luego se ejecuta cualquier comando pasado al contenedor (
exec "$@"
).
Si no incluyeras esta sección, el contenedor no sabría qué hacer por defecto al ser ejecutado con
run
.
🔧 Transformar un archivo .def
en un contenedor .sif
Una vez que tienes tu archivo de definición completo (por ejemplo: mrbayes_gpu.def
), puedes construir un contenedor ejecutable en formato .sif
(Singularity Image Format) con el siguiente comando:
apptainer build mrbayes_gpu.sif mrbayes_gpu.def
🧾 Desglose del comando:
apptainer build
: Es el comando para construir imágenes.mrbayes_gpu.sif
: Este será el archivo final, un contenedor listo para ejecutar.mrbayes_gpu.def
: Es tu archivo de definición, que contiene todas las instrucciones para crear el contenedor.
✅ ¿Qué pasa durante la construcción?
Descarga la imagen base (
nvidia/cuda:12.2.0-devel-ubuntu22.04
) desde DockerHub.Ejecuta la sección
%post
dentro de un entorno aislado.Aplica las variables de
%environment
que estarán disponibles cada vez que uses el contenedor.Incorpora
%runscript
como comando por defecto cuando lo ejecutes conrun
.
🚀 Ejemplo de uso del contenedor ya compilado
Una vez que has generado el archivo .sif
(por ejemplo, mrbayes_gpu.sif
), ya puedes ejecutar MrBayes directamente desde el contenedor con acceso a GPU y múltiples núcleos.
▶️ Ejecución simple
Si tu archivo de análisis se encuentra en la carpeta datos/
de tu sistema y se llama cactus.nex
, puedes ejecutar MrBayes así:
apptainer exec --nv --bind datos:/home mrbayes_gpu.sif mb -i /home/cactus.nex
Explicación:
--nv
: Habilita el acceso a la GPU dentro del contenedor.--bind datos:/home
: Monta la carpetadatos
de tu máquina anfitriona en/home
dentro del contenedor.mb -i
: Ejecuta MrBayes sobre el archivo.nex
.
🧱 Ejecutar en segundo plano con tmux
(recomendado)
Para mantener el análisis corriendo aunque cierres la terminal, usa tmux
:
- Abre una nueva sesión:
tmux new -s mrbayes
- Dentro de la sesión, ejecuta:
apptainer exec --nv -B datos:/home mrbayes_gpu.sif mb -i /home/cactus.nex > cactus.log 2>&1
- Para salir de
tmux
sin detener el análisis:
Presiona: Ctrl + b
seguido de d
- Para volver a tu sesión más tarde:
tmux attach -t mrbayes
- Para ver si el análisis sigue corriendo:
tail -f cactus.log
- Si necesitas cerrar el proceso manualmente:
Primero encuentra el PID:
ps aux | grep mb
Luego termina el proceso:
kill PID
🧰 ¿Qué es tmux
y cómo funciona?
tmux
(Terminal MUltipleXer) es una herramienta que te permite crear sesiones de terminal persistentes, muy útil cuando estás trabajando en servidores o corriendo procesos largos como análisis con MrBayes.
Con tmux
puedes:
Ejecutar comandos largos sin preocuparte por perder la conexión.
Desconectarte y dejar procesos corriendo.
Volver más tarde y recuperar tu sesión justo donde la dejaste.
Dividir la terminal en paneles y trabajar con múltiples ventanas en una sola sesión.
🔄 Flujo típico de uso
- Iniciar una sesión nueva
tmux new -s mrbayes
🔹 Crea una sesión llamada mrbayes
.
- Ejecutar tu análisis dentro de la sesión
apptainer exec --nv -B datos:/home mrbayes_gpu.sif mb -i /home/cactus.nex > cactus.log 2>&1
- Desconectarte sin detener el análisis
Ctrl + b luego suelta y presiona d
Esto “desconecta” la sesión (detach
) pero no detiene el proceso.
- Volver a la sesión después
tmux attach -t mrbayes
- Cerrar la sesión si ya no la necesitas
Desde dentro:
exit
tmux kill-session -t mrbayes
💡 Tip: Ver sesiones activas
tmux ls
Esto muestra todas las sesiones que están en ejecución.