一种基于CUDA的网络入侵检测并行化加速方法与流程

文档序号:15637989发布日期:2018-10-12 21:42阅读:243来源:国知局

本发明涉及信息安全领域的网络入侵检测,是一种基于cuda的网络入侵检测并行化加速方法。



背景技术:

网络入侵检测的目的是分析网络中传输的数据流量,从中发现异常的流量。目前有许多聚类算法应用于网络入侵检测系统,其中基于k-means算法的网络入侵检测方法较为流行。由于k-means算法在每次迭代过程中会计算每个入侵检测数据点到所有聚簇中心的距离,当需要检测的数据量尺寸和维度非常庞大时,该算法将会非常耗时。如果需要检测的数据总量为n,聚簇数目为k,算法经过m次迭代之后收敛,那么算法在计算距离阶段就要进行k*n*m次运算。随着网络入侵检测数据集的增长,算法的执行效率将大大降低。为了提高k-means算法在大规模网络入侵检测数据集上的执行速度,一种有效的途径就是将k-means算法移植到多核架构上,例如目前流行的图形处理单元gpu(graphicsprocessingunit),然后运用cuda(computeunifieddevicearchitecture)编程模型并行化该算法,这样可以节省大量计算时间,提高算法的执行效率。

cuda是显卡厂商nvidia公司推出的一款通用并行计算架构,它可以让gpu解决复杂的计算问题。cuda提供了硬件的直接访问接口,这种接口可以实现gpu的直接访问,而不需要依赖传统的图形api。gpu是能够并行执行大量线程的协处理器。一个简单的gpu源程序包括运行在cpu上的主机端代码和运行在gpu上的内核(kernel)代码,这种编程方式可以降低gpu的编程难度。

很多研究都采用cuda来优化网络入侵检测系统的k-means聚类算法。常见的方法是将每个入侵检测数据点到所有聚簇中心的距离计算过程放在gpu端执行,而将聚簇中心的更新放在cpu端执行,这种方法执行效率很高而且也很普遍,但是加大了网络入侵检测数据在gpu和cpu端之间的传输时间。也有一些方法针对算法运行时网络入侵检测数据量的大小进行划分。当数据量较小时,就一次读入设备进行计算,当数据量较大时,就分批次读入设备进行计算,这种流式计算方法在面对大数据量时简单有效,但没有充分利用gpu内部的存储器体系。目前,基于cuda的网络入侵检测并行化方法存在的主要问题如下:1)算法的执行过程中包含大量的冗余计算,许多网络入侵检测数据点在下一轮迭代时并不会改变其所属聚簇,因此它们完全不必要参加下一轮的距离计算;2)距离计算时的并行度不高,每个线程负责一个入侵检测数据点到所有聚簇中心的距离计算,没有充分利用cuda的硬件特性;3)大部分聚簇中心的更新被重新移植到cpu端执行,提高了网络入侵检测数据的传输时间和计算成本。



技术实现要素:

本发明克服了上述不足之处,目的在于提供了一种基于cuda的网络入侵检测并行化加速方法。本发明首先针对k-means聚类算法中大量的重复距离计算问题,采用了基于上下界的全局选择器判断入侵检测数据点在本轮迭代中是否会改变所属聚簇,从而减少冗余计算。然后针对复杂的距离计算问题,将计算的公共部分提取出来,剩余部分利用cuda提供的通用矩阵乘函数,实现了向量与矩阵,矩阵与矩阵之间的运算,提高了运算速度。最后针对每次迭代中聚簇中心的更新问题,将入侵检测数据按照聚簇标签进行排序分组,将数据点的累计转化为每个组内的简单相加,从而最小化原子内存操作,提升整体性能。本发明主要充分利用cuda架构的特性,对网络入侵检测系统进行并行化加速,同时根据官方提供的高性能函数库对检测算法进行优化,在保证系统检测率的前提下,获得良好的加速比。

本发明是通过以下技术方案达到上述目的,即一种基于cuda的网络入侵检测并行化加速方法,具体的实施步骤如下:

