如何解决如何在 SLURM 提交的 SBATCH 脚本中调用 Perl 脚本?
我收到了一个 Perl 脚本,它显然是从 SBATCH 脚本调用的,要作为作业提交给 SLURM 管理的计算机集群。脚本很旧,我还没有对 Perl 更加熟悉。此外,Perl 脚本被用作包装器以调用带有 tools
的可执行文件。
但是每当我执行 mpiexec_mpt
时,Perl 脚本由计算机节点执行,但我没有获得 sbatch sbatch_submission
方法的任何输出或执行 - 或者我有但我不知道它在哪里。
我知道 Perl 是由 SBATCH 执行的,因为我收到一个错误,它找不到模块,所以我使用 system()
标志手动将 Perl 指向库路径,如下所示。但在那之后我没有得到任何输出。
SBATCH 脚本和 perl 脚本如下:
SBATCH 脚本
-l
PERL 输入
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
STDERR 的输出
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"
除了输出文件上面的输出:perl.output 和 output_perl.run 是空的。
我怀疑我遗漏了一些关于 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 中的适用性,以及如何告诉 Perl 在使用 slurm 时将其输出发送到哪里。我也试过用 Perl 脚本生成一个 .txt 文件,但是当我用 SBATCH 运行它时,没有生成 .txt 文件。我在不使用 SBATCH 脚本作为包装器的情况下运行 perl_input.pl 没有问题:例如:system()
。
附加信息,hello_world 可执行文件是用 C 编写的,我已经对其进行了独立测试并且可以运行。它是一个简单的 MPI 程序,列出了等级和大小。不过我认为这不是问题。
Perl 和 C 脚本在本地独立运行,当我使用 SBATCH 时,问题就出现了。
解决方法
我不确定这是一个解决方案,但这对我有用。
- 最终按照此处的说明重新安装了 perl:
https://learn.perl.org/installing/unix_linux.html
我在一个计算机集群上工作,所以我使用的 perl 安装可能会发生一些问题。导致问题的模块调用似乎已安装,但当我从 SBATCH 调用脚本时,perl 找不到它。
- 我安装了我需要的模块:List::MoreUtils 如下:
perl -MCPAN -Mlocal::lib -e 'install List::MoreUtils'
链接:https://www.perlmonks.org/?node_id=1117597
-
注销然后开始新的会话。新的 perl 安装来源一个 bashrc 文件,该文件会自动将 perl 版本更新为刚刚安装的版本。因此,无论何时运行 perl 脚本,都不会使用旧安装。
-
之后,我将 PERL5LIB 变量设置为 MoreUtils 所在的路径,一切正常。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。