测算HPC任务所需最优核数和内存数

高性能计算平台使用技巧之一,测算HPC任务所需最优核数和内存数

本技巧分享通过具体的示例说明如何测试获取任务所需的最优核数和内存数,以及在测试中可能遇到的问题及其解决办法。

注意:平台的每个节点最多可使用64核、每个节点最多可使用400G计算内存(大存储节点2000G)。

范例:使用VASP对Rutile-TiO2(110)表面进行结构优化的计算。

INCAR和KPOINTS文件内容,晶体结构示意图(总原子数192、真空层20Å)如下所示:

image.png



测试前的准备:

在测试前先进行计算节点状态的查看,以下为查看节点状态方法:执行sinfo命令,将会显示节点的信息,其中STATE显示为idle的节点为空闲节点,显示为mix表示节点被部分占用,alloc表示节点被全部占用。

可执行squeue查看正在执行的任务检查节点占用情况

尽量使用空闲空节点进行测试和计算,可以通过在提交脚本中指定cpu编号来指定节点进行计算。在提交脚本内加上 #SHBATCH --nodelist=cpuXX 这一行即可:

如果使用正在有计算任务的节点的剩余节点进行计算,可能会出现计算时间过长的情况。例如,同样的任务分别在空闲节点和被部分占用的节点上来进行计算对比:

我们分别使用1个节点、4和核数、256G计算内存进行同一个范例的计算(上面的R-TiO2-110表面),分别使用空闲节点01和部分使用节03/25/27/28/29/30/32/36来进行计算,提交后查看队列如下,发现只有指定节点03/29/30/36的任务开始计算了,但是节点指定节点25/27/28/32的任务还在排队,这是因为25/27/28/32节点的剩余计算内存小于提交脚本中的256G的需求,或者25/27/28/32节点的剩余计算核数小于提交脚本中的4个的需求,所以无法满足提交任务的要求导致的。如果仍需使用部分占据节点进行计算,减小计算内存或者核数占量即可。

我们来查看一下部分占用节点cpu27的任务所用的内存和核数,

执行scontrol show jobs 24597,显示该任务的相关信息为如下图所示,其占用的是编号为cpu27的节点,使用了32核数,使用了200G计算内存,剩余64-32=32核数可用,剩余400-200=200G内存可用。

我们再来查看一下部分占用节点cpu32的任务所用的内存和核数

执行scontrol show jobs 24439,显示该任务的相关信息为如下图所示,其占用的是编号为cpu32的节点,使用了61核数,使用了305G计算内存,剩余64-61=3核数可用,剩余400-305=95G内存可用。

接下来我们来对比一下空闲节点cpu01和部分占用节点cpu03/29/30/36的计算速度,如下图所示,

image.png





可以看到部分占用节点cpu03/29/30和空闲节点cpu01计算时候的速度是一样的。但是部分占用节点cpu36计算时候的速度明显是有问题的,每步计算使用的cpu time时间变长,相应的real time时间为cpu time的两倍。这可能是由于cpu36正在和别的节点并行运算,通信时间受影响所导致的。

所以大家尽量使用空闲节点进行计算,并记录好速度参数的大小。在没有空闲节点、需要使用部分占用的节点计算时,出现了速度过慢的情况,请在提交脚本内修改#SBATCH --exclude cpuXXX这一行规避相关的节点,可以选择使用与空闲节点测试速度一样的部分占用节点进行计算。

下面开始进行计算测试:(仍然使用上面的R-TiO2-110表面作为范例)

    1、首先进行计算核数的测试:

对于一般的vasp计算来说,内存使用100G是足够的,可以先固定内存为100G,分别使用64、32、16、4核数(根据自己的体系情况进行调整,总的来说就是选一个最大核数64,再选一个最小核数16,再测试一些中间的值,从而选出相应的能够保证计算速度收敛且核数最小的情况),使用空闲节点cpu01来进行计算测试(尽量使用同一节点进行测试,这样测试的可比性更好):

image.png



当我测试到16核数的时候,发现明显32核数是更合适的,32核数的速度是16核数的两倍,但是和64核数的速度差不多。所以可以选定为32核数。接下来如果想要更细致的测试,可以你在16-32核数中选28、24、20再进行测试。

image.png

可以明显看,使用28核数是相对合适的,其速度与32核数接近。

当然,这个例子里测出的最优核数是32核。


      2、然后固定计算核数为上一步测出来的值,进行计算内存的测试:

    固定核数为32核数,选取不同的计算内存值进行测试,一般而言,计算内存的大小并不影响计算速度,影响的是计算是否能够正常进行,例如现在的R-TiO2-110表面范例,我再选取10G的计算内存的时候,计算速度仍然很快且能够正常完成完整的计算任务。

    所以最终我对这个体系选取的核数和计算内存是32核数和10G计算内存进行计算。

    但是对于计算内存来说,如果计算内存选的太小,会导致计算到一半出现卡停、计算速度突然变慢等现象,请大家根据自己体系的实际情况进行测试和选取,一般而言,对于vasp来说可能50-100G的计算内存已经足够大了。

    讲在最后:请大家一定认真测试计算核数和计算内存的使用量值,针对每一个体系只需测试一次即可,无需重复测试,这样能够保证大家计算效率最高的同时花费费用最低,且能有效提高平台的使用率!以及如何解决可能遇到的问题。

    作者:徐忠菲        

    审核:周小力,徐教辉