python - "embarrassingly parallel"在集群上使用python和PBS编程

标签 python pbs qsub embarrassingly-parallel

我有一个生成图形的函数(神经网络模型)。我希望在带有 Torque 的标准集群上使用 PBS 从 python 测试几个参数、方法和不同的输入(意味着函数的数百次运行)。

注意:我尝试了 parallelpython、ipython 等,但从未完全满意,因为我想要更简单的东西。集群处于我无法更改的给定配置中,这种集成 python + qsub 的解决方案肯定会有益于社区。

为了简化事情,我有一个简单的函数,例如:

import myModule
def model(input, a= 1., N=100):
    do_lots_number_crunching(input, a,N)
    pylab.savefig('figure_' + input.name + '_' + str(a) + '_' + str(N) + '.png')

其中 input 是表示输入的对象,input.name 是字符串,do_lots_number_crunching 可能持续数小时。

我的问题是:是否有正确的方法来转换诸如参数扫描之类的东西

for a in pylab.linspace(0., 1., 100):
    model(input, a)

进入每次调用 model 函数都会启动 PBS 脚本的“东西”?

#PBS -l ncpus=1
#PBS -l mem=i1000mb
#PBS -l cput=24:00:00
#PBS -V
cd /data/work/
python experiment_model.py

我正在考虑一个包含 PBS 模板并从 python 脚本调用它的函数,但还没有弄清楚(装饰器?)。

最佳答案

pbs_python[1] 可以解决这个问题。如果将 experiment_model.py 'a' 作为参数,你可以这样做

import pbs, os

server_name = pbs.pbs_default()
c = pbs.pbs_connect(server_name)

attopl = pbs.new_attropl(4)
attropl[0].name  = pbs.ATTR_l
attropl[0].resource = 'ncpus'
attropl[0].value = '1'

attropl[1].name  = pbs.ATTR_l
attropl[1].resource = 'mem'
attropl[1].value = 'i1000mb'

attropl[2].name  = pbs.ATTR_l
attropl[2].resource = 'cput'
attropl[2].value = '24:00:00'

attrop1[3].name = pbs.ATTR_V

script='''
cd /data/work/
python experiment_model.py %f
'''

jobs = []

for a in pylab.linspace(0.,1.,100):
    script_name = 'experiment_model.job' + str(a)
    with open(script_name,'w') as scriptf:
        scriptf.write(script % a)
    job_id = pbs.pbs_submit(c, attropl, script_name, 'NULL', 'NULL')
    jobs.append(job_id)
    os.remove(script_name)

 print jobs

[1]: https://oss.trac.surfsara.nl/pbs_python/wiki/TorqueUsage pbs_python

关于python - "embarrassingly parallel"在集群上使用python和PBS编程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3307948/

相关文章:

linux - 自动 qsub 作业完成状态通知

通过 qsub 运行 R 脚本

bash - 如何判断 PBS 脚本是由 bash 还是 qsub 调用

python - 更改 Tensorflow 中新分配变量的形状

python - 为什么我不能在一行中交换列表中的两个项目?

c++ - 为 OpenMP + MPI 应用程序定位资源

linux - 将环境变量传递给 qsub 作业

python - Qsub 作业使用集群上工作节点的子进程

python - 无法转换数据框列数据类型

python - 为什么 IPython `%timeit` 会为 O(n) 解决方案产生更慢的时间?