(1)在cpu端初始化n个网络入侵检测数据点的集合r,随机选取k个点作为初始聚簇中心,设置最大迭代次数为m,中心点收敛阈值为t。在gpu端分配网络入侵检测数据点集、聚簇中心、全局上下界以及中心点偏移量的内存空间,将数据拷贝至gpu端;

(2)第一次计算所有入侵检测数据点至k个聚簇中心的距离。具体的计算方法采用步骤(4)的方法进行计算;然后,根据距离计算的结果,把数据点归入距离最近的聚簇中;最后,采用步骤(6)的方法来更新聚簇中心,从而获得全局选择器需要的数据;

(3)对于每一个入侵检测数据点,采用全局选择器判断是否需要进行下一轮迭代。如果入侵检测数据点满足全局选择器判定条件,则转步骤(6)处理,如果不满足,则转步骤(4)处理。全局选择器的判定条件为:

其中,x代表一个网络入侵检测数据点,e代表点x所属聚簇的聚簇中心,ue(x)代表x的全局上界,le(x)代表x的全局下界,φ(e)代表聚簇更新之后聚簇中心e的距离偏移量,c代表所有网络入侵检测聚簇中心的集合,c代表集合中除了e之外的一个聚簇中心,代表聚簇更新之后聚簇中心的最大距离偏移量;

(4)计算所有入侵检测数据点至k个聚簇中心的距离。在gpu端开启n个线程计算入侵检测数据点矩阵x的平方x2,然后开启k个线程计算聚簇中心矩阵y的平方y2,并计算x2+y2;最后,调用cuda提供的通用矩阵乘函数cublassgemm()进行距离计算,即计算n个入侵检测数据点至k个聚簇中心的距离。cublassgemm()函数属于cublas库,实现的矩阵运算如下:

z=alpha*op(a)*op(b)+beta*c

上述公式中alpha取值为-2,beta取值为1。调用cublassgemm()函数时,每个数据点的维度为d,公式中op(a)是n个入侵检测数据点矩阵x的转置,入侵检测数据点矩阵x的维度为d*n,其转置矩阵的维度为n*d。op(b)是聚簇中心矩阵y,其维度为d*k。这样,op(a)和op(b)相乘所得结果矩阵的维度为n*k。c是入侵检测数据点矩阵和聚簇中心矩阵的平方和,即x2+y2,其维度为n*k。最后相加得到一个维度为n*k的结果矩阵z,每一行代表一个网络入侵检测数据点分别与k个聚簇中心的距离;

(5)根据距离计算的结果,寻找每个入侵检测数据点最近的聚簇中心,并把这个数据点归入该聚簇集合。由于部分入侵检测数据点满足全局选择器条件,没有进行距离计算,因此,在完成计算入侵检测数据点所属聚簇的基础上,需要加上这部分数据点所属聚簇,从而获得所有数据点的聚簇中心;

(6)在gpu端按照每个网络入侵检测数据点的所属聚簇标签进行排序和分组,将所有具有同一聚簇标签的数据点归为一组。聚簇标签的排序可以调用cuda提供的thrust库中的sort_by_key()排序函数,这个函数可以根据key值进行排序。由于每一个聚簇中心都有一个相应的标签,调用sort_by_key()排序函数时,把数据点所属聚簇的标签作为key值即可。这样,经过sort_by_key()函数排序后,可以根据排序的情况,把具有相同聚簇标签的入侵检测数据点归为一组;

(7)根据排序和分组的结果,计算新的聚簇中心。计算新的聚簇中心时,gpu开启合理的二维线程格和二维线程块,blockdim.y代表二维线程块y方向上的大小,而griddim.y代表二维线程格y方向的大小,然后为每个线程分配同组内(n-1)/(blockdim.y*griddim.y)个数据点,计算这些网络入侵检测数据点在threadidx.x维度上的和,threadidx.x代表线程块内x方向上的线程号。最后把同组内的入侵检测数据点分别在d个维度上累加求和,根据同组内数据点总数得到每个维度的均值,输出更新之后的聚簇中心;

(8)如果算法迭代次数达到m或k个聚簇中心的距离变化值都小于阈值t,则转步骤(9),否则转步骤(3),继续迭代;

