2015-04-22 8 views
4

Могу ли я отправить «однострочные» в SLURM?Есть ли «однострочный» для подачи многих заданий на SLURM (аналогично LSF)?

Использование bsub из LSF и стандартной утилиты Linux xargs, я легко могу представить отдельное задание для разжатия всех файлов в каталоге:

ls *.gz | sed 's/.gz$//g' | xargs -I {} bsub 'gunzip -c {}.gz > {}' 


Использования Слермы, я думал, что srun или sbatch будет работать, но безрезультатно:

ls *.gz | sed 's/.gz$//g' | xargs -I {} srun 'gunzip -c {}.gz > {}' 
gzip: srun: error: compute-node-01: task 0: Exited with exit code 1 
stdin: unexpected end of file 

ls *.gz | sed 's/.gz$//g' | xargs -I {} sbatch 'gunzip -c {}.gz > {}' 
sbatch: error: Unable to open file gunzip -c naive_S1_L001_R1_001.fastq.gz > naive_S1_L001_R1_001.fastq 

я видел bsub от LSF listed as equivalent до sbatch от Слерма, но до сих пор кажется, что они эквивалентны только для отправки подавших файлов сценарий:

    SLURM     LSF 
        --------------------  ------------------ 
Job Submission sbatch [script_file]  bsub [script_file] 

Есть ли другой способ представить «один-лайнер» работу с Слермой?

ответ

5

Попробуйте использовать опцию обертки sbatch. Что-то вроде следующего:

ls *.gz | sed 's/.gz$//g' | xargs -I {} sbatch --wrap="gunzip -c {}.gz > {}" 


На странице человека для sbatch:

--wrap=<command string> 
     Sbatch will wrap the specified command string in a simple "sh" shell 
     script, and submit that script to the slurm controller. When --wrap is 
     used, a script name and arguments may not be specified on the command 
     line; instead the sbatch-generated wrapper script is used. 
+0

Это прекрасно работает! Благодаря! –

1

Опираясь на Carles Fenoy's answer, я создал утилиту под названием sbatch_run.

Этот сценарий принимает имя задания и вашу команду в кавычках, а затем создает для вас сценарий (и запускает его для вас).

sbatch_run jobname 'ls -lArt > list_of_files.txt' 

Создаст следующий скрипт и запустить его для вас:

#!/bin/env bash 
#SBATCH -J jobname.sbatch 
#SBATCH -o jobname.sbatch.o_%j 
#SBATCH -e jobname.sbatch.e_%j 
#SBATCH --partition c14,general,HighMem 
#SBATCH --mem 5G 
#SBATCH --cpus-per-task 1 
#SBATCH --nodes 1 
#SBATCH --time 2-0 

ls -lArt > list_of_files.txt 

Есть варианты для установки памяти и процессора за задачи и т.д.

1

Вы можете также трубы в sbatch. Вот пример

echo '#!/bin/bash 
touch hello_slurm.txt 
' | sbatch -e err.log -o out.log 

Это может быть «вынуждены» в одну линию, а также хорошо работает вместе с xargs -n1, но я думаю, что это более удобным для чтения таким образом, чтобы проиллюстрировать эту идею.

Лично я предпочитаю heredoc здесь, потому что он добавляет дополнительную гибкость, если встроенный «однострочный» или «некоторый вкладыш» содержит одинарные кавычки (что делает его imho также более общим решением по сравнению с sbatch --wrap):

sbatch -e err.log -o out.log <<"EOF" 
#!/bin/bash 
touch 'hello_slurm2.txt' 
EOF 

Btw, так как оно было упомянуто в вопросе, а также: тот же подход работает bsub при использовании ФИ.

 Смежные вопросы

  • Нет связанных вопросов^_^