如何告诉Condor只将作业分派给集群上安装了"numpy"的机器?

Auf*_*ind 11 python cluster-computing job-scheduling condor

我刚刚想出了如何使用Condor在集群上的机器上发送要处理的作业.既然我们有很多机器,而不是每台机器都配置相同,我想知道:

是否有可能告诉condor只将我的作业(python脚本)发送到机器上,因为我的脚本依赖于这个包,所以机器上安装了numpy?

Pin*_*nko 7

与任何其他机器属性一样,您只需要在机器类中进行广告,然后让您的作业需要它.

要在机器类中进行广告,您可以通过添加以下内容将其硬编码到每台机器的condor配置文件中:

has_numpy = True
STARTD_EXPRS = $(STARTD_EXPRS) HAS_NUMPY
Run Code Online (Sandbox Code Playgroud)

...或者更好的是,您可以告诉Condor在运行时使用脚本动态发现它,并通过startd classad钩子公布结果.为此,has_numpy在每台机器上安装一个简单的脚本,如下所示:

#!/usr/bin/env python
try:
   import numpy
except ImportError:
   print "has_numpy = False"
else:
   print "has_numpy = True"
Run Code Online (Sandbox Code Playgroud)

...然后告诉Condor每五分钟运行一次并将结果粘贴到startd classad中,方法是将以下内容添加到机器的condor配置文件中:

HASNUMPY = /usr/libexec/condor/has_numpy
STARTD_CRON_JOBLIST = $(STARTD_CRON_JOBLIST) HASNUMPY
STARTD_CRON_HASNUMPY_EXECUTABLE = $(HASNUMPY)
STARTD_CRON_HASNUMPY_PERIOD = 300
Run Code Online (Sandbox Code Playgroud)

...然后ta-da(重新配置后)你的机器将动态检测并报告numpy是否已安装并可用于python脚本.

然后,您只需要在作业提交文件中添加相应的要求,如下所示:

Requirements = (has_numpy == True)
Run Code Online (Sandbox Code Playgroud)

...而且你的工作只能在安装了numpy的机器上运行.


Rol*_*ith -2

你需要吗?根据秃鹰手册

Condor 不需要在运行作业的计算机上拥有帐户(登录)。Condor 之所以能做到这一点,是因为它的远程系统调用技术,该技术可以捕获对磁盘文件读取或写入等操作的库调用。这些调用通过网络传输,并在提交作业的机器上执行。

对我来说,这意味着如果提交作业的机器安装了 numpy,它应该可以工作。