Magic作为一款著名的电磁模拟商业软件,可以通过馈入参数[1]仿真计算输出功率。为了确定最优参数,开发了Magic迭代计算软件进行参数的优化,但该软件是一个单机版本的软件系统,由于解决相关领域问题所需的计算量大,使用该软件完成每次迭代计算存在耗时长的问题。为了解决单机软件耗时长的问题,目前常用的方法大约有以下几种:张朝金等[2]对Bellhop传播模型算法进行改进,利用多线程技术,建立了稳定可靠的并行模型算法,实现了声场的快速预报,提高了运行效率。刘俊见等[3]采用OpenMP[4]并行化技术,将可并行化的任务显式的使用多线程的方法进行并行计算,显著提高了侧向散射激光雷达数据处理的效率。但是由于该Magic迭代计算软件的任务要开启多个Magic进程使其进行计算,且Magic软件作为成熟的商业软件无法对其自身进行改造,故无法采用上述方法在线程级别进行改造。
随着大数据的兴起和发展,分布式计算技术实现了跨越式发展并被广泛应用。可以使用MapReduce[5-7], Spark[8-9]、Storm[10]并行计算框架对特定领域的问题进行并行处理[11]。焦凯琳等[10]使用Hadoop的HDFS文件系统和分布式数据库HBase对海量的物流数据进行分布式存储和管理,使用MapReduce和Storm并行计算框架实现批数据处理的分析研判业务以及一些与数据实时处理相关的查询跟踪业务。李业田[12]使用分布式文件系统HDFS实现海量数据的存储,采用并行处理框架MapReduce对海量的电信数据进行并行处理。但是采用这种方法需要大量的软硬件的支持,要针对具体业务搭建大数据平台,成本较高;同时这种方法主要是对大批量的数据进行处理,更多的适用于数据挖掘和机器学习,并不能很好地实现特定软件的并行化。
本文提出了一种基于Microsoft HPC并行计算框架的解决方案,可以利用现有的硬件环境,基于Windows操作系统搭建一个并行计算平台,实现多个Magic程序在多台计算机上并行计算,解决耗时长的问题。
1 Magic计算需求分析Magic软件是一款著名的电磁模拟软件,可以通过馈入参数仿真计算输出功率。为了确定最优的参数,实际工作中采用Magic迭代计算软件迭代计算进行参数确定,具体流程如图1所示。
![]() |
Download:
|
图 1 Magic迭代计算软件流程 |
该程序为一个单机运行程序,该程序依据用户在用户界面上设置的一系列参数生成指定数量的参数文件,然后启动相同数量的Magic进程进行计算。计算完成后,根据计算结果,通过遗传算法对参数进行优化,生成下一代的参数文件,再进行计算。通过迭代几十代或上百代,直至优化出最优的参数。
该Magic迭代计算软件迭代一次大约需要花费50 min,迭代出最优的参数大约需要花费4~5 d的时间。
经研究发现制约运行速度的是多个Magic进程在单台计算机上进行计算这一步骤,由于每代求解的是多个具有独立的几何边界条件的相似模型,是一个易并行问题,故提出将Magic软件放在多台计算机上进行并行计算的构想。通过技术论证,最终提出了采用Microsoft HPC将Magic迭代计算软件进行并行化的技术架构。
2 总体设计 2.1 集群的架构图集群的架构如图2所示。采用Microsoft的HPC平台,通过使用Microsoft HPC Pack把处于一个局域网内的多台计算机搭建成一个计算机集群:集群中头节点装有Windows server 操作系统,主要对计算节点进行监控和Magic进程的分配和管理;计算节点利用Windows操作系统(如Window 7)对头节点分配的计算任务进行计算,在每个计算节点上设置共享文件夹,可以将Magic运行结果存储到某一指定的共享文件夹中。
![]() |
Download:
|
图 2 集群的架构 |
改进的Magic迭代计算软件首先连接到集群的头结点,然后指明任务(即Magic程序)的绝对路径、输入文件的绝对路径、结果输出路径、程序要占用的CPU内核数等信息,生成一代所需的任务数,组成一个作业。将作业提交到头结点,头结点按照分配策略在可用的计算节点启动一定数量的Magic进程。计算节点在计算完成后,将计算结果存储到指定的共享文件夹中。头结点可以对计算节点上的每个Magic进程进行监控,可以获得每个计算节点Magic进程完成的进度、所花的时间等状态信息,也可以终止掉异常的Magic进程。改进的Magic迭代计算软件可以向集群的头结点发送信息,可以获得Magic进程的状态信息和对Magic进程进行控制和管理,流程如图3所示。
![]() |
Download:
|
图 3 改进的Magic迭代计算软件工作流程 |
在已安装服务器操作系统(如Windows server 2016)的计算机上添加域服务,并将该计算机添加到域中。使用Microsoft HPC Pack,创建头结点。
使用HPC Pack群集管理器配置网络拓扑,图2集群的架构图所展现的为其中的一种网络拓扑关系。
创建不同级别的节点组,即将可用的计算资源进行分组,使每组拥有不同数量的计算资源。如可以使某组拥有集群中所有的计算资源,保证计算时的性能最好。本文只设置了一个组,该组中包含所有的计算节点。
创建作业模板,在向集群提交作业时使用。在作业模板中可以设置作业放在哪个或哪几个节点组上进行计算,防止占用整个集群的计算资源,影响他人的使用。可以设置作业的最大运行时间,设置提交作业的优先级,也可以限定该作业模板的使用权限等。
3.1.2 计算结点的部署与配置在Windows计算节点上开启HPC pack安装向导,可以选择创建工作站节点或选择计算节点将计算节点加入现有HPC群集。输入头节点名称,完成安装。通过HPC Cluster Manager软件在节点管理中为每个节点套入节点模板,并将刚加入到集群中的节点添加到某个计算组中,以增加该组中可用的计算资源的数目。因为作业模板会要求选择相应的节点组,在进行并行计算时会使用该组的计算资源。
注意事项:1)配置IP和DNS,IP地址确保和主节点在同一个局域网内,DNS服务器的地址设置为头节点的IP地址。2)设置计算机名及域名:设置易于和其他计算机区分的计算名便于在通过程序生成的日志文件查看每个计算节点上被分配了多少Magic进程;设置域名:域名为配置头节点时设置的根域名。
3.2 数据的存储要求每个计算节点的Magic进程在启动计算时能读取到参数文件,且当各个计算节点计算完成后,能把计算结果汇总到一起,方便用户查看。
由于Windows提供了在局域网中文件共享机制,故在每台计算机上设置了一个共享文件夹,在提交作业之前,用户可以通过Magic迭代算法软件的前台界面设置共享文件夹的绝对路径。这样,在局域网中的每台计算节点在计算时,就可以从共享文件夹中读取所需的参数文件;计算完成后,就会将结果输出到该共享文件夹下。
3.3 改进的Magic迭代计算软件的设计用户只需在用户界面上配置好所需的参数,程序会自动进行迭代并将作业提交到集群上进行计算,实现集群对用户的透明化,简化用户的操作,提升用户体验。改进的Magic迭代计算软件既可以放到计算节点上运行,又可以放在头节点上运行。
Magic迭代计算软件的改进主要包含以下3点:
1)用户名密码的设计
在Magic迭代计算软件的前端设置登录界面,将用户名密码和之前创建的作业模板绑定在一起,存放在数据库中。不同的用户登录后,在提交作业时从数据库中读出相对应的作业模板,进而实现不同的用户在提交作业进行计算时使用不同的计算资源,达到资源合理利用的目的。在提交作业时,在作业名称上加上用户名,这样管理员可以知道哪些用户正在使用集群资源。
2)计算任务的提交
Microsoft HPC pack SDK提供了可供二次开发的API接口[13],通过编程调用相应的接口实现集群的连接和将每一代的Magic程序放到集群上进行计算的操作,从而实现将耗时耗资源的计算采用并行方式完成。
通过调用API相应的函数可以设置作业使用的作业模板,Magic进程要使用的内核数,以到达合理利用集群中计算资源的目的。
3)日志文件的编写
当进行集群计算时,编写相应的日志文件,用来统计一个作业提交到集群上的时间点:每个Magic进程被分配到哪个计算节点上,计算每个Magic所花的时间;每个计算节点被分配的任务数,用于集群计算所花的时间;每个作业完成的时间点、所耗时长和检查每个任务是否计算出了结果,一些错误提示等一系列的信息。通过统计以上信息,可以和单机运行所花费的时间进行比较,判断是否可以提升计算效率。可以清楚地判断每个计算节点计算快慢,可以弃用计算较慢的计算节点。
4 并行计算中的问题及解决方法在并行化过程中遇到了一些问题,下面对出现的问题进行探讨并给出相应的解决办法。
1) Magic进程没有进行计算。
本文使用工作站作为计算节点,每个工作站有32个CPU内核,在实验时使用2台相同的工作站充当计算节点,设置每个Magic进程使用的CPU内核数为1,当给每台工作站分配超过24个Magic进程时,会出现部分Magic进程没有进行计算,却显示计算完成的情况。针对这种情况,本文采取了下面的措施:作业提交后,在获取作业的完成进度过程中,每当进度发生变化时,代表有Magic进程计算完成,此时获取任务的列表,通过检测已完成的任务是否生成完整的计算结果文件,来判断Magic进程是否计算完成,如果没有完整的结果文件,将该任务再次提交到集群上进行计算。
2)算例在计算完成后无法停止。
在搭建的测试集群平台上经测试发现,在计算节点上,部分Magic进程在计算完成后,所有的结果文件已经生成,但是却无法自己停止,在集群中显示该Magic进程正在运行,这样导致某一次迭代无法完成,无法生成下一次迭代所需的参数文件,无法进入下一次迭代,大大降低了运算的效率。
针对这种情况,因为在作业模板中可以设置一个作业最大运行时间,所以规定了一个作业最大运行时间的值,到规定的时间,终止掉这一代。但是发现参数文件不同,每个Magic进程计算所需的时间不同,无法准确得知每一代最大的运行时间。如果最大运行时间设置得过大,计算完成,Magic进程迟迟无法停掉,同样也会增加每一代运行的时间,降低计算效率;如果每代计算时间设置的过小,部分Magic进程还没有计算出结果,就被强行终止掉了,会使下一代无法生成较好的参数,甚至会导致最终无法生成最优的参数。
依据Magic无法自动终止,就利用集群的头结点强行停止掉的思想,在作业正在运行时每过一段时间(如20 s),获取Magic进程列表,检测正在运行的Magic进程,看所有的结果文件是否已经存在,如果已存在,可将该Magic进程终止。这样可以做到及时终止计算已完成但未自动结束的Magic进程。
应当注意的是,由于在程序中反复通过调用API函数获取作业的任务列表,如果任务列表比较大,会占用较大的内存,在使用完成后,没有及时的释放掉,会造成内存泄漏的问题。所以在使用完任务列表后要及时的释放掉,可以通过调用ISchedulerCollection::Clear函数进行释放,以免造成程序出错。
3)为每个计算节点分配的最大任务数。
经实验发现,在搭建的集群平台上,在把多个Magic进程分配到集群上时,当一次迭代的Magic进程过多,超过了一台计算节点可用的CPU内核数时,集群头节点会把任务循环分配到可以使用的计算节点上。如可用的计算节点有3个,第1个任务会分配到第1台计算节点上,第2个任务会被分配到第2个计算节点上,第3个任务会被分配到第3个计算节点上,第4个任务又会被分配到第1个计算节点上,依次循环,有1个计算节点上的内核被分配完就不再给该计算节点再分配;当一代中包括的Magic较少时,集群会将所有的Magic进程分配到一个计算节点上。
为每个计算节点分配的Magic进程数应根据CPU的利用率、每个计算节点上所有Magic计算完成的时间和集群用户数量这3个指标来确定。
每台工作站都是多核CPU,如果每个Magic进程占用CPU的1个内核,1个计算节点被分配的Magic进程数为CPU的内核数,计算节点的CPU利用率会很高,甚至会达到100%。有的计算节点不仅要满足集群运算的需求,还要满足用户正常的使用,如果CPU的利用率过高,则无法满足用户对计算机的正常使用;CPU的利用率过高,也会导致1个计算节点上多个Magic进程之间相互影响,1个计算节点上任务完成的时间增加。如果在多核工作站上分配的Magic进程过多,会存在许多显示计算完成却没有进行计算的Magic进程,虽然重复提交可以解决该问题,但是还是会略微增加迭代一次所需的时间。
如果1个计算节点被分配的Magic进程数少于CPU的内核数,CPU的利用率就会下降,1个计算节点上分配的Magic进程相互之间影响较小,完成时间缩短,但是整个集群能并行运算的算例总数量就会下降。假如集群中的计算节点的数量一定,不再增加,多个用户同时使用集群,就可能会出现部分用户提交的任务会处于排队状态。所以,要把这3个因素综合考虑,取得一个最优值。
综合以上所有因素,本文经实验发现当1台计算机拥有的CPU内核数较多时,设置每台计算节点最大可用于计算的内核数为每台计算节点拥有CPU内核数的
值得注意的是,只有先在HPC Cluster Manage软件中把每台计算节点进行脱机后,才能使用该软件设置每个计算节点可以使用的最大内核数,且可用的最大内核数只能设置为偶数。
5 集群安全性论证由于在进行Magic进行并行化时,要求集群具有容错能力,即1个计算节点宕机的情况。经过实验论证发现,当某个计算节点在运行Magic进程时出现了宕机的情况,该机上计算任务不会失败,任务会被重新收回,状态变成排队状态,当有可用的计算资源时,任务会被重新分配出去,完成计算;当1个计算节点发生故障时,集群将不会分配Magic进程给该计算节点。1个计算节点出现故障,不会影响整个集群的正常使用。
6 实验结果本文在Magic迭代算法软件的前端界面上设置好Magic程序所需的参数信息,使用搭建好的2台相同的工作站集群充当计算节点,用于Magic程序的运行,每台工作站拥有32个CPU内核,同时准备1台相同的工作站进行单机迭代优化参数。
经过测算在工作站上单独运行一个Magic进程,计算完成平均花费15 min。程序每次迭代会生成44个Magic进程。由于我们设定的每台计算节点可用的最大内核为22个,每个Magic进程占用1个CPU内核,故每次迭代44个Magic进程可以同时进行计算,没有排队现象。对于单机的magic进程一般习惯设定同时开启的Magic进程数为工作站的最大内核数,故一次开启32个进程。集群和用于单机迭代优化参数的工作站都没有运行其他程序。
放在集群上进行迭代,44个Magic进程计算完成平均所花的时间为22 min。而在单机上完成44个Magic进程计算平均花费40 min。说明使用较单机多一倍的计算资源,计算速度大约提升了一倍,加速比约为2。通过实验数据比对发现该方法能提高计算效率,所以该方法是行之有效的。
7 结论本文以单机Magic迭代计算软件为研究对象,针对每代开启多个Magic程序、运行效率低下的问题,提出了一种基于Microsoft HPC的并行化方法,提高了计算速度。
1)本文采用了共享存储的方法,使用共享文件夹实现多台计算机计算开始前读取所需参数,计算完成后存储计算结果的功能。
2)本文提出基于Microsoft HPC的方法实现Magic迭代计算软件的并行化,将每代的Magic程序分配到多台计算机的不同计算单元上进行计算,既利用了闲置的计算资源,又提高了计算效率,且成本低。为解决同类问题提供了一种可行的思路和方法。
在未来的工作中,可以深入的研究一下在并行计算过程中出现的个别Magic进程没有进行计算以及部分算例在计算完成后无法自行停止问题的真正原因。
[1] |
崔茜, 朱小芳, 黄莉丽, 等. 大功率速调管的MAGIC仿真方法研究[C]//中国电子学会真空电子学分会第十九届学术年会论文集(上册). 黄山: 中国电子学会真空电子学分会、大功率微波电真空器件技术国家级重点实验室, 2013: 4.
(![]() |
[2] |
张朝金, 孙炳文. 射线模型Bellhop的并行化处理[J]. 应用声学, 2019, 38(1): 1-7. (![]() |
[3] |
刘俊见, 陶宗明. OpenMP并行计算在侧向散射激光雷达数据处理中的应用[J]. 计算机与数字工程, 2019, 47(2): 266-271. DOI:10.3969/j.issn.1672-9722.2019.02.002 (![]() |
[4] |
李琦, 邵帅. OpenMP的发展及未来[J]. 科技经济导刊, 2019, 27(23): 22. (![]() |
[5] |
翁业林, 蒋道霞, 俞新华. 基于分布式并行计算的大数据自助分析系统的研究与应用[J]. 软件, 2018, 39(12): 83-86. DOI:10.3969/j.issn.1003-6970.2018.12.019 (![]() |
[6] |
李冲. 基于用户的协同过滤推荐算法MapReduce并行化实现[J]. 软件导刊, 2018, 17(10): 76-80. (![]() |
[7] |
刘佳俊, 胡大裟, 蒋玉明. 基于MapReduce的多样本基因鉴定并行优化模型[J]. 现代计算机, 2019(3): 11-15. DOI:10.3969/j.issn.1007-1423.2019.03.003 (![]() |
[8] |
杜佳颖, 段隆振, 段文影, 等. 基于Spark的改进K-means算法的并行实现[J]. 计算机应用研究, 2020, 37(2): 434-436, 497. (![]() |
[9] |
张振, 冯永亮, 赵津曼. 一种基于Spark的图像聚类并行化算法[J]. 电子制作, 2019(S1): 67-68, 108. (![]() |
[10] |
焦凯琳, 于自强. 智慧物流分布式计算模型与创新服务研究[J]. 计算机技术与发展, 2019, 29(1): 206-210. DOI:10.3969/j.issn.1673-629X.2019.01.043 (![]() |
[11] |
柯研, 马凯, 郑钰辉. 分布式计算平台Hadoop[J]. 数字技术与应用, 2018, 36(9): 70-71, 73. (![]() |
[12] |
李业田. 分布式计算架构在电信运营商中的应用[J]. 通讯世界, 2018(8): 85-86. DOI:10.3969/j.issn.1006-4222.2018.08.057 (![]() |
[13] |
Microsoft. HPC Interfaces[EB/OL].[2018-03-28]. https://docs.microsoft.com/en-us/previous-versions/windows/desktop/cc853439(v=vs.85).
(![]() |