es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

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

Tags:  

Answer

  1. Avatar for 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 entorno SLURM_ARRAY_TASK_ID. A continuación se muestra un ejemplo de cómo puedes modificar tu script de envío para este propósito:

    #!/bin/bash
    #SBATCH --nodes=3
    #SBATCH --ntasks=1
    #SBATCH --time=01:00:00                  
    #SBATCH --job-name=1us  
    #SBATCH --error=h.err
    #SBATCH --output=h.out
    #SBATCH --partition=standard  
    #SBATCH --array=1-3  # establece el tamaño de la matriz al número de temperaturas
    
    # define una matriz de temperaturas
    temps=("200" "220" "240")
    
    # obtiene la temperatura para el elemento actual de la matriz
    i=$SLURM_ARRAY_TASK_ID
    T=${temps[$i - 1]}
    
    # establece el nodo para la temperatura actual
    if [ "$i" == "1" ]; then
      node="node1"
    elif [ "$i" == "2" ]; then
      node="node2"
    else
      node="node3"
    fi
    
    # ejecuta GROMACS en la temperatura y nodo actual
    cd T_${T}/1000
    gmx_mpi grompp -f heating.mdp -c init_conf.gro -p topol.top -o quench.tpr -maxwarn 1  
    srun --nodelist=$node gmx_mpi mdrun -s quench.tpr -deffnm heatingLDA -v
    cd ../../
    

    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 matriz temps 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 entorno SLURM_ARRAY_TASK_ID y la matriz temps. 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.

Comments are closed.