目录
功能背景
随着高性能计算技术的不断发展,越来越多的科学研究、工程设计领域开始使用高性能计算集群来解决计算问题。而在使用集群进行作业提交时,如何指定内存资源是许多用户经常会关注的问题。指定内存过大会造成内存资源浪费,而指定内存过小则可能导致OOM(Out Of Memory),甚至会引起服务器宕机。
传统方式下,内存调整往往依赖于个人经验或试错,既费时又效果有限。为了解决这些问题,HPCinsights推出了内存预测功能。
实现原理
当用户提交作业时,HPCinsights会通过esub脚本获取作业特征并记录到数据库中,运用机器学习算法对数据进行汇总、分类和学习,构建出作业模型。
当用户再次提交类似作业时,HPCinsights会根据作业的特征匹配相同类型的作业模型。对于每个匹配上的模型都会对应一个预测内存值,通过投票算法,最终会为作业预测一个相对合理的内存值。
实现原理流程图:
配置方法
配置内存预测功能主要涉及到:启用esub环境变量、拷贝esub脚本和默认使用内存预测。当然,也可以根据自己的需求定制化修改esub脚本。比如指定某些队列使用内存预测功能、指定某些用户使用内存预测功能等等,从而更灵活地实现给作业指定内存的目的。
-
启用esub环境变量
在$LSF_ENVDIR/lsf.conf配置文件中添加参数LSB_SUB_COMMANDNAME=Y,以便能够在esub脚本中使用LSB_SUB_COMMAND_LINE环境变量。
[lsfadmin@node01 ~]$ vi $LSF_ENVDIR/lsf.conf
LSB_SUB_COMMANDNAME=Y
[lsfadmin@node01 ~]$ lsadmin reconfig
-
拷贝esub脚本
在hpcinsights/config目录下有内存预测相关的esub脚本,需要把config/esub.insights*拷贝到$LSF_SERVERDIR目录下。
[lsfadmin@node01 hpcinsights]$ sudo cp config/esub.insights* $LSF_SERVERDIR/
-
默认使用内存预测
如果想让用户提交作业时默认使用内存预测功能,还可以在$LSF_ENVDIR/lsf.conf配置文件中添加参数LSB_ESUB_METHOD=insights-silence,以实现默认使用内存预测功能的目的。
[lsfadmin@node01 ~]$ vi $LSF_ENVDIR/lsf.conf
LSB_ESUB_METHOD=insights-silence
[lsfadmin@node01 ~]$ lsadmin reconfig
使用演示
内存预测功能支持交互式和非交互式两种方式:
-
交互式的esub脚本(esub.insights)可以让用户选择是否使用预测值。
-
非交互式的esub脚本(esub.insights-silence)默认使用预测值。
-
交互式
[lsfadmin@node143 ~]$ bsub -a insights sleep 1000 esub: 0MB allocated, 2MB predicted, use predicted value? [y/n] y Job <517275> is submitted to default queue <normal>. [lsfadmin@node143 ~]$ bjobs -l 517275 Job <517275>, User <lsfadmin>, Project <default>, Status <RUN>, Queue <normal>,Command <sleep 1000>, Share group charged </lsfadmin>, Job Description <ALLOC_MEMORY_USER=0>, Esub <insights> Sun Jul 30 14:50:37: Submitted from host <node143>, CWD <$HOME>, Requested Resources <rusage[mem=2]>; Sun Jul 30 14:50:37: Started 1 Task(s) on Host(s) <node144>, Allocated 1 Slot(s) on Host(s) <node144>, Execution Home </home/lsfadmin>, Execution CWD </home/lsfadmin>; SCHEDULING PARAMETERS: r15s r1m r15m ut pg io ls it tmp swp mem loadSched - - - - - - - - - - 10M loadStop - - - - - - - - - - - RESOURCE REQUIREMENT DETAILS: Combined: select[type == local] order[r15s:pg] rusage[mem=2.00] Effective: select[type == local] order[r15s:pg] rusage[mem=2.00]
-
非交互式
[lsfadmin@node143 ~]$ bsub -a insights-silence -R "rusage[mem=10]" sleep 1000 esub: 10MB allocated, 2MB predicted, predicted value is used. Job <517277> is submitted to default queue <normal>. [lsfadmin@node143 ~]$ bjobs -l 517277 Job <517277>, User <lsfadmin>, Project <default>, Status <RUN>, Queue <normal>,Command <sleep 1000>, Share group charged </lsfadmin>, Job Description <ALLOC_MEMORY_USER=10>, Esub <insights-silence> Sun Jul 30 14:54:38: Submitted from host <node143>, CWD <$HOME>, Requested Resources <rusage[mem=2]>; Sun Jul 30 14:54:38: Started 1 Task(s) on Host(s) <node144>, Allocated 1 Slot(s) on Host(s) <node144>, Execution Home </home/lsfadmin>, Execution CWD </home/lsfadmin>; Sun Jul 30 14:54:52: Resource usage collected. MEM: 2 Mbytes; SWAP: 0 Mbytes; NTHREAD: 4 PGID: 10603; PIDs: 10603 10604 10606 MEMORY USAGE: MAX MEM: 2 Mbytes; AVG MEM: 2 Mbytes SCHEDULING PARAMETERS: r15s r1m r15m ut pg io ls it tmp swp mem loadSched - - - - - - - - - - 10M loadStop - - - - - - - - - - - RESOURCE REQUIREMENT DETAILS: Combined: select[type == local] order[r15s:pg] rusage[mem=2.00] Effective: select[type == local] order[r15s:pg] rusage[mem=2.00]
查看效果
在HPCinsights页面分析功能里,有专门用来查看内存预测功能效果的仪表盘。其中,内存预测数量统计是用来统计每天内存预测总数量、内存预测命中数量和内存预测准确数量;内存预测比率统计是用来统计每天内存预测命中率和内存预测准确率;内存节省量统计是用来统计每天内存预测功能帮用户优化的内存量。
用户案例
国内某人工智能芯片企业,芯片研发用户在向HPC集群提交作业时,经常会遇到不知道需要指定多少内存的情况,要么指定内存资源过大,要么指定内存资源过小,甚至很多作业不指定内存资源,导致部分主机由于内存资源指定不合理,经常发生OOM的情况。
该企业使用了HPCinsights的内存预测功能后,自动给每个作业指定了更合理的内存资源,很大程度上改善了由于内存资源分配不均衡导致的部分主机内存利用率低、部分主机时常出现OOM的情况。集群资源利用率和作业平均等待时间得到较大改善,更加充分地利用了现有的服务器资源。
以下是该用户使用HPCinsights内存预测功能的实际效果。可以看到,内存预测功能帮助该企业每天平均节省内存量2.97TB,最多一天节省28.7TB,并且有效解决了系统OOM和宕机问题。
结语
在高性能计算领域,快速优化资源分配一直是一个重要议题。利用HPCinsights提供的内存预测功能,可以让用户在提交作业时更加方便、合理的指定内存资源,对于研发和运维都具有重要实际价值。
如果您想进一步了解HPCinsights的内存预测功能,欢迎和我们联系。
欢迎关注下方微信公众号【HPC常青园】,共同交流HPC集群管理经验和最佳实践。如果您有关于HPC集群的具体需求,欢迎邮件沟通交流:hpc@ivyent.cn。