#perl #slurm #sbatch
#perl #slurm #sbatch
Вопрос:
Я получил сценарий Perl, который, по-видимому, вызывается из сценария SBATCH для отправки в качестве задания на компьютерный кластер, управляемый SLURM. Сценарий старый, и мне еще предстоит лучше познакомиться с Perl. Кроме того, сценарий Perl используется в качестве оболочки для вызова исполняемого mpiexec_mpt
файла.
Но всякий раз, когда я это делаю sbatch sbatch_submission
, сценарий Perl выполняется компьютерным узлом, но я не получаю никаких выходных данных или выполнения system()
метода — или я делаю, но я не знаю, где он находится.
Я знаю, что Perl выполняется SBATCH, потому что я получил сообщение об ошибке, что он не смог найти модуль, поэтому я вручную указал Perl на путь к библиотеке, используя -l
флаг, как показано ниже. Но после этого я не получаю никаких выходных данных.
Сценарий SBATCH и сценарий perl приведены ниже:
СЦЕНАРИЙ SBATCH
1 #!/bin/bash
2 #SBATCH --job-name=job_submission
3 #SBATCH --output=output_perl.run
4 #SBATCH --error=error_perl.run
5 #SBATCH -n 2 # request 2 cores
6 #SBATCH --constraint=intel
7
8 # Load Needed Modules:
9 module load mpt
10
11 # Set-up environment for perl:
12
13
14
15 # Running perl script:
16 echo "Calling simple hello_world.c with perl (sbatch)"
17
18 perl input_perl.pl 1> perl_in.stdout 2> perl_in.stderr # edit after
# suggestions
19 echo "Done with perl script (sbatch)"
20
ВВОД PERL
1 #!/usr/bin/perl -w
2 use strict;
3 use warnings;
4 use diagnostics;
5 use List::MoreUtils qw(indexes); ## edit after suggestions
6 system("echo this is your hostname:");
7 system("hostname");
8 system("mpiexec_mpt -np 2 hello_world");
9 print "Done executing hello world! from within perl script!n"
ВЫВОД ИЗ STDERR
1 Can't locate List/MoreUtils.pm in @INC (@INC contains: /usr/lib64/perl5/vendor_perl/List /usr/local/lib64/perl5 /usr/local/share/perl5 /usr/lib64/perl5/vendor_perl / usr/share/perl5/vendor_perl /usr/lib64/perl5 /usr/share/perl5 .) at input_perl.pl line 5.
Помимо выходных данных, приведенных выше, выходные файлы: perl.output и output_perl.run пусты.
Я подозреваю, что мне чего-то не хватает в отношении применимости system()
метода в Perl, а также того, как указать Perl, куда отправлять его выходные данные при работе с slurm. Я также пытался сгенерировать .txt-файл с помощью Perl-скрипта, но когда я запускаю его с SBATCH, файл .txt не генерируется. У меня нет проблем с запуском perl_input.pl без использования скрипта SBATCH в качестве оболочки: например: . perl perl_input.pl
Дополнительная информация, исполняемый файл hello_world написан на C, и я протестировал его независимо, и он запускается. Это простая MPI-программа, в которой перечислены ранги и размер. Я не думаю, что это проблема.
Независимо и локально запускаются скрипты Perl и C, проблемы возникают, когда я использую SBATCH.
Комментарии:
1. Начните с первого запуска вашего perl-скрипта
perl_input.pl
. Если это работает, исправьте свою$PERLIB
переменную, если вам это нужно, и экспортируйте ее. Он не должен отображаться междуperl
и другими аргументами. И, вероятно, его следует вызыватьPERL5LIB
, а неPERLIB
.2.
system()
не печатается в стандартный вывод, поэтому перенаправление вывода на> perl.output
бессмысленно. Тем не менее3. @TLP Re »
system()
не выводит на стандартный вывод», но инструменты, выполняемые с помощьюsystem
might…4. @ikegami: Я отредактировал вопрос, но отсюда у меня появилась идея: perlmaven.com /…
5. Вы имеете в виду, что находится в разделе под названием «-I в командной строке (это заглавная буква i) «? (Курсив мой)
Ответ №1:
Я не уверен, что это решение, но это то, что сработало для меня.
- В итоге я переустановил perl, используя инструкции здесь:
https://learn.perl.org/installing/unix_linux.html
Я работаю с компьютерного кластера, поэтому с используемой мной установкой perl может что-то происходить. Похоже, что вызов модуля, который вызывал проблему, установлен, но perl не может его найти, когда я вызываю скрипт из SBATCH.
- Я установил необходимый мне модуль: List::MoreUtils следующим образом:
perl -MCPAN -Mlocal::lib -e 'install List::MoreUtils'
Ссылка: https://www.perlmonks.org/?node_id=1117597
- Вышел из системы, а затем начал новый сеанс. Новая установка perl использует файл bashrc, который автоматически обновляет версию perl до только что установленной. Поэтому всякий раз, когда вы запускаете perl-скрипт, вы не используете старую установку.
- После этого я установил переменную PERL5LIB в путь, где находится MoreUtils, и все заработало.