(9)将步骤(8)的计算结果从gpu端拷贝至cpu端,输出k个聚簇中心以及相应的聚簇集合,如果一个聚簇集合的数据量小于总数据量的2%(此值可以根据实际情况设定),则判断该聚簇中的数据为入侵数据,否则为正常数据。

所述步骤(3)采用全局选择器若满足判定条件,则保持该网络入侵检测数据点所属聚簇不变,证明过程如下:

对于一个给定的网络入侵检测数据点x,e(x)代表与该数据点距离最近的聚簇中心,c',c'和e'(x)代表下一轮迭代中与上一轮对应的数据对象,令φ(c)代表d(c,c'),即更新后的中心c'与原中心c的距离偏移量,全局选择器在定义一个网络入侵检测数据点x的所属聚簇中心是否改变时通过一个简单的条件判断。对于每一个数据点x,该算法包含一个全局上界:ue(x)≥d(x,e(x)),一个全局下界:le(x)≤d(x,c),初始化上下界时可以使用x与e(x)的距离作为上界,x与第二近的聚簇中心的距离作为下界。

基于三角不等式的概念,有:

d(x,c')≥d(x,c)-d(c,c')=d(x,c)-φ(c)≥d(x,c)-maxc∈cφ(c)

≥le(x)-maxc∈cφ(c)

同样的有:

d(x,e')≤d(x,e)+d(e,e')=d(x,e)+φ(e)≤ue(x)+φ(e)

所以,当满足判定条件时得到:

即d(x,e')≤d(x,c')。因此,当聚簇中心更新之后,数据点x与所属聚簇中心的距离小于所有与其它聚簇中心的距离,由此可以判断数据点x所属聚簇没有变化。

经过每轮迭代之后,本轮聚簇中心与上一轮的聚簇中心对比,进行距离偏移量计算,得到φ(e)和maxc∈cφ(c),对于没有改变聚簇的入侵检测数据点,下一轮的上界的计算公式为:

ue'(x)=ue(x)+φ(e)

下一轮的下界的计算公式为:

le'(x)=le(x)-maxc∈cφ(c)

证明结束。

本发明的有益效果在于:(1)本发明解决了聚类算法在网络入检测系统每次迭代过程中的冗余计算问题;(2)充分利用了cuda的通用矩阵乘函数,提高了距离计算的并行度;(3)按照聚簇标签排序分组的方法,最小化了聚簇中心更新时的原子内存操作,提高了运算速度。

附图说明

附图1本发明方法的流程图。

具体实施方式

下面结合附图进一步说明本发明的技术方案。

本发明的一种基于cuda的网络入侵检测并行化加速方法,具体的实施步骤如下:

(1)在cpu端初始化n个网络入侵检测数据点的集合r,随机选取k个点作为初始聚簇中心,设置最大迭代次数为m,中心点收敛阈值为t。在gpu端分配网络入侵检测数据点集、聚簇中心、全局上下界以及中心点偏移量的内存空间,将数据拷贝至gpu端;

(2)第一次计算所有入侵检测数据点至k个聚簇中心的距离。具体的计算方法采用步骤(4)的方法进行计算;然后,根据距离计算的结果,把数据点归入距离最近的聚簇中;最后,采用步骤(6)的方法来更新聚簇中心,从而获得全局选择器需要的数据;

(3)对于每一个入侵检测数据点,采用全局选择器判断是否需要进行下一轮迭代。如果入侵检测数据点满足全局选择器判定条件,则转步骤(6)处理,如果不满足,则转步骤(4)处理。全局选择器的判定条件为:

其中,x代表一个网络入侵检测数据点,e代表点x所属聚簇的聚簇中心,ue(x)代表x的全局上界,le(x)代表x的全局下界,φ(e)代表聚簇更新之后聚簇中心e的距离偏移量,c代表所有网络入侵检测聚簇中心的集合,c代表集合中除了e之外的一个聚簇中心,代表聚簇更新之后聚簇中心的最大距离偏移量;

(4)计算所有入侵检测数据点至k个聚簇中心的距离。在gpu端开启n个线程计算入侵检测数据点矩阵x的平方x2,然后开启k个线程计算聚簇中心矩阵y的平方y2,并计算x2+y2;最后,调用cuda提供的通用矩阵乘函数cublassgemm()进行距离计算,即计算n个入侵检测数据点至k个聚簇中心的距离。cublassgemm()函数属于cublas库,实现的矩阵运算如下:

