LSF实践专题(2):关于bsub -n的正确理解

 目录

LSF的slot概念

串行作业指定-n的行为分析

并行作业指定-n的行为分析


不少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官方文档:

IBM Documentation

欢迎关注下方微信公众号【HPC常青园】,共同交流HPC集群管理经验和最佳实践。如果您有关于HPC集群的具体需求,欢迎邮件沟通交流:hpc@ivyent.cn。

HPC常青园

  • 20
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Ivyent

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值