Я бы хотел, чтобы ваша помощь знала, возможно ли (и если да, как) настроить файл 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
?
Даже если я ограничен только одним узлом, могу ли я по-прежнему распараллеливать, используя задания массива?Или задания массива по определению выполняются на нескольких узлах?