Utiliser la variable Bash dans le script sbatch SLURM

J’essaie d’obtenir une valeur d’un autre fichier et l’utiliser dans un script de soumission SLURM. Cependant, je reçois une erreur que la valeur est non numérique, en d’autres termes, elle n’est pas déréférencée.

Voici le script:

#!/bin/bash # This reads out the number of procs based on the decomposeParDict numProcs=`awk '/numberOfSubdomains/ {print $2}' ./meshModel/decomposeParDict` echo "NumProcs = $numProcs" #SBATCH --job-name=SnappyHexMesh #SBATCH --output=./logs/SnappyHexMesh.log # #SBATCH --ntasks=`$numProcs` #SBATCH --time=240:00 #SBATCH --mem-per-cpu=4000 #First run blockMesh blockMesh #Now decompose the mesh decomposePar #Now run snappy in parallel mpirun -np $numProcs snappyHexMesh -parallel -overwrite 

Lorsque je l’exécute en tant que script shell Bash normal, il imprime correctement le nombre de procs et effectue le bon appel mpirun . Ainsi, la commande awk parsing correctement le nombre de procs et la variable est déréférencée comme prévu.

Cependant, lorsque je soumets cela à SLURM en utilisant:

 sbatch myScript.sh 

Je reçois l’erreur:

 sbatch: error: Invalid numeric value "`$numProcs`" for number of tasks. 

Quelqu’un peut-il aider avec cela?

Cela ne fonctionnera pas. Qu’est-ce qui se passe quand vous courez

sbatch myscript.sh

est que slurm parsing le script pour ces lignes spéciales #SBATCH, génère un enregistrement de travail, stocke le script batch quelque part. Le script de traitement par lots n’est exécuté que plus tard, lorsque le travail est exécuté.

Vous devez donc structurer votre stream de travail d’une manière légèrement différente et calculer d’abord le nombre de processus dont vous avez besoin avant de soumettre le travail. Notez que vous pouvez utiliser quelque chose comme

sbatch -n $numProcs myscript.sh

, vous n’avez pas besoin de générer automatiquement le script (de plus, mpirun devrait pouvoir obtenir automatiquement le nombre de procs dans votre allocation, sans utiliser “-np”).