Как настроить bash-файл для выполнения на одном узле - PullRequest
0 голосов
/ 05 декабря 2018

Я бы хотел, чтобы ваша помощь знала, возможно ли (и если да, как) настроить файл bash ниже.


У меня есть основной скрипт Matlab main.m, который в свою очередь вызывает другой скрипт Matlab f.m.

f.m должно выполняться много раз с разными входами.

Я структурирую это как работу с массивом.

Обычно я использую следующий файл bash с именем td.sh для выполнения задания массива в HPC моего университета

#$ -S /bin/bash
#$ -l h_vmem=5G
#$ -l tmem=5G
#$ -l h_rt=480:0:0
#$ -cwd
#$ -j y

#Run 237 tasks where each task has a different $SGE_TASK_ID ranging from 1 to 237
#$ -t 1-237

#$ -N mod
date
hostname

#Output the Task ID
echo "Task ID is $SGE_TASK_ID"

/share/[...]/matlab -nodisplay -nodesktop -nojvm -nosplash -r "main; ID = $SGE_TASK_ID; f; exit"

В терминале я выполняю

  • cd в папку, в которой расположены скрипты main.m, f.m, td.sh

  • и введите в терминале qsub td.sh


Вопрос: Мне нужно изменить приведенный выше файл bash, потому что скрипт f.m вызывает солвер (Gurobi), лицензия которого - однопользовательский.Вот что мне сказали:

" Эта лицензия уже установлена ​​и работает только на узле A. Вы не сможете qsub свои сценарии, так как задания должны выполнятьсяна этом узле. Вместо этого вы должны ssh войти в узел A и запустить задание на этом узле напрямую, вместо отправки в планировщик . "

Не могли бы вы помочь мне понять, как я должен изменитьсяфайл bash выше?В частности, как я должен форсировать выполнение на узле A?

Даже если я ограничен только одним узлом, могу ли я по-прежнему распараллеливать, используя задания массива?Или задания массива по определению выполняются на нескольких узлах?

1 Ответ

0 голосов
/ 05 декабря 2018

Если вы не можете использовать свой планировщик, то вы не можете использовать его задания массива.Вам нужно будет найти другой способ распараллелить эти задания.Задания массива не выполняются на нескольких узлах по определению (но обычно они выполняются на нескольких узлах из-за доступности ресурсов).

Что касается адаптации вашего сценария, просто следуйте инструкциям, предоставленным вашими сисадминами: забудьте о SGEи запустите ваше исчисление через ssh непосредственно к узлу, который вам сказали:

date
hostname

for TASK_ID in {1..237}
do
    #Output the Task ID
    echo "Task ID is $TASK_ID"

    ssh user@A "/share/[...]/matlab -nodisplay -nodesktop -nojvm -nosplash -r \"main; ID = $TASK_ID; f; exit\""
done

Если лицензия - одноузловая и однопользовательская (но многократное одновременное выполнение), вы можете попытаться распараллелить исчисление.Вам нужно будет учесть ресурсы, доступные в узле A (количество процессоров, память ...) и ресурсы, которые вам нужны для каждого отдельного выполнения, а затем запустить одновременно как можно больше исчислений, не перегружая узел (в противном случаеони займут больше времени или даже потерпят неудачу).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...