如何在一个集群中看到12个cpus,我通过LSF分配了4个核心?

时间:2011-09-16 20:11:08

标签: python python-3.x multiprocessing cluster-computing hpc

我访问一个Linux集群,其中使用LSF分配资源,我认为这是一个常用工具,来自Scali(http://www.scali.com/workload-management/high-performance-computing)。在一个交互式队列中,我询问并获得了最大数量的内核:4。但是,如果我检查Python的多处理模块看到多少cpus,则数字为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

3 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:1)

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

答案 2 :(得分:0)

如果使用-n选项提交lsf来说明所需的处理器数量,然后使用span在下面的命令中使用bsub -n 4 -R "span[hosts=1]" my_job 在同一主机上使用这四个处理器的请求:

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

然后my_job启动时使用以下环境变量集,可以通过python脚本查询这些变量来设置启动的子进程数等于LSF指定的数量:

{{1}}

(或者子进程的数量应该是由LSF分配的进程数 - 1来说明启动子进程的python脚本: - )

相关问题