Используйте переменную Bash в сценарии SLURM sbatch

Я пытаюсь получить значение из другого файла и использовать его в сценарии отправки SLURM. Однако я получаю сообщение об ошибке, что значение не является числовым, другими словами, оно не разыменовывается.

Вот сценарий:

#!/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

Когда я запускаю его как обычный скрипт оболочки Bash, он правильно печатает количество процедур и делает правильный mpirun вызов. Таким образом awk Команда правильно анализирует количество процедур, а переменная разыменовывается, как и ожидалось.

Однако, когда я отправляю это в SLURM, используя:

sbatch myScript.sh

Я получаю ошибку:

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

Может кто-нибудь помочь с этим?

2 ответа

Решение

Это не сработает. Что происходит, когда вы бежите

sbatch myscript.sh

заключается в том, что slurm анализирует скрипт для этих специальных строк #SBATCH, генерирует запись задания, где-то сохраняет пакетный скрипт. Пакетный скрипт выполняется только позже, когда выполняется задание.

Поэтому вам нужно немного по-другому структурировать рабочий процесс и сначала рассчитать количество необходимых вам процедур, прежде чем отправлять задание. Обратите внимание, что вы можете использовать что-то вроде

sbatch -n $numProcs myscript.sh

вам не нужно автоматически генерировать скрипт (также, mpirun должен иметь возможность автоматически получать число процедур в вашем выделении, не нужно использовать "-np").

Slurm прекращает обработку директив в первой строке исполняемого кода скрипта. Для пользователей, чьи директивы не зависят от кода, который они пытаются запустить над этими директивами, просто поместите #SBATCH линии вверху.

См. Другой ответ для обходного пути / решения, если, как и в случае с OP, ваши параметры sbatch зависят от команд, которые вы разместили над ними.

Пакетный сценарий может содержать параметры, которым предшествует "#SBATCH" перед любыми исполняемыми командами в сценарии. sbatch прекратит обработку дальнейших директив #SBATCH, как только в сценарии будет достигнута первая строка без комментариев, не содержащая пробелов.

Из sbatch docs , мой акцент.

Другие вопросы по тегам