Как мне вызвать Perl-скрипт в SBATCH-скрипте для отправки SLURM?

#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 бессмысленно. Тем не менее print , он должен быть там.

3. @TLP Re » system() не выводит на стандартный вывод», но инструменты, выполняемые с помощью system might…

4. @ikegami: Я отредактировал вопрос, но отсюда у меня появилась идея: perlmaven.com /…

5. Вы имеете в виду, что находится в разделе под названием «-I в командной строке (это заглавная буква i) «? (Курсив мой)

Ответ №1:

Я не уверен, что это решение, но это то, что сработало для меня.

  1. В итоге я переустановил perl, используя инструкции здесь:

https://learn.perl.org/installing/unix_linux.html

Я работаю с компьютерного кластера, поэтому с используемой мной установкой perl может что-то происходить. Похоже, что вызов модуля, который вызывал проблему, установлен, но perl не может его найти, когда я вызываю скрипт из SBATCH.

  1. Я установил необходимый мне модуль: List::MoreUtils следующим образом:
 perl -MCPAN -Mlocal::lib -e 'install List::MoreUtils'
 

Ссылка: https://www.perlmonks.org/?node_id=1117597

  1. Вышел из системы, а затем начал новый сеанс. Новая установка perl использует файл bashrc, который автоматически обновляет версию perl до только что установленной. Поэтому всякий раз, когда вы запускаете perl-скрипт, вы не используете старую установку.
  2. После этого я установил переменную PERL5LIB в путь, где находится MoreUtils, и все заработало.