1

我访问了一个使用 LSF 分配资源的 Linux 集群,我认为这是一个常用工具,来自 Scali ( http://www.scali.com/workload-management/high-performance-computing )。在一个交互式队列中,我询问并获得了最大内核数:4。但是如果我检查 Python 的多处理模块看到多少 cpu,数字是 12,即我被分配到的节点的物理内核数。看起来多处理模块在考虑 LSF 应该/将强加的界限方面存在问题。这是 LSF 或 Python 中的问题吗?

[lsandor@iliadaccess03 peers_prisons]$ bsub -Is -n 4 -q interact sh
Job <7408231> is submitted to queue <interact>.
<<Waiting for dispatch ...>>
<<Starting on heroint5>>
sh-3.2$ python3
Python 3.2 (r32:88445, Jun 13 2011, 09:20:03) 
[GCC 4.3.5] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import multiprocessing
>>> 
>>> multiprocessing.cpu_count()
12
4

3 回答 3

1

没问题,尽管您的程序应该尊重排队系统分配给它的资源量,正如您所意识到的那样,这可能远低于 100%。我不相信 LSF 有操作系统级别的钩子来强制合规性,也不应该这样做。

在过去,我看到这个是用包装脚本处理的。使用适当的设置同时设置程序和作业,然后启动它的一种。

于 2011-09-16T20:55:39.267 回答
1

派对有点晚了,但扩展了@Paddy3118 的答案,不需要跨度规范。相反,环境变量LSB_DJOB_NUMPROC保存分配的核心数。至少它适用于我可用的 LSF 版本(9.1.2)。

于 2015-07-09T16:52:47.033 回答
0

如果您使用 -n 选项向 lsf 提交以说明您想要多少个处理器,然后使用span以下命令中的命令请求这四个处理器在同一主机上可用:

bsub -n 4 -R "span[hosts=1]" my_job

然后 my_job 使用以下环境变量集启动,您的 python 脚本可以查询这些环境变量以将要启动的子进程数设置为等于 LSF 分配的数:

LSB_HOSTS= "hostA hostA hostA hostA"
LSB_MCPU_HOSTS="hostA 4" 

(或者子进程的数量应该是 LSF - 1 分配的进程数,以解释启动子进程的 python 脚本:-)

于 2012-08-04T06:27:38.097 回答