z=alpha*op(a)*op(b)+beta*c

上述公式中alpha取值为-2,beta取值为1。调用cublassgemm()函数时,每个数据点的维度为d,公式中op(a)是n个入侵检测数据点矩阵x的转置,入侵检测数据点矩阵x的维度为d*n,其转置矩阵的维度为n*d。op(b)是聚簇中心矩阵y,其维度为d*k。这样,op(a)和op(b)相乘所得结果矩阵的维度为n*k。c是入侵检测数据点矩阵和聚簇中心矩阵的平方和,即x2+y2,其维度为n*k。最后相加得到一个维度为n*k的结果矩阵z,每一行代表一个网络入侵检测数据点分别与k个聚簇中心的距离;

(5)根据距离计算的结果,寻找每个入侵检测数据点最近的聚簇中心,并把这个数据点归入该聚簇集合。由于部分入侵检测数据点满足全局选择器条件,没有进行距离计算,因此,在完成计算入侵检测数据点所属聚簇的基础上,需要加上这部分数据点所属聚簇,从而获得所有数据点的聚簇中心;

(6)在gpu端按照每个网络入侵检测数据点的所属聚簇标签进行排序和分组,将所有具有同一聚簇标签的数据点归为一组。聚簇标签的排序可以调用cuda提供的thrust库中的sort_by_key()排序函数,这个函数可以根据key值进行排序。由于每一个聚簇中心都有一个相应的标签,调用sort_by_key()排序函数时,把数据点所属聚簇的标签作为key值即可。这样,经过sort_by_key()函数排序后,可以根据排序的情况,把具有相同聚簇标签的入侵检测数据点归为一组;

(7)根据排序和分组的结果,计算新的聚簇中心。计算新的聚簇中心时,gpu开启合理的二维线程格和二维线程块,blockdim.y代表二维线程块y方向上的大小,而griddim.y代表二维线程格y方向的大小,然后为每个线程分配同组内(n-1)/(blockdim.y*griddim.y)个数据点,计算这些网络入侵检测数据点在threadidx.x维度上的和,threadidx.x代表线程块内x方向上的线程号。最后把同组内的入侵检测数据点分别在d个维度上累加求和,根据同组内数据点总数得到每个维度的均值,输出更新之后的聚簇中心;

(8)如果算法迭代次数达到m或k个聚簇中心的距离变化值都小于阈值t,则转步骤(9),否则转步骤(3),继续迭代;

(9)将步骤(8)的计算结果从gpu端拷贝至cpu端,输出k个聚簇中心以及相应的聚簇集合,如果一个聚簇集合的数据量小于总数据量的2%(此值可以根据实际情况设定),则判断该聚簇中的数据为入侵数据,否则为正常数据。

如附图1,本方法首先在cpu中初始化输入的入侵检测数据点并随机选取k个数据点作为初始的聚簇中心,在gpu端分配内存接收cpu传输过来的数据。然后进行一次入侵检测数据点到聚簇中心的聚类过程,从而初始化全局选择器所需的数据,从第二次迭代开始所有入侵检测数据点先经过全局选择器的判断,不符合条件的数据点继续进行基于通用矩阵乘函数的距离计算,随后寻找每个数据点到聚簇中心的最短距离并将它归为该簇集合。接着将符合全局选择器条件的数据点与经过重新距离计算的数据点合并,通过排序函数将所有入侵检测数据点进行排序和分组,然后开启多线程并行计算各个组内数据,得到新的聚簇中心,并判断本轮迭代后所有聚簇中心的距离改变量是否都小于收敛阈值以及是否达到最大迭代次数,如果满足条件则结束迭代。最后将数据从gpu中拷回cpu端并输出,判断各个聚簇集合的数据量是否小于总数据量的2%,若小于则该聚簇中的数据为入侵数据,否则为正常数据。

本说明书实施例所述的内容仅仅是对发明构思的实现形式的列举,本发明的保护范围不应当被视为仅限于实施例所陈述的具体形式,本发明的保护范围也及于本领域技术人员根据本发明构思所能够想到的等同技术手段。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1