
当前服务器内存价格持续走高如何通过HPC集群调度软件优化内存利用率、最大化现有硬件投入成为企业关注的重点。本文分享一种实践方案利用HPCinsights的内存预测功能动态感知任务内存需求提升集群整体利用率同时有效规避OOM异常降低芯片设计场景下的算力成本。目录功能背景实现原理配置方法使用演示查看效果用户案例结语功能背景随着高性能计算技术的不断发展越来越多的科学研究、工程设计领域开始使用高性能计算集群来解决计算问题。而在使用集群进行作业提交时如何指定内存资源是许多用户经常会关注的问题。指定内存过大会造成内存资源浪费而指定内存过小则可能导致OOMOut Of Memory甚至会引起服务器宕机。传统方式下内存调整往往依赖于个人经验或试错既费时又效果有限。为了解决这些问题HPCinsights推出了内存预测功能。实现原理当用户提交作业时HPCinsights会通过esub脚本获取作业特征并记录到数据库中运用机器学习算法对数据进行汇总、分类和学习构建出作业模型。当用户再次提交类似作业时HPCinsights会根据作业的特征匹配相同类型的作业模型。对于每个匹配上的模型都会对应一个预测内存值通过投票算法最终会为作业预测一个相对合理的内存值。实现原理流程图配置方法配置内存预测功能主要涉及到启用esub环境变量、拷贝esub脚本和默认使用内存预测。当然也可以根据自己的需求定制化修改esub脚本。比如指定某些队列使用内存预测功能、指定某些用户使用内存预测功能等等从而更灵活地实现给作业指定内存的目的。启用esub环境变量在$LSF_ENVDIR/lsf.conf配置文件中添加参数LSB_SUB_COMMANDNAMEY以便能够在esub脚本中使用LSB_SUB_COMMAND_LINE环境变量。[lsfadminnode01 ~]$ vi $LSF_ENVDIR/lsf.conf LSB_SUB_COMMANDNAMEY [lsfadminnode01 ~]$ lsadmin reconfig拷贝esub脚本在hpcinsights/config目录下有内存预测相关的esub脚本需要把config/esub.insights*拷贝到$LSF_SERVERDIR目录下。[lsfadminnode01 hpcinsights]$ sudo cp config/esub.insights* $LSF_SERVERDIR/默认使用内存预测如果想让用户提交作业时默认使用内存预测功能还可以在$LSF_ENVDIR/lsf.conf配置文件中添加参数LSB_ESUB_METHODinsights-silence以实现默认使用内存预测功能的目的。[lsfadminnode01 ~]$ vi $LSF_ENVDIR/lsf.conf LSB_ESUB_METHODinsights-silence [lsfadminnode01 ~]$ lsadmin reconfig使用演示内存预测功能支持交互式和非交互式两种方式交互式的esub脚本esub.insights可以让用户选择是否使用预测值。非交互式的esub脚本esub.insights-silence默认使用预测值。交互式[lsfadminnode143 ~]$ bsub -a insights sleep 1000 esub: 0MB allocated, 2MB predicted, use predicted value? [y/n] y Job 517275 is submitted to default queue normal. [lsfadminnode143 ~]$ bjobs -l 517275 Job 517275, User lsfadmin, Project default, Status RUN, Queue normal,Command sleep 1000, Share group charged /lsfadmin, Job Description ALLOC_MEMORY_USER0, Esub insights Sun Jul 30 14:50:37: Submitted from host node143, CWD $HOME, Requested Resources rusage[mem2]; 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[mem2.00] Effective: select[type local] order[r15s:pg] rusage[mem2.00]非交互式[lsfadminnode143 ~]$ bsub -a insights-silence -R rusage[mem10] sleep 1000 esub: 10MB allocated, 2MB predicted, predicted value is used. Job 517277 is submitted to default queue normal. [lsfadminnode143 ~]$ bjobs -l 517277 Job 517277, User lsfadmin, Project default, Status RUN, Queue normal,Command sleep 1000, Share group charged /lsfadmin, Job Description ALLOC_MEMORY_USER10, Esub insights-silence Sun Jul 30 14:54:38: Submitted from host node143, CWD $HOME, Requested Resources rusage[mem2]; 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[mem2.00] Effective: select[type local] order[r15s:pg] rusage[mem2.00]查看效果在HPCinsights页面分析功能里有专门用来查看内存预测功能效果的仪表盘。其中内存预测数量统计是用来统计每天内存预测总数量、内存预测命中数量和内存预测准确数量内存预测比率统计是用来统计每天内存预测命中率和内存预测准确率内存节省量统计是用来统计每天内存预测功能帮用户优化的内存量。用户案例国内某人工智能芯片企业芯片研发用户在向HPC集群提交作业时经常会遇到不知道需要指定多少内存的情况要么指定内存资源过大要么指定内存资源过小甚至很多作业不指定内存资源导致部分主机由于内存资源指定不合理经常发生OOM的情况。该企业使用了HPCinsights的内存预测功能后自动给每个作业指定了更合理的内存资源很大程度上改善了由于内存资源分配不均衡导致的部分主机内存利用率低、部分主机时常出现OOM的情况。集群资源利用率和作业平均等待时间得到较大改善更加充分地利用了现有的服务器资源。以下是该用户使用HPCinsights内存预测功能的实际效果。可以看到内存预测功能帮助该企业每天平均节省内存量2.97TB最多一天节省28.7TB并且有效解决了系统OOM和宕机问题。结语在高性能计算领域快速优化资源分配一直是一个重要议题。利用HPCinsights提供的内存预测功能可以让用户在提交作业时更加方便、合理的指定内存资源对于研发和运维都具有重要实际价值。