Slurm Array Job: возможен ли выходной файл на том же узле?
У меня есть вычислительный кластер с четырьмя узлами A, B, C и D и Slurm Version 17.11.7. Я борюсь с работой с массивом Slurm. У меня есть следующий скрипт bash:
#!/bin/bash -l
#SBATCH --job-name testjob
#SBATCH --output output_%A_%a.txt
#SBATCH --error error_%A_%a.txt
#SBATCH --nodes=1
#SBATCH --time=10:00
#SBATCH --mem-per-cpu=50000
FOLDER=/home/user/slurm_array_jobs/
mkdir -p $FOLDER
cd ${FOLDER}
echo $SLURM_ARRAY_TASK_ID > ${SLURM_ARRAY_TASK_ID}
Скрипт генерирует следующие файлы:
- output_ *.txt,
- error_ *.txt,
- файлы с именами в соответствии с ${SLURM_ARRAY_TASK_ID}
Я запускаю скрипт bash на моем узле вычислительного кластера A следующим образом
sbatch --array=1-500 example_job.sh
500 заданий распределены между узлами AD. Также выходные файлы хранятся на узлах AD, где выполнялось соответствующее задание массива. В этом случае, например, приблизительно 125 файлов "output_" отдельно хранятся в A, B, C и D.
Есть ли способ сохранить все выходные файлы на узле, куда я отправляю скрипт, в данном случае на узле A? То есть мне нравится хранить все 500 файлов "output_" на узле A.
2 ответа
Используйте сценарий эпилога, чтобы скопировать выходные данные туда, куда был отправлен сценарий, а затем удалите их.
Добавьте в slurm.conf:
Epilog=/etc/slurm-llnl/slurm.epilog
Скрипт slurm.epilog выполняет копирование (сделайте его исполняемым с помощью chmod +x):
#!/bin/bash
userId=`scontrol show job ${SLURM_JOB_ID} | grep -i UserId | cut -f2 -d '=' | grep -i -o ^[^\(]*`
stdOut=`scontrol show job ${SLURM_JOB_ID} | grep -i StdOut | cut -f2 -d '='`
stdErr=`scontrol show job ${SLURM_JOB_ID} | grep -i StdErr | cut -f2 -d '='`
host=`scontrol show job ${SLURM_JOB_ID} | grep -i AllocNode | cut -f3 -d '=' | cut -f1 -d ':'`
hostDir=`scontrol show job ${SLURM_JOB_ID} | grep -i Command | cut -f2 -d '=' | xargs dirname`
hostPath=$host:$hostDir/
runuser -l $userId -c "scp $stdOut $stdErr $hostPath"
rm -rf $stdOut
rm -rf $stdErr
(Переключение с PBS на Slurm без NFS или аналогичных общих каталогов — это боль.)