目录
不少LSF用户对于bsub的-n选项存在误解,将-n当作是指定作业占用CPU个数的选项。实际上,bsub的-n选项是为并行作业(一般指的是MPI程序)设计的,-n指定的是并行作业创建的task数量。1个task需要使用1个slot,所以-n指定的值也就是作业使用的slot数。
串行作业(非MPI程序),指定-n只是起到占用slot的作用,并不会预留和分配CPU。
LSF的slot概念
LSF的slot是一个逻辑概念,是LSF作业调度的基本单位。slot数目可以任意设置,默认与节点的CPU core数相同。节点如果没有可用slot,就会被置为closed状态,作业不会被分发到这样的节点上运行。
串行作业指定-n的行为分析
如果串行作业指定了-n,我们可以说这个作业占用了这些slot,但这个作业并不会启动相应数量的task进程。以下面这个作业为例:
bsub -n 4 sleep 100
我们知道,sleep命令并不是一个MPI程序,因此尽管这个作业指定了-n 4,但是最终也只会启动一个sleep进程。由于sleep命令不消耗CPU,所以这个作业实际占用的CPU数可以看作是0。
另一方面,串行作业并不能跨节点运行,所以如果LSF为这个作业分配了多个计算节点,那么也只有第一个节点(一般称为头节点)会启动作业进程,其它节点虽然分配了slot,却不会运行任何进程。例如:
bsub -n 4 -R "span[ptile=2]" sleep 100
LSF会为这个作业分配2个计算节点,每个计算节点分配2个slot,但只有第一个节点运行一个sleep进程,另外一个节点不会运行任何进程,造成第二个节点的2个slot浪费(第一个节点也浪费了1个slot)。
从上述分析得知,对于非MPI程序,提交作业时指定-n选项并不会帮助作业占用CPU而运行的更快。如果想让作业独占某些CPU运行,可以使用LSF的affinity选项。后面会专题介绍。
并行作业指定-n的行为分析
并行作业一般是指MPI作业,作业通过mpirun或mpiexec创建task进程,task进程的数量由bsub -n指定。task进程之间通过MPI协议通信,task在同一个计算节点,也可以跨不同节点。常见的MPI软件有OpenMPI,Intel MPI,MPICH,PMPI等。
接下来,我们通过LSF提供的blaunch命令来创建一个并行作业。需要指出的是,这里我们用sleep作为例子,实际情况下,这通常是一个MPI程序。
$ bsub -n 4 -R "span[ptile=2]" blaunch sleep 1000
Job <3144> is submitted to default queue <normal>.
$ bjobs
JOBID USER STAT QUEUE FROM_HOST EXEC_HOST JOB_NAME SUBMIT_TIME
3144 user1 RUN normal host1 host2 *leep 1000 Jul 27 11:24
host2
host3
host3
$ bjobs -l 3144
...
HOST: host2
MEM: 4 Mbytes; SWAP: 0 Mbytes; CPU_TIME: 0 seconds
PGIDs: 15599
PIDs: 15599 15604 15606 15609
HOST: host3
MEM: 0 Mbytes; SWAP: 0 Mbytes; CPU_TIME: 0 seconds
PGIDs: 6893 6894
PIDs: 6893 6894
...
查看host2节点上的进程树:
$ pstree -p 29612
sbatchd(29612)───res(15599)─┬─1627356272.3144(15604)───blaunch(15606)
└─{res}(15605)
$ pstree -p 8864
res(8864)─┬─eauth(30451)
└─res(15612)─┬─sleep(15613)
└─sleep(15614)
查看host3节点上的进程树:
$ pstree -p 8728
res(8728)─┬─eauth(11100)
└─res(6892)─┬─sleep(6893)
└─sleep(6894)
可以看到host2是这个作业的头结点,blaunch在host2和host3两个计算节点共创建了4个task,每个task都是一个sleep进程。
目前不少MPI软件都通过blaunch和LSF做了集成,因此在提交LSF作业时,除了可以用mpirun或mpiexec来提交,也可以通过blaunch来提交。
关于bsub -n选项的详细解释,可以参考IBM官方文档:
欢迎关注下方微信公众号【HPC常青园】,共同交流HPC集群管理经验和最佳实践。如果您有关于HPC集群的具体需求,欢迎邮件沟通交流:hpc@ivyent.cn。