黄 华 朱 洁 刘广昊 吴习宇 祝诗平
(1.西南大学工程技术学院, 重庆 400716; 2.西南大学食品科学学院, 重庆 400716)
近红外光谱(Near infrared spectroscopy, NIRS)广泛应用于稻谷、小麦和玉米等农产品的含水率无损检测中[1-3]。在近红外光谱定量分析模型中偏最小二乘法(Partial least squares, PLS)[4]应用最为广泛。从原始光谱数据中选择特征谱区用于PLS建模有利于提高预测模型的精度。常用的谱区选择算法[5-6]有4种:分段间隔偏最小二乘法(Interval partial least squares, iPLS)[7-9]、组合分段偏最小二乘法(Synergy interval partial least squares, siPLS)[10]、反向分段偏最小二乘法(Backward interval partial least squares, biPLS)[11]、滑动窗口偏最小二乘法(Moving window partial least squares, mwPLS)[12-14]。黄华等[9]研究表明这4种特征谱区选择算法中mwPLS和biPLS算法预测精度较高,但其程序运行的时间都较长。如果从提高单核芯片的速度来缩短谱区选择程序运行时间,存在两方面问题[15]:①热量问题,会使芯片产生的热量超过处理器所能承受的极限。②性价比问题,速度快的处理器,其价格都很高、导致单核处理器的性价比很低。因此目前主要采用多核芯片并行执行来缩短程序运行时间。
本文以近红外光谱法定量分析稻谷含水率为例,在16核的云计算平台下,首先分析顺序分配法、等间距法和排序法等3种任务调度策略对并行iPLS算法性能的影响;然后将并行性能最好的任务调度策略应用到siPLS、biPLS和mwPLS等并行算法中,分析它们的相对加速比、并行算法的效率和负载均衡等性能指标。
利用Bruker MPA型近红外光谱仪采集364份稻谷样品光谱。工作波数范围为3 598.71~12 493.30 cm-1,扫描次数32次,分辨率为3.85 cm-1,共2 307个波数点。随机选取其中的210个样品作为校正集;154个样品作为预测集。
云计算服务器配置如下:处理器Intel Xeon E5-2650 v3,主频2.30 GHz、CPU核数16核、内存16 GB,操作系统Microsoft Windows Server 2012 R2 Datacenter Version 6.3 (Build 9600),所用软件为Matlab 8.5 (R2015a)。
为了衡量并行算法性能,通常使用相对加速比、并行算法的效率和负载平衡等性能指标[15-16]。
相对加速比为
(1)
式中t1(n)——单核运行时间
tP(n)——多核运行时间
一般情况下,t1(n)>tP(n)。
并行算法的效率为
(2)
式中p——处理器核数
SP(n)≤p,所以有0 并行算法的负载均衡百分比为 (3) 式中Ti——第i个进程执行时间 分段间隔偏最小二乘法(iPLS)首先将原始光谱波数分成2~N段,取每一小段分别用于最小二乘法(PLS)建模,并计算其预测集的均方根误差(Root mean square error of prediction, RMSEP),然后根据RMSEP最小的原则统计计算结果,从分段中选取具有最佳预测性能的光谱区域。iPLS算法计算复杂度参照文献[9]。iPLS谱区选择示意图如图1所示。 图1 iPLS谱区选择示意图Fig.1 Diagram of iPLS wavelength selection 在云计算平台下采用传统的单核串行程序运行iPLS算法。程序连续运行10次,计算每种分段情况下iPLS算法的平均程序运行时间,如图2所示。 图2 单核串行iPLS算法程序运行时间Fig.2 Runtime of iPLS serial algorithms on signal core 由图2可以看出,iPLS程序的运行时间与分段数和光谱数据量有关。当分段数为2和3时程序的运行时间较长,这主要是因为这两种分段情况下用于单次PLS建模的数据量较大。如分段数为2时,将2 307个波数点分成两段,每一段有1 153个波数点用于PLS建模。随着分段数的增加程序运行时间呈上升趋势,这主要是由于分段数越多程序运行PLS算法的次数越多。在单核下iPLS串行算法程序平均运行总的时间为26.80 s。 在多核处理器下实现特征谱区选择的并行算法流程如图3所示。 图3 近红外光谱谱区选择算法并行化流程Fig.3 Flow chart for parallel wavelength selection 由于iPLS算法具有分离性,即可以根据各分段数单独调用PLS算法,因此可以将串行的iPLS谱区选择算法转换成并行算法在多核计算机中运行。在图3中,将串行的算法分配到各个处理器上并行执行,关键的问题是如何对各个处理器进行合理的任务分配,使各个处理器的负载平衡,减少各处理器的开销时间和处理器间的通信时间,从而提高并行效率。 在单核串行算法中,运行iPLS程序会根据分段数调用各自的iPLS算法,即 fori=2:N分段数为2~N段 iPLS(i) 根据分段数调用iPLS算法 end 在Matlab中提供了parfor关键字实现将串行的for循环转换为并行执行[17-18],for关键字改为parfor即可实现并行算法。 Matlab中parfor采用client和worker模式,如图4所示。 图4 Matlab并行计算资源池Fig.4 Matlab parallel computing resource pool 在多核处理中,其中一个核为client端,其余的多个核为worker端。在client端编写和启动并行代码,Matlab的串行部分程序代码在client端运行,在程序的执行过程中client端根据并行代码的关键字parfor寻找需要并行执行的代码,并将这部分代码分配到各个worker端,然后各个worker端并行执行,并将计算结果返回给client端。若计算机的核数为p(即有p个worker端),循环次数为n,若n/p为整数,则循环将会被均匀分配;如果n/p不为整数,则各个worker端的任务分配将会不均匀。本文分析比较了3种任务调度策略对并行性能的影响。 (1) 顺序分配法任务调度策略 顺序分配法任务调度策略将按自然数的顺序为各个核平均分配任务。例如在4核处理器上运行n为1~115段的iPLS程序(n=1表示用全谱建模,为了与全谱进行比较,n的最小值取为1),1~115段被顺序平均分成4组:第1组为第1~28段;第2组为第29~56段;第3组为第57~84段;第4组为第85~115段。client端将这4组分段数据随机分配给4个核处理器并行执行。 (2)等间距法任务分配调度策略 等间距法任务分配调度策略以处理器核数p为间隔值为每一个核从分段数中抽取分段数索引。例如在4核处理器上运行n为1~115的iPLS程序,以4间隔将1~115段分成4组:第1组为1、5、…、113段;第2组为2、6、…、114段,第3组为3、7、…、115段,第4组为4、8、…、112段。然后将这4组随机分配给4核处理器并行执行。 (3)排序法分配调度策略 排序法分配策略会根据各个核任务执行的进程来分配任务,任务先完成的核将首先获得下一次执行任务。任务分配按由重到轻的原则进行。同样以在4核处理器上运行1~115共115段的iPLS程序为例。第1次分配首先将115乘以2/3除以核数4,即115×2/12=19.16,取整为20。空闲的前一半核首先获得20段的计算任务。以此类推继续给空闲的核分配任务,直到所有的任务被分配完。 在16核云计算平台下,分别对顺序分配法、等间距法、排序法等3种任务调度策略并行计算性能进行测试。在Matlab中通过parpool关键字设置CPU核数分别为1~16等16种情况下运行iPLS算法。这3种任务分配策略的程序运行时间、相对加速比、并行效率和负载均衡情况如图5、6所示。 图5 3种分配策略程序运行时间与相对加速比Fig.5 Runtime and speedup ratio for three task scheduling strategies 图6 3种分配策略并行效率和负载均衡比较Fig.6 Parallel efficiency and load balance for three task scheduling strategies 由图5可见,随着并行核数的增加程序运行时间成比例减少,相对加速比呈上升趋势。排序法分配策略的相对加速比性能最佳。由图6可见,顺序分配法负载均衡性能最差。以4核并行iPLS算法为例,由图2可见,当N大于3以后随着分段数的增加计算iPLS程序的运行时间增大。在4核处理器上实验测试结果表明:在顺序分配法中程序运行时间最长为9.75 s,最短时间为3.47 s,最快的核有64.50%的空闲时间用于等待最慢的核完成任务。由图6可见,随着并行核数的增加负载均衡性能和并行效率都呈下降趋势。 综上所述,在以上3种分配策略中,排序法分配策略并行性能最佳,后文将排序法分配策略应用到组合分段偏最小二乘法、滑动窗口偏最小二乘法和反向分段偏最小二乘法等3种谱区选择并行算法中。 组合分段偏最小二乘法(siPLS)[9,12]是在分段间隔法的基础上,从分段中取出L段组合成一个新的光谱数据集,用于PLS建模;然后根据RMSEP最小的原则确定最佳组合光谱区域。 在16核云计算平台下采用排序法分配策略,siPLS算法的运行结果如表1所示。 表1 在1~16核下siPLS并行算法运行结果Tab.1 Result of siPLS parallel algorithm from 1 to 16 cores 从表1可见,利用2核并行运行siPLS算法时相对加速比为1.91,程序运行时间由单核的20.70 min缩短至10.84 min,节省了47.83%的程序运行时间。从2~16核的并行运行结果来看,随着核数的增加程序运行时间进一步减小。并行效率和负载均衡性能随着并行核数的变化有一定的波动,核数为2时并行效率最高,为95.45%,负载均衡性能也最佳,达到95.31%。11核并行时并行效率最低,为77.98%,负载均衡性能也最差,百分比为80.03%。 反向分段偏最小二乘法(biPLS)[9]首先将原始光谱的波数分成n段,然后去掉其中的任意一段,得到由n-1段光谱组合成的新光谱数据集,用于PLS建模;计算其在不同主成分数下的RMSEP,再对保存下来n-1段光谱数据重复上述进程,直到最后只剩下1段光谱为止。最后根据RMSEP最小的原则确定最佳组合光谱区域。 在16核云计算平台下采用排序法分配策略,biPLS算法的运行结果如表2所示。 表2 在1~16核下biPLS并行算法运行结果Tab.2 Result of biPLS parallel algorithm from 1 to 16 cores 从表2可见,利用2核并行运行biPLS算法时相对加速比为1.85,程序运行时间由单核的9.22 h缩短至4.98 h,节省了45.99%的程序运行时间。从2~16核的并行运行结果来看,随着核数的增加程序运行时间进一步减小。然而并行效率随着并行核数的增加却减少,2核并行时并行效率最高,为92.64%。2~16核的负载均衡性都能较好,百分比均介于85%~94%之间。 滑动窗口偏最小二乘法(mwPLS)[19-20]是以某一点为中心,按一定的窗口长度从原始光谱中取出一段连续的光谱数据集,用于最小二乘法建模;然后根据RMSEP最小的原则确定最佳光谱中心点和窗口长度,从而获得最佳特征光谱区域。 在16核云计算平台下采用排序法分配策略,mwPLS算法的运行结果如表3所示。 表3 在1~16核下mwPLS并行算法运行结果Tab.3 Result of mwPLS parallel algorithm from 1 to 16 cores 从表3可见,利用2核并行运行mwPLS算法时相对加速比为1.91,程序运行时间由单核的55.51 h缩短至29.03 h,节省了47.70%的程序运行时间。从2~16核的并行运行结果来看,2核并行时并行效率最高,为95.62%。负载均衡百分比均大于94%。 在近红外光谱分析中偏最小二乘法获得了广泛的应用。从全部光谱中选择最佳特征谱区可以提高PLS算法的预测精度,目前广泛使用的谱区选择算法有mwPLS、biPLS、siPLS、iPLS等4种。在单机单核下这4种算法程序的运行时间分别为55.51 h、9.22 h、20.70 min、26.80 s。在不改变算法精度的情况下,在云计算平台下采用排序任务分配策略多核并行算法有较好的负载均衡性能,可以缩短程序的运行时间,提高近红外光谱谱区选择效率。如采用2核并行时,mwPLS和biPLS算法分别节省了47.70%和45.99%的程序运行时间。随着核数的增加,程序运行时间会进一步减小,但并行效率不与核数成正比,从2~16核的并行运行结果来看,2核并行算法具有最高的并行效率。目前普通的计算机至少具有2核处理器,在考虑并行效率和计算成本条件下,利用2核并行计算具有经济性和实用性。2 单核串行iPLS算法效率分析
2.1 单核串行iPLS算法计算复杂度分析
2.2 单核串行iPLS算法运行结果分析
3 云计算平台下多核并行iPLS算法任务调度策略
3.1 基于parfor关键字的多核任务调度策略
3.2 多核并行iPLS算法运行结果分析
4 在云计算平台下多核并行谱区选择算法应用
4.1 siPLS 算法多核并行运行结果
4.2 biPLS算法多核并行运行结果
4.3 mwPLS 算法多核并行运行结果
5 结束语