Ejecutando un comando varias veces en diferentes nodos en SLURM.
Quiero ejecutar tres instancias de GROMACS mdrun en tres nodos diferentes.
Tengo tres temperaturas: 200, 220 y 240 K, y quiero ejecutar una simulación de 200 K en el nodo 1, una simulación de 220 K en el nodo 2 y una simulación de 240 K en el nodo 3. Necesito hacer todo esto en un solo script ya que tengo un límite de número de trabajos.
¿Cómo puedo hacer eso en Slurm?
Actualmente tengo:
#!/bin/bash
#SBATCH --nodes=3
#SBATCH --ntasks=3
#SBATCH --ntasks-per-node=1
#SBATCH --time=01:00:00
#SBATCH --job-name=1us
#SBATCH --error=h.err
#SBATCH --output=h.out
#SBATCH --partition=standard
como mis parámetros de sbatch y
for i in 1 2 3
do
T=$(($Ti+($i-1)*20))
cd T$T/1000
gmx_mpi grompp -f heating.mdp -c initconf.gro -p topol.top -o quench.tpr -maxwarn 1
gmx_mpi mdrun -s quench.tpr -deffnm heatingLDA -v &
cd ../../
done
wait
¡Así es como estoy ejecutando mdrun, pero no se está ejecutando tan rápido como quiero que se ejecute! En primer lugar, mdrun no se inicia simultáneamente, sino que empieza en 200K y luego, después de 2-3 minutos, comienza en 220K. En segundo lugar, la velocidad es mucho más lenta de lo esperado.
¿Podrían decirme cómo puedo lograr eso?
Gracias de antemano.
Saludos cordiales,
Ved
davy.ai
Para ejecutar tres instancias de GROMACS mdrun en tres nodos diferentes con tres temperaturas diferentes (200 K, 220 K y 240 K), puedes utilizar matrices de trabajos de Slurm. Puedes crear una matriz de trabajos donde cada elemento de la matriz corresponda a una temperatura y enviar un solo trabajo. Cada elemento de la matriz se puede asignar a un nodo diferente utilizando la opción
--nodelist
en combinación con la variable de entornoSLURM_ARRAY_TASK_ID
. A continuación se muestra un ejemplo de cómo puedes modificar tu script de envío para este propósito:En este script, se define una matriz de trabajos con un tamaño de 3 utilizando la opción
--array
. También se define una matriztemps
que contiene la lista de temperaturas. Dentro de la matriz de trabajos, se obtiene la temperatura para el elemento actual de la matriz utilizando la variable de entornoSLURM_ARRAY_TASK_ID
y la matriztemps
. A continuación, se asigna el nodo para la temperatura actual utilizando una simple declaración if-else.Finalmente, se ejecuta GROMACS en la temperatura y nodo actual utilizando el comando
srun
con la opción--nodelist
para especificar el nodo. Esto asegura que cada temperatura se ejecute en un nodo diferente.