基于CUDA的GMM模型快速训练方法及应用(

显存不足  时间:2021-04-03  阅读:()

吴奎,宋彦,戴礼荣(中国科学技术大学电子工程与信息科学系,安徽合肥,230027)摘要由于能够很好地近似描述任何分布,GMM在模式在识别领域得到了广泛的应用.
GMM模型参数通常使用迭代的EM算法训练获得,当训练数据量非常庞大及模型混合数很大时,需要花费很长的训练时间.
NVIDIA公司推出的CUDA技术通过在GPU并发执行多个线程能够实现大规模并行快速计算.
由此,本文提出一种基于CUDA,适用于特大数据量的GMM模型快速训练方法,包括用于模型初始化的K-means算法的快速实现方法,以及用于模型参数估计的EM算法的快速实现方法.
文中还将这种训练方法应用到语种GMM模型训练中.
实验结果表明,与IntelDualCorePentiumⅣ3.
0GHzCPU的一个单核相比,在NVIDIAGTS250GPU上语种GMM模型训练速度提高了26倍左右.
关键词:GMM模型;语种识别;图形处理单元;统一计算设备架构CUDAbasedFastGMMModelTrainingMethodanditsApplicationWuKui,SongYan,DaiLiRong(DepartmentofElectronicEngineeringandInformationScience,UniversityofScienceandTechnologyofChina,Hefei,230027,China)Abstract:Duetoitsgoodpropertytoprovideanapproximationtoanydistribution,GMMhasbeenwidelyappliedinthefieldofpatternrecognition.
Usually,theiterativeEMalgorithmisappliedtoestimateGMMparameters.
Thecomputationalcomplexityatmodeltrainingprocedurewillbecomeveryhighwhenlargeamountsoftrainingdataandlargemixturenumberareengaged.
TheCUDAtechnologyprovidedbyNVIDIACorporationcanperformfastparallelcomputationbyrunningthousandsofthreadssimultaneouslyonGPU.
Inthispaper,afastGMMmodeltrainingimplementationusingCUDAispresented,whichisespeciallyapplicabletolargeamountsoftrainingdata.
Thefasttrainingimplementationcontainstwoparts,theK-meansalgorithmformodelinitializationandtheEMalgorithmforparameterestimation.
Furthermore,thisfasttrainingmethodhasbeenappliedinlanguageGMMstraining.
TheexperimentalresultsshowthatlanguagemodeltrainingusingGPUisabout26timesfasteronNVIDIAGTS250whencomparedtotraditionalimplementationononeofthesinglecoreofIntelDualCorePentiumⅣ3.
0GHzCPU.
Keywords:GMMmodel;Languageidentification;GPU;CUDA1引言由于能够很好地近似描述任何分布,高斯混合模型(GaussianMixtureModel,GMM)在模式识别领域得到了广泛的应用.
GMM模型参数通常使用迭代的EM(Expectation-Maximization)算法[1]训练获得.
EM算法是一个迭代算法,需要对模型初始化,一般采用K-means算法实现EM算法的初始化.
当训练数据量非常庞大及模型混合数很大时,模型训练需要花费很长的时间.
例如,在GMM-UBM(GaussianMixtureModel-UniverseBackgroundModel)模型的语种识别系统[2]中,语种训练样本数非常庞大(如:NISTLRE2007包含14个大语种,对应的SDC[2]训练矢量特征总数为68281155),模型混合高斯数多(一般为2048)计算量巨大.
如果用一个CPU的单核训练模型,那么训练时间就不得不成为一个需要考虑的因素,而并行化处理是加快训练一个有效途径.

可编程GPU(GraphicProcessingUnit,图形处理器单元)的出现,开辟了快速并行处理的新途径.
目前,GPU计算能力和发展速度都超过了传统CPU.
GPU具有大量并行处理的流处理器(StreamProcessers,SP),适合计算密集型的应用.
在NVIDIA公司推出的统一计算设备架构(ComputeUnifiedDeviceArchitecture,CUDA)编程环境中,使用简单且易实现的扩展C语言就能编写GPU并行程序,大大提高了GPU的可编程性.
近期,N.
Kumar等[3]用CUDA实现了GMM模型训练的EM算法,然而这种实现方法需要计算并存放多个阶数与高斯混合数、特征维数和训练样本数成正比的矩阵.
由于显存容量有限,高斯混合数、特征维数和训练样本数的大小受到限制,不能满足训练样本数庞大的情形.
K-means算法在GPU上已有多种实现方法[4-5],尽管如[5]中所报道的方法对类别数和维数没有限制,但同样受到训练样本数的限制.

本文采取分批处理策略,提出了一种改进的基于CUDA的GMM模型快速训练方法,包括用于模型初始化的K-means算法和模型参数估计的EM算法的快速实现方法.
这种GMM模型快速训练方法不受训练样本数的限制,且高斯混合数取值范围可以很大(2到4096),能够满足大部分实际要求,如语种GMM模型训练.
在实现过程中,简化了[3]中繁琐的协方差矩阵更新过程.
实验结果表明,在训练语种GMM模型时,使用这种方法,模型训练速度是传统CPU单核的26倍左右.

本文的组织如下:第二节简要介绍CUDA;第三节描述分批策略下用于训练GMM模型的EM算法和K-means算法在GPU上的实现方法;最后以语种GMM训练为例,给出了这种基于CUDA的GMM模型训练方法的性能.

2CUDA概述NVIDIA公司的CUDA是一种新型的硬件和软件相结合的架构.
CUDA将GPU视为并行计算设备,在计算时自动完成资源的分配和管理,而无需映射到复杂的图形API中,并且使用简单的扩展C即可编写GPU并行程序,极大地提高了GPU的可用性和编程性.
线程(thread)是CUDA中的最小的执行单位,并以线程块(threadblocks)的形式组织起来,执行相同的指令,但处理不同的数据.
执行相同程序的线程块组成一个网格(grid).
所有线程执行的相同的程序称为一个kernel,一个kernel对应一个grid.

线程可以访问多种形式的存储空间.
每个线程都有自己的快速读写的本地寄存器(localregister)和本地存储单元(localmemory).
同一个线程块中的线程可以访问属于该线程块的16KB共享内存(sharedmemory).
线程访问共享内存没有产生bankconflict[7]时,可达到与寄存器同样的速度.
线程还可以访问容量较大的globalmemory,因为没有缓存,读取globalmemory的延时很大.
CUDA提供的(accesscoalescing)机制[7]可以加快对globalmemory的访问.
register和sharedmemory是GPU上的有限资源,需要合理的使用以让尽可能多的blocks和threads同时工作.
CUDA可以直接集成在VS2005或者其他的编译器中.
GPU称为设备(device),CPU称为宿主(host).
host主要负责启动kernel和传输数据,设备负责计算.
Device上的kernel的执行和host是异步的,这样GPU在工作时,CPU还可以做其他任务,当然GPU和CPU是可以同步的.
[7]详细介绍了CUDA.

3分批处理策略下的GMM模型训练在GPU上的实现在EM和K-means算法中,训练样本在计算过程中是相互独立,适合GPU的并行计算.
由于EM算法较为复杂,而K-means算法相对简单,所以我们着重介绍EM算法的快速实现方法,然后再简要地介绍K-means算法的快速实现方法.

3.
1EM算法的矩阵表示首先用矩阵的形式描述EM算法,以更好的介绍EM算法在GPU上的实现过程.
混合数为的GMM模型的密度函数表示为其中是参数集合,,,,分别是第个高斯分量的权重、均值向量和协方差矩阵,且,第个高斯的密度函数为:将所有训练样本集表示成矩阵形式,样本数为,维数为,其中.
上述形式的GMM模型的EM算法迭代公式[6]如下(1)(2)(3)其中是已知的当前模型参数估计值,,称为高斯分量对训练样本的占有率.
实际应用中,协方差矩阵通常取对角阵,所以式(3)又可写为(4)将个高斯分量的参数表示成矩阵形式:权重矩阵;均值矩阵;协方差矩阵,是第个高斯分量的对角协方差矩阵中对角线上的元素构成的向量.
估计模型的参数,也就是去估计上面三个矩阵.
定义三个统计累积量矩阵:权重累积量矩阵,均值累积量矩阵,方差累积量矩阵及阶占有率矩阵,其中,,写成矩阵形式:(5)(6)(7)其中根据式(1、2、4)可以得到参数矩阵更新公式:(8)(9)(10)其中,.
这里在更新协方差矩阵时,充分考虑了协方差是对角阵这一条件.
这样,EM算法的过程可以表示式(5-6)的矩阵运算及式(8-10)的除法运算.
3.
2EM算法在GPU上的实现基于3.
1的分析,本文在GPU上实现EM算法的基本流程基于式(5-10),先计算,然后依次进行计算,其中关键是计算.
权重和均值的更新与[3]相似,但[3]在更新协方差矩阵时需要计算多个阶数较大的矩阵,过程繁琐,而在本文的方法中,只需计算后按式(10)更新,简单明了.

计算时,要对每一个训练样本计算占有率.
[3]中把每一个这样的值存放在GPU的显存中,也就是存储一个阶矩阵.
那么,和的大小都要受到显存容量的限制.
例如GTS250型号的GPU显存有512MB,若取2048,每个数据用32位浮点数表示,那么最多只能取65536,显然这不适用于训练样本数为几千万的情形.
若将几千万个训练样本分成若干等份,每份样本数为,每次GPU只处理一份,的阶数减小为,选取适当的(根据显存大小及的值确定,实验表明取16的倍数,GPU计算效率最高)就可以消除的限制,并且可以取得很大(2到4096),这就是本文采取的分批处理策略.
因为采取分批处理,所以三个累积量矩阵在每一批训练样本处理完之后累加一次,公式如下:(11)(12)(13)其中,分别是第批训练样本矩阵及其占有率矩阵,.
基于上面的分析,在GPU上实现适GMM模型训练的EM算法不是很复杂.
设每批训练样本数为(本文取32768).
定义5个主要的顺序执行的kernel:(1)kernel1:对第批训练样本,计算阶占有率矩阵;在GPU上实现时,每个线程只处理一个样本,即一个线程只计算矩阵中的一行,需要个线程.
假设每个线程块有个线程(一般取16的倍数,本文取256),那么需要个线程块.
次循环计算得到整个矩阵,每次循环计算该批所有训练样本对某个高斯的占有率.

(2)kernel2计算;(3)kernel3计算(4)kernel4计算;(5)kernel5更新参数矩阵步骤(2-4)都是典型的矩阵线性运算,可以通过CUDA的CUBLAS库中高效的矩阵函数cublasSegmm实现.
在实际模型训练中,为防止无限次的迭代,需要预先设定模型似然值变化量改进门限和最大迭代次数,如果变化量小于或迭代次数大于,算法结束,将最后的模型参数送给CPU,否则,继续下一次迭代.

3.
3K-means算法在GPU上的实现[5]中介绍了一种很好的在GPU上实现K-means算法的方法,它的基本方法是:CPU一次性将所有训练样本和初始类中心加载到GPU显存中去,GPU的每个线程计算一个样本或多个样本的类别号传送给CPU.
CPU根据类别号更新类中心,并将新的类中心传给GPU,继续下一次迭代.
同样,由于GPU显存大小的限制,这种方法也只能处理较少的训练样本.
因此,同上述EM算法的实现一样,也必须采用分批处理的策略.
GPU每次只处理个训练样本,每个线程处理一个样本,并将类别号传给CPU,计算类别号的方法与[5]相同.
CPU根据每批训练样本的类别号更新各类的权重、均值和方差累积量,这与EM算法的实现很相似,最后将新的类中心传给GPU,继续下一次迭代.
和EM算法一样,K-means算法也需预先设定类内距离准则函数值变化量改进门限最大迭代次数.

3.
4数据存取格式和程序优化存储器访问方式很大程度上决定了GPU的计算效率,例如,以coalescing和无bankconflict的方式分别访问显存和sharedmemory能最大化利用存储器带宽.
因此,在GPU上实现任何算法时,必须考虑这些因素.
在EM和K-means算法实现中,训练样本和模型参数都存放在容量较大的显存里.
为了能让线程读取训练样本实现coalescing,以达到很快的访问速度,训练样本矩阵须按列存取,这在[3]有详细介绍.
EM算法中,计算矩阵时,同一个blocks里所有的threads需要同时读取当前高斯分量的参数(权重、均值向量、协方差矩阵)计算加权概率密度值,会在显存中产生访问冲突,线程须排队读取,严重降低线程的计算效率.
由于sharedmemory的广播机制[7],本文在实现时,先用一部分线程将当前高斯分量的参数读入到sharedmemory中去,线程在同时访问这些sharedmemory时就不会产生bankconflict,可同时获得参数,大大减少读取时间,从而提到了线程的计算效率.
虽然sharedmemory大小只有16KB,要将当前高斯分量的参数都读入到sharedmemory中,训练样本的维数必然受到限制,.
若每个数据用32位浮点数表示,那么维数最大可取2047,能够满足大多数实际应用(本文使用的语种的SDC特征矢量的维数为56),可以说这种限制可不予考虑.
矩阵也按列存放,这样线程在写矩阵时能实现coalescing.
在K-means算法中,也先将当前类中心读入到sharedmemory中.
前面提到,GPU的kernel执行与CPU是异步的,CPU在GPU计算期间里可以处理其他任务,例如可以读取存放在硬盘中的下一批训练样本数据.
分批处理的训练样本数的选择需要认真考虑.
它受到显存大小、高斯混合数、维数等的限制.
太大,显存不够;太小会导致许多线程空闲.
在本文的两个算法中都取16的倍数,GPU计算效率最高.
用EM算法训练2048混合高斯数、56维的GMM-UBM模型时,本文取为32768(显存为512MB).
K-means算法中,因为没有阶数很大的矩阵,可取大一点,本文取65536.
当总训练样本数不是的倍数时,补充一些样本,并加以特殊的标识,使最后一批训练样本数变为.
GPU在计算时直接丢弃这些补充的样本.
这样做的一个好处是所有的矩阵和向量所需要的显存空间只需分配一次.

最后介绍一下如何减少EM算法的计算量.
对于EM算法,在计算占有率矩阵时,必须要计算,这个值一般很小,为了保证计算精度,求其对数值,即在每次迭代中,上式右边前三项构成的表达式的值不变,可事先计算好放在显存中.
计算矩阵时,将其读到sharedmemory中去,然后再运算.
上式右边最后一项有次除法,可将所有的方差事先取倒数,变除法为乘法,减少计算量.
实验表明这种方法比直接计算要快1.
5倍.
本文要与之比较的CPU实现的EM算法也采用这种方法.

由于GPU的计算精度有限,在K-means算法中,本文中利用Kahan求和公式[8]计算距离提高运算精度.
4实验结果和分析本小节以语种GMM训练为例,给出了这种基于CUDA的GMM模型训练方法的性能及最终语种模型的准确性.
所有的测试都基于NIST07语种数据库(14个大语种,22个方言),采用56维的SDC特征,特征提取时使用了VTLN[9]和FA[10]技术,总训练特征矢量数为68281155,模型采用2048高斯,所有数据都用32bit的单精度浮点数表示.
EM和K-means算法最大迭代次数设为25,改进门限设为0.
0001.

CPU实现的EM和K-means算法用C编写,在VS2005中编译,并在编译时使用VS2005自带的SSE2浮点运算扩展指令.
GPU实现代码在CUDAToolkit2.
2中编译.
PC机配置IntelDualCore3.
0GHzPentiumⅣCPU、512MB内存和GTS250型号的NVIDIA显卡(128个SP,512MB显存).
表1比较了在1449920和68281155个训练样本时,K-means和EM算法一次迭代时的GPU和CPU单核运算时间.
为了验证GPU运算结果的准确性,在GPU和CPU运算时,K-means算法的初始类中心相同,EM算法的初值模型也相同.
从表中看,对于这两个算法,GPU相对CPU提升的速度差不多的,26倍左右,且不依赖训练样本数,这是因为在GPU上实现这两个算法时,对训练样本都进行分批处理,总训练样本数不影响GPU的性能.
依据这样的结果可以推测,如果进行完整的语种GMM训练(先K-means算法训练UBM初值模型,然后EM算法训练UBM模型及各语种GMM模型)GPU运算速度也应该是CPU单核的26倍左右.
GPU和CPU运算的结果之间的误差也是很小的(以CPU的为正确结果),68281155个训练样本时,在EM算法中,权重、均值和方差的最大相对误差只有0.
0002%.
在K-means中,这些误差最大也只有0.
0022%左右,造成误差的原因是GPU只支持单精度运算,计算精度有限.

为了能用CPU很快的得到语种GMM模型(单CPU训练模型速度太慢)去验证GPU得到的语种模型的准确性,本文中使用DTM(DistributedTaskMachine)[11]分布式计算技术加快基于CPU实现的语种模型训练速度.
DTM技术将一个网络中的所有计算资源(计算机CPU核)综合起来,完成独立的计算任务.
使用DTM训练UBM模型时,先将训练样本分成若干份(根据网络中可用CPU核的个数设定),每一颗核计算一份训练样本,保存对应的累计统计量(3.
1小节有定义),最后综合所有核的累计统计量更新模型;在训练各语种模型时,每颗核负责训练一个或多个语种模型.

本实验中,DTM使用20颗核.
表2给出了GPU和DTM在完整的语种GMM训练过程中每一步(K-means算法训练UBM初值模型、EM算法训练UBM模型及各语种GMM模型)的运算时间.
它们只在用K-means算法训练UBM初值模型时使用相同的类中心.
从表中看GPU花费的时间都比DTM少(DTM训练各语种GMM模型的时间8小时是一个大概值,因为某些核承担多个语种的训练任务,所以比UBM模型训练时间长).
GPU得到的UBM初值模型和DTM的结果的相对误差比较小(权重0.
0484%,均值0.
1183%,方差0.
0668%);GPU得到的各语种GMM模型平均相对误差中,权重0.
35%,均值0.
63%,方差0.
48%.
造成这种误差较大是由于用GPU得到的UBM模型初值与DTM的结果不同,但从最后的模型识别性能看,这种误差并不导致语种识别性能有大的差别,可以忽略不计.
表3给出了两种方法得到的语种GMM模型的语种识别性能(EER).
比较之,GPU得到的语种GMM模型的识别性能与DTM得到的模型相当,这也说明GPU训练得到的语种GMM模型是准确的.

5总结和展望本文提出了一种改进的基于CUDA的GMM模型快速训练方法,包括用于模型初始化的K-means算法和模型参数估计的EM算法的快速实现方法.
这种GMM模型快速训练方法采用分批处理策略,不受训练样本数的限制,且高斯混合数取值范围很大.
实验结果表明,在训练语种GMM模型时,这种基于GPU的模型训练速度比基于单核CPU的快26倍左右,大大缩短模型训练时间,而且得到的语种模型的识别性能与CPU得到的相当.
相对文中提到的DTM技术,本文提出的方法只需要千元左右的NVIDIA显卡,不用购买昂贵的多核高性能服务器,节省资金成本.
未来的研究工作包括基于分布式的GPU大规模训练样本条件下的统计模型训练及进一步优化程序.
最后,本文的工作在其他更多领域中具有可借鉴意义.

表1:一次迭代时GPU和CPU运算时间训练样本数算法CPU时间GPU时间速度提升1449920EM584.
3s22.
06s26.
49xK-means410.
86s15.
7s26.
16x68281155EM440.
72min17.
01min25.
9xK-means334.
72min11.
45min29.
23x表2:DTM和GPU模型训练时间DTM(h)GPU(h)UBM初值6.
04.
7UBM5.
874.
317所有语种GMM8.
03.
63表3:DTM和GPU得到的语种GMM模型性能测试时长EERDTMGPU3s19.
51%19.
50%10s7.
23%7.
23%30s2.
45%2.
46%6参考文献[1]DempsterAP,LairdNM,RubinDB.
Maximum-likelihoodfromincompletedataviatheemalgorithm[J].
RoyalStatist.
Soc.
Ser.
B,1977,39(1):1-38.
[2]Torres-CarrasquilloPA,SingerE,KohlerMA.
etal.
ApproachestolanguageidentificationusingGaussianmixturemodelsandshifteddeltacepstralfeatures[C]//ProcICSLP2002.
Colorado,USA:[s.
n.
],2002:89-92.
[3]KumarN,SatoorS,BuckI.
FastparallelexpectationmaximizationforGaussianmixturemodelsongpususingcuda[C]//Proc11thIEEEInternationalConferenceonHighPerformanceComputingandCommunications.
2009:103–109.
[4]BaiHong-tao,HeLi-li,OuyangDan-tongetal.
K-MeansoncommodityGPUswithCUDA[C]//Procthe2009WRIWorldCongressonComputerScienceandInformationEngineering.
Washington,DC,USA:IEEEComputerSocietyPress,2009:651-655.
[5]ZechnerM,GranitzerM.
AcceleratingK-MeansontheGraphicsProcessorviaCUDA[C]//Procthe2009FirstInternationalConferenceonIntensiveApplicationsandServices.
Washington,DC,USA:IEEEComputerSocietyPress,2009:7-15.
[6]BilmesJA.
AgentletutorialoftheEMalgorithmanditsapplicationtoparameterestimationforgaussianmixtureandhiddenmarkovmodels[R].
ISCITechnicalReportTR-97-021,USA:ISCI,1998.
[7]NVIDIACUDAProgrammingGuide-version2.
2availableashttp://www.
nvidia.
com/object/cuda_develop.
html.
[8]GoldbergD.
Whateverycomputerscientistshouldknowaboutfloatingpointarithmetic[J].
ACMComput.
Surv,1991,23(1):5–48.
[9]WongE,SridharanS.
MethodstoImproveGaussianMixtureModelBasedLanguageIdentificationSystem[C]//ProcICSLP2002.
Colorado,USA:[s.
n.
],2002:93-96.
[10]付强,宋彦,戴礼荣.
因子分析在基于GMM的自动语种识别中的应用.
中文信息学报,2009,23(24):77-81.
[11]PandeyN,SharmaG.
K.
StartupcomparisonformessagepassinglibrarieswithDTMonlinuxclusters[J].
TheJournalofSupercomputing,January,2007,39(1):59-72.
作者简介:吴奎(1989-),男,硕士研究生,研究方向:语音信号处理,Email:wukui@mail.
ustc.
edu.
cn;宋彦(1972-),男,博士,讲师,研究方向:音、视频内容分析与检索;戴礼荣(1962-),男,博士,教授,研究方向:数字信号处理和模式识别.

欧路云:美国CUVIP线路10G防御,8折优惠,19元/月起

欧路云新上了美国洛杉矶cera机房的云服务器,具备弹性云特征(可自定义需要的资源配置:E5-2660 V3、内存、硬盘、流量、带宽),直连网络(联通CUVIP线路),KVM虚拟,自带一个IP,支持购买多个IP,10G的DDoS防御。付款方式:PayPal、支付宝、微信、数字货币(BTC USDT LTC ETH)测试IP:23.224.49.126云服务器 全场8折 优惠码:zhujiceping...

hosteons:10Gbps带宽,免费Windows授权,自定义上传ISO,VPS低至$21/年,可选洛杉矶达拉斯纽约

hosteons当前对美国洛杉矶、达拉斯、纽约数据中心的VPS进行特别的促销活动:(1)免费从1Gbps升级到10Gbps带宽,(2)Free Blesta License授权,(3)Windows server 2019授权,要求从2G内存起,而且是年付。 官方网站:https://www.hosteons.com 使用优惠码:zhujicepingEDDB10G,可以获得: 免费升级10...

BuyVM($5/月),1Gbps不限流量流媒体VPS主机

BuyVM针对中国客户推出了China Special - STREAM RYZEN VPS主机,带Streaming Optimized IP,帮你解锁多平台流媒体,适用于对于海外流媒体有需求的客户,主机开设在拉斯维加斯机房,AMD Ryzen+NVMe磁盘,支持Linux或者Windows操作系统,IPv4+IPv6,1Gbps不限流量,最低月付5加元起,比美元更低一些,现在汇率1加元=0.7...

显存不足为你推荐
太空国家目前共有几个国家登上太空?sherylsandbergLean In是一个怎样的组织5xoy.comhttp www.05eee.comm.kan84.net经常使用http://www.feikan.cc看电影的进来帮我下啊javlibrary.comImage Library Sell Photos Digital Photos Photo Sharing Photo Restoration Digital Photos Photo Albumssodu.tw给个看免费小说的网站www.1diaocha.com哪个网站做调查问卷可以赚钱 啊bk乐乐BK乐乐和沈珂什么关系?59ddd.comarmada m300什么装系统鹤城勿扰齐齐哈尔电视台晴彩鹤城是哪个频道
fc2新域名 域名投资 站群服务器 表单样式 parseerror 新站长网 元旦促销 web服务器架设 php空间推荐 域名与空间 阿里云邮箱个人版 阿里云个人邮箱 密钥索引 塔式服务器 ubuntu安装教程 pptpvpn 瓦工技术 ddos攻击器下载 电脑主机嗡嗡响 灵动鬼影实录剧情 更多