Python如何在一个集群上看到12个CPU,而我通过LSF分配了4个内核?

Python如何在一个集群上看到12个CPU,而我通过LSF分配了4个内核?,python,python-3.x,multiprocessing,cluster-computing,hpc,Python,Python 3.x,Multiprocessing,Cluster Computing,Hpc,我访问了一个Linux集群,其中资源是使用LSF分配的,我认为这是一个常用工具,来自Scali()。在一个交互式队列中,我请求并获得了最大数量的核心:4。但是如果我检查Python的多处理模块看到多少个CPU,这个数字是12,即分配给我的节点的物理核的数量。看起来多处理模块在LSF应该/将施加的边界方面存在问题。这是LSF还是Python中的问题 [lsandor@iliadaccess03 peers_prisons]$ bsub -Is -n 4 -q interact sh Job <

我访问了一个Linux集群,其中资源是使用LSF分配的,我认为这是一个常用工具,来自Scali()。在一个交互式队列中,我请求并获得了最大数量的核心: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
[lsandor@iliadaccess03同龄人(监狱)$bsub-Is-N4-q
作业已提交到队列。
sh-3.2美元蟒蛇3
Python 3.2(r32:884452011年6月13日09:20:03)
[GCC 4.3.5]关于linux2
有关详细信息,请键入“帮助”、“版权”、“信用证”或“许可证”。
>>>导入多处理
>>> 
>>>多处理。cpu_计数()
12

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


在过去,我见过使用包装器脚本来处理这个问题。使用适当的设置同时设置程序和作业,然后启动的程序。

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

bsub -n 4 -R "span[hosts=1]" my_job
然后使用以下环境变量集启动my_作业,python脚本可以查询这些环境变量,以将要启动的子进程数设置为LSF分配的数目:

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

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

有点晚了,但是在@Paddy3118的答案上扩展,不需要span规范。相反,环境变量
LSB_DJOB_NUMPROC
保存分配的内核数。至少对于我可用的LSF版本(9.1.2)是这样的。

我假设python正在查看/proc/cpuinfo(或其他一些奇特的方法)来计算可用内核的数量。我怀疑LSF没有覆盖这一点(或者可能无法覆盖)。谢谢!然而,我很困惑,我还可以做些什么,然后专门要求池中的一些进程,但是(可能是不及时的?)我仍然得到了一个无法破译的错误,与我预设的4个进程相比,有更多的工作人员,看到结果,另一个错误是无关的。不过,如果能知道多处理和LSF结合起来是否有什么可以做的,那就太好了。也许我只是手动从两个站点请求相同数量的内核,然后结束。是的,这就是我在包装器脚本故事中提到的策略。