我正在努力研究是否应该在工作中尝试Condor或Sun Grid Engine(或者可能是其他东西).
我们经常有很多未使用的WinXp工作站.希望我们可以使用局域网唤醒,运行所有工作,然后自动关闭.我们主要运行Matlab,Java或Python模拟monte-carlo或参数探索.
由于我对Condor的了解有限,听起来使用vm Universe可能是一种处理快照的便捷方式,而无需修改现有代码.
对于这种工作,SGE还是其他比秃鹰更好的东西?
我正在使用SGE(Sun Grid Engine)向网格提交作业.我还perlbrew用来管理我安装的Perl版本.我写了一些简短的sh脚本,用于运行perl脚本,需要特定的Perl版本(5.12.2),如下所示:
#!/bin/bash
#$-S /bin/bash
source /home/dave/.bash_profile
/home/dave/perl5/perlbrew/bin/perlbrew switch perl-5.12.2
/home/dave/scripts/proc_12.pl --in=/home/dave/in/in.store --dir=/home/dave/in/dir2 --params=/home/dave/in/params.p
Run Code Online (Sandbox Code Playgroud)
现在,当我提交单个作业时,一切正常,但是当我提交很多时,我开始收到perlbrew相关的错误消息,例如:
ln: creating symbolic link `current' to `perl-5.12.2': File exists
ln: creating symbolic link `/home/dave/perl5/perlbrew/bin/cpan' to `/home/dave/perl5/perlbrew/perls/current/bin/cpan': File exists
ln: creating symbolic link `/home/dave/perl5/perlbrew/bin/cpan2dist' to `/home/dave/perl5/perlbrew/perls/current/bin/cpan2dist': File exists
ln: cannot remove `/home/dave/perl5/perlbrew/bin/cpanp': No such file or directory
ln: cannot remove `/home/dave/perl5/perlbrew/bin/enc2xs': No such file or directory
ln: cannot remove `/home/dave/perl5/perlbrew/bin/find2perl': No such file or directory
Run Code Online (Sandbox Code Playgroud)
所以我猜这/home/dave/perl5/perlbrew/bin/perlbrew switch perl-5.12.2 …
我有一个perl脚本,它准备文件以输入二进制程序,并将二进制程序的执行提交给SGE排队系统版本6.2u2.
提交的作业带有-sync y允许父perl脚本使用waitpid函数监视已提交作业状态的选项.
这也非常有用,因为将SIGTERM发送到父perl脚本会将此信号传播给每个子节点,然后将这些信号转发到qsub,从而优雅地终止所有关联的已提交作业.
因此,能够使用此-sync y选项提交作业至关重要.
不幸的是,我一直收到以下错误:
Unable to initialize environment because of error: range_list containes no elements
请注意"容器"的拼写错误.那不是拼写错误.它只是向您展示了代码/错误消息的这个区域必须维护得多么糟糕.
产生这种错误的尝试失败提交甚至产生输出和错误文件*.e{JOBID}和*.o{JOBID}.提交完全失败了.
搜索谷歌此错误消息只会导致隐藏的留言板上的未解决的帖子.
甚至不能可靠地发生此错误.我可以重新运行我的脚本,相同的工作甚至不一定会产生错误.我尝试提交作业的节点似乎也无关紧要.
我希望有人可以解决这个问题.
因此,任何这些问题的答案都可以解决我的问题:
我有一个SGE脚本来执行一些python代码,使用qsub提交到队列.在python脚本中,我有一些打印语句(更新程序的进度).当我从命令行运行python脚本时,print语句被发送到stdout.对于sge脚本,我使用-o选项将输出重定向到文件.但是,似乎脚本只会在python脚本运行完毕后将这些文件发送到文件中.这很烦人,因为(a)我不能再看到程序的实时更新和(b)如果我的工作没有正确终止(例如,如果我的工作被踢出队列),则不会打印任何更新.每次我想打印一些东西时,如何确保脚本正在写入文件,而不是在最后将它们全部混合在一起?
我需要在Google Compute Engine上设置并运行"令人尴尬"的并行作业.我正在寻找工具来促进这一点.
在EC2上,我使用MIT的Starcluster来设置集群,然后将作业提交给SGE.
Google Compute Engine还有类似的工具吗?
如果没有,我可能会手动设置一个Condor Cluster来完成这些工作.嗡嗡杀人.
sungridengine embarrassingly-parallel condor google-compute-engine starcluster
我正在努力向SGE提交工作.它过去一直以同样的方式为我工作.相反,所有工作都停留在qw状态.
"qstat -g c"输出:
> CLUSTER QUEUE CQLOAD USED AVAIL TOTAL
> all.q 0.38 0 160 1920
> gpu6.q -NA- 0 0 4
> par6.q 0.38 750 135 1800
> seq6.q 0.41 103 170 416
> smp3.q 1.01 0 0 96
Run Code Online (Sandbox Code Playgroud)
"qstat"输出看起来总是如此.
谷歌搜索只给了我一些根本访问权限的提示,这是我没有的.有人建议吗?
谢谢.
编辑:作业通过"qsub -q seq6.q scriptname"或smp3.q或par6.q提交.
就我所见,"qstat -j jobid"并没有什么特别之处:
job_number: 2821318
exec_file: job_scripts/2821318
submission_time: Wed Mar 4 12:07:15 2015
owner: username
uid: 31519
group: dch
gid: 1150
sge_o_home: /home/hudson/pg/username
sge_o_log_name: username
sge_o_path: /gpfs/hamilton6/apps/intel_comp_2014/composer_xe_2013_sp1.2.144/bin/intel64:/usr/local/bin:/bin:/usr/bin:/usr/lpp/mmfs/bin:/usr/local/Cluster-Apps/sge/6.1u6/bin/lx24-amd64:/panfs/panasas1.hpc.dur.ac.uk/apps/nag/fll6a21dpl/scripts
sge_o_shell: /bin/tcsh
sge_o_workdir: /panfs/panasas1.hpc.dur.ac.uk/username/path
sge_o_host: …Run Code Online (Sandbox Code Playgroud) 我知道如何在 Jenkins 上运行 bash 脚本。但是,如果我使用 qsub 将 bash 脚本提交到 OGE 系统,Jenkins 如何知道我的作业是否终止?
我有一个qlogin像这样的现有工作:
job-ID prior name user state submit/start at queue
-------------------------------------------------------------------------
3530770 0.50500 QLOGIN jlsmith r 10/15/2012 14:02:07 mri.q@compute-0-29.local
Run Code Online (Sandbox Code Playgroud)
上面的工作是在linux中使用标准的qlogin命令提交的:
$ qlogin
Run Code Online (Sandbox Code Playgroud)
我想要做的是执行另一个qlogin,以便进程在具有上述Job-ID的同一节点中运行3530770.
我的想法是,如果在top命令中正确完成,我可以看到提交给上述作业ID的相同运行过程.
有办法吗?
我正在处理 SGE 集群,但在使用 qsub 电子邮件通知系统时遇到了一些问题。我的所有工作都运行良好,但我似乎无法修改默认行为以仅在中止工作时通知。-M 标志工作正常,当作业中止时我会收到一封电子邮件,但是我想在作业开始、结束、中止或暂停时收到一封电子邮件。我在我的脚本中使用了以下标志(以及更多),我错过了什么愚蠢的东西吗?
#!/bin/bash
#$ -S /bin/bash
#$ -M email@server
#$ -m beas
program
Run Code Online (Sandbox Code Playgroud)
当我尝试以下操作时它也不起作用:
qsub -M email@server -m baes script.sh
Run Code Online (Sandbox Code Playgroud)
这是我应该与我的集群系统管理员一起解决的问题,还是我做错了什么?
谢谢你的帮助。
如果在 slurm 集群上运行阵列作业,如何重新启动失败的工作作业?
在 Sun Grid Engine 队列中,可以#$ -r y向作业文件添加内容以指示作业失败后应重新启动 — Slurm 中与此标志等效的是什么?