我访问了一个使用LSF分配资源的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发布于 2011-09-17 04:55:39
没问题,尽管您的程序应该考虑排队系统分配给它的资源量,正如您已经意识到的那样,这可能比100%少得多。我不相信LSF有操作系统级别的钩子来强制遵从性,或许也不应该。
在过去,我看到过使用包装器脚本来处理这个问题。用适当的设置同时设置一个程序和作业,然后启动它的一种方法。
发布于 2015-07-10 00:52:47
参加聚会有点晚了,但在@Paddy3118的答案上进行了扩展,不需要span规范。取而代之的是,环境变量LSB_DJOB_NUMPROC保存分配的核心数量。至少对我可用的LSF版本(9.1.2)是这样的。
发布于 2012-08-04 14:27:38
如果您使用-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脚本的进程数:-)
https://stackoverflow.com/questions/7449893
复制相似问题