随着人工智能领域的快速发展,对于GPU性能的需求数量不断增加,需求的类型也不断增多。
NVIDIA推出的MIG结构(Multi-Instance GPU)可以将GPU进行划分,再分配给不同的应用或者用户来使用,以达到更细致的资源利用。相比于之前的以时间片进行划分的vGPU,MIG更加灵活高效。
MIG的原理是根据GPU的特性,将每张GPU卡的计算能力平均分成7份,将显存平均分成8份,然后由这些基本单元组成不同大小的GI(GPU Instance)。以NVIDIA A100为例,显存的大小为40G,最小显存单元就是5G(40G/8)。
我们可以根据需要,以这些最小运算单元为基础创建不同大小的MIG device,比如创建7个最小单元的GI,或者以每2个、3个、4个、7个最小单元为大小创建MIG device。这个大小不是随意创建的,NVIDIA 给出了可以允许的组合列表。以NVIDIA A100 GPU为例,下图是NVIDIA官方文档中给出的所有可以创建的组合类型:
如图所示,我们可以在每张A100 GPU上创建一个7个单元的MIG device,也可以同时创建一个4个单元和一个3个单元的MIG device,或者一个4个单元加一个2单元和一个1单元,等等。
如果是一个单元的MIG device,就拥有5G显存。类似的,两个单元是10G,4个单元和3个单元都是20G,7个单元的MIG则拥有全部40G显存。
由于运算单元和显存单元的数量不一致,会导致有些组合无法创建,可以参考下图:
当划分好了MIG device后,还可以进一步将每个GI里的算力根据最小计算单元进行划分,分配给不同的应用,每一个划分称为一个CI(Compute Instance)。例如,一个3个单元的GI,可以划分为3个相同的CI,或者划分为一个2个单元的CI和一个1个单元的CI。
LSF最新版本能很好地支持MIG GPU device的调度。在装有支持MIG的GPU卡的机器上,可以通过lshosts -gpu -mig看到当前GPU的MIG划分情况。
在执行作业的时候,LSF可以根据用户的需求对GPU上的MIG进行重新划分和绑定。
在提交作业的时候,通过bsub -gpu参数中的mig选项,可以指定作业使用的GI和CI大小。例如:
上图中的mig=4/4表示,作业想要得到一个4个单元的GI,并且创建一个4个单元的CI给这个作业,也就是将这个4单元的MIG device完全分配给这个作业使用。当作业执行起来以后,我们通过bjobs -l -gpu可以看到作业分配到的GPU:
我们看到,作业分配到了一个大小为4的GI,和大小为4的CI。这里的GI和CI信息中,斜杠前面的是设备起始编号,后面的是设备大小。比如,0/4表示从第一个单元开始,大小为4单元。而我们提交作业时指定了-n2,表示有2个task,但是MIG device只有一个,所以是由这两个task共用这个device。
同时,我们在lshosts -gpu -mig中也会看到GPU的MIG信息的变化:
我们看到,MIG device从刚才的7个变为了4个,一个为4g.20gb的、大小为4单元的GI,还有3个还是原始大小。
如果我们在提交作业的时候指定mig=3/2, 则表示创建一个大小为3的GI,但是只分配一个大小为2的CI给这个作业,这样,还剩下一个CI可以分配给其它作业。
例如,我们先提交第一个mig=3/2的作业:
当作业运行起来以后,我们看到,由于0-3单元上之前的作业已经创建了一个大小为4的GI,所以这个新的GI从单元4开始创建,大小为3个单元,而CI也是从单元4开始,但是只分配2个CI给这个作业。
再提交一个mig=3/1的作业:
这一次,GI还是复用刚才第二个作业创建的GI,但是第三个作业得到的CI是从单元5开始大小为1的CI。
这个时候,我们通过lshosts -gpu -mig也可以看到我们创建了3个device,除了第一个作业的4g.20gb外,还创建了一个3g.20gb的GI,同时这个GI被划分成了两个CI 。
我们这次提交一个4个task的作业,但是使用mig=2/1。
因为这次GPU的数量也是4(上图中的“num=4”),所以会为每个task分配一个MIG device,这样,LSF就会创建2个大小为2的GI,同时把每个GI各划分成两个CI,每个task只分配一个CI:
我们看到,这一次是使用单元0和1,以及单元4和5来创建2个大小为2的GI,同时创建了4个CI,并且把每个CI分配给了一个task。
以上就是LSF调度MIG GPU的基本使用。实际应用中,还可以同时指定GPU和CPU affinity来同时指定作业的GPU和CPU需求,有兴趣的读者可以参考IBM相关文档,或发邮件与我们交流。
欢迎关注下方微信公众号【HPC常青园】,共同交流HPC集群管理经验和最佳实践。如果您有关于HPC集群的具体需求,欢迎邮件沟通交流:hpc@ivyent.cn。