CN112380003B - 一种gpu处理器上的k-nn的高性能并行实现装置 - Google Patents
一种gpu处理器上的k-nn的高性能并行实现装置 Download PDFInfo
- Publication number
- CN112380003B CN112380003B CN202011203928.1A CN202011203928A CN112380003B CN 112380003 B CN112380003 B CN 112380003B CN 202011203928 A CN202011203928 A CN 202011203928A CN 112380003 B CN112380003 B CN 112380003B
- Authority
- CN
- China
- Prior art keywords
- thread
- matrix
- minimum value
- data
- gpu
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/50—Allocation of resources, e.g. of the central processing unit [CPU]
- G06F9/5005—Allocation of resources, e.g. of the central processing unit [CPU] to service a request
- G06F9/5027—Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resource being a machine, e.g. CPUs, Servers, Terminals
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/50—Allocation of resources, e.g. of the central processing unit [CPU]
- G06F9/5005—Allocation of resources, e.g. of the central processing unit [CPU] to service a request
- G06F9/5027—Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resource being a machine, e.g. CPUs, Servers, Terminals
- G06F9/5044—Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resource being a machine, e.g. CPUs, Servers, Terminals considering hardware capabilities
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06N—COMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
- G06N20/00—Machine learning
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Artificial Intelligence (AREA)
- Computer Vision & Pattern Recognition (AREA)
- Data Mining & Analysis (AREA)
- Evolutionary Computation (AREA)
- Medical Informatics (AREA)
- Computing Systems (AREA)
- Mathematical Physics (AREA)
- Management, Administration, Business Operations System, And Electronic Commerce (AREA)
Abstract
本发明提供了一种GPU处理器上的K‑NN的高性能并行实现装置,用于提高在GPU处理器上分类的并行加速实现。本发明装置包括:数据读入模块将应用场景中的训练数据和测试数据存成矩阵形式;样本距离计算模块计算每个测试样本与所有训练样本的距离;Top‑K选择模块利用预训练好的决策树模型判断执行粒度,包括线程级别优化、线程束级别优化、线程块级别优化、多线程块级别优化以及基于基数排序优化,选取前k个元素;标签选择模块为测试样本设置类别标签。本发明使用基于分治法的Top‑K并行框架,大大减少不必要的操作,能更充分的利用硬件资源,达到在GPU处理器上提高K‑NN并行效率、实现时间性能加速的目的。
Description
技术领域
本发明属于机器学习中的分类算法在计算机上实现的并行加速研究领域,具体涉及K-NN算法在通用的Nvidia GPU处理器上的高性能并行实现装置。
背景技术
在机器学习、计算机视觉、模式识别、计算几何学以及生物信息学等领域,对目标数据分类是基本都涉及到的问题。数据分类可描述为近邻搜索这样一个基本问题,它是通过在已知数据集中寻找与目标数据相似的数据来确定目标数据类别的过程。K最邻近(K-NN)算法是基于近邻搜索基础上提出来的,它通过在已知数据集中查找与目标数据最相近的k个数据项,并依据这k个数据项类别来确定目标数据类别。以比较常见的电影推荐系统为例,使用KNN算法做近邻搜索可以帮助网站管理者根据用户历史观看记录,对用户偏好进行预测,同时进行推荐,以提升网站的访问量。相比于其他机器学习算法来说,K-NN属于非参数算法,不需要调整参数过程。实践表明,在数据量足够大的情况下往往能获得较高准确率。大数据时代的到来,不仅代表数据量的大幅度增加,样本数据的特征维度也从原来的几十维上升到了数以千计,相应的,对计算速度也提出了更高的要求,因此,研究K-NN的并行加速对于实际应用是非常重要且有意义的。
GPU(图形处理器)是由英伟达公司在发布绘图处理芯片时首先提出的概念,GPU是一种特殊类型的处理器,具有数百或数千个内核,经过优化,可并行运行大量计算。目前使用GPU对K-NN算法进行优化加速的大多数研究,都取得了不错的性能提升。在GPU设备端上实现K-NN算法,在进行分类时,首先需要在GPU上设置K-NN算法的内核函数参数,分配线程数,内核函数将被调度在GPU上并行计算,得到测试数据的距离和所属的类别。对于大规模数据样本,K-NN的计算距离矩阵的过程跟基础线性代数库(BLAS)中的矩阵乘矩阵(GEMM)函数的计算模式有很大的相似性,几乎所有的优化操作都通过采用GEMM的并行化方案来计算K-NN距离矩阵计算阶段的各样本间的距离,但是在完成计算密集型的距离计算阶段后,选择最近的k个点成为这些优化工作普遍遇到一个性能优化瓶颈,我们把选择最近的k个点的过程称为Top-K过程。Pan等人(Pan J,Manocha D.Fast GPU-based locality sensitivehashing for k-nearest neighbor computation[C]//Proceedings of the 19th ACMSIGSPATIAL international conference on advances in geographic informationsystems.ACM,2011:211-220.)在他们的工作中用实验说明Top-K过程占据他们优化后KNN算法95%的时间。目前单GPU上执行K-NN最好的实现方案是XiaoXing Tang等人(Tang X,Huang Z,Eyers D,et al.Efficient selection algorithm for fast k-nn search ongpus[C]//2015IEEE International Parallel and Distributed ProcessingSymposium.IEEE,2015:397-406.)提出的,该方案中从存放数据的数据结构,利用缓冲减少计算分支,利用树结构减少操作次数三个角度提出优化方案,但本质上没有解决Top-K过程中最为严重的数据依赖的问题,具有优化局限性。另外ZhengYuan Xue在他们的工作(XueZ,Li R,Zhang H,et al.DC-Top-k:A Novel Top-k Selecting Algorithm and ItsParallelization[C]//2016 45th International Conference on Parallel Processing(ICPP).IEEE,2016:370-379.)中提出了一个面向并行友好的Top-K选择方案,并给出了对应的MPI(一个通信协议,多用于高性能计算领域集群中的跨机器通信)实现,在该方案中,将待选择数组分为k个小组,得到阈值后对原数组进行过滤,得到一个数据量只和k相关的候选集,最终对候选集执行Top-K得到最终的结果,大大减少了选择过程中的数据依赖,但该方案缺乏精细调优,由于算法的性能和k的大小相关,应用于GPU这种平台上时,计算资源并没有被充分利用。因此,在目前大数据的背景下,在GPU平台上开发一套并行化、更高效的K-NN的执行是必需的。
发明内容
本发明的目的是设计并实现了一种基于分治法Top-K的K-NN并行实现框架,克服K-NN中执行Top-K过程中存在的依赖问题,根据实际应用的问题规模,采用预训练的决策树和线性回归模型,确定不同的分块并行方式,从而尽可能的充分利用硬件平台计算资源,提高利用K-NN进行大数据目标分类的速度。
本发明提供了一种GPU处理器上的K-NN的高性能并行实现装置,包括:数据读入模块,样本距离计算模块,Top-K选择模块,以及标签选择模块。
所述的数据读入模块,用于将应用场景中的训练数据和测试数据存成训练样本矩阵和测试样本矩阵,并对输入的数据进行检测;数据读入模块对输入的数据参数进行检测是指,检测训练样本和测试样本的个数、维度是否均为正数并且训练样本与测试样本的维度是否相同,若均是,则数据检验合格,否则,提示输入的数据有误。
所述的样本距离计算模块,读取训练样本矩阵与测试样本矩阵,计算每个测试样本与所有训练样本的距离,形成距离矩阵。
所述的Top-K选择模块,选取距离矩阵中每行距离最小的前k个元素,并将所选元素对应的训练样本的下标存储在一个n×k的下标矩阵中,输入给标签选择模块。
所述的Top-K选择模块,对距离矩阵的每行的m个元素,执行:首先,根据Top K选择中设定的k值,将m个元素分到k个组中;其次,利用预训练好的决策树模型判断优化方案的执行粒度,执行粒度包括线程级别优化、线程束级别优化、线程块级别优化、多线程块级别优化以及基于基数排序优化;然后,对k组元素,当执行线程级别优化、线程束级别优化、线程块级别优化或多线程块级别优化方案时,在GPU上开启k个线程、线程束、线程块或多线程块,选取每一组元素中的最小值,再从k个最小值中选取最大值作为阈值;利用阈值重新遍历m个元素,将比阈值小的元素放到候选集合中;对候选集合中按照距离值排序,输出距离值最小的前k个元素;当在GPU上执行基于基数排序优化方案时,对m个元素进行全排序,获得距离值最小的前k个元素。
所述的标签选择模块根据Top-K选择模块最终选择的k个距离值和对应的训练样本的下标,获得k个训练样本的目标类别标签,统计每个目标类别标签出现的次数,以出现次数最多的目标类别标签作为测试样本的类别标签。
所述的数据读入模块首次对输入的数据进行分块处理,当输入的训练数据或测试数据的样本数量超过设置的阈值n′时,此时对训练数据或测试数据进行分块处理,一次处理n′个测试样本。
所述的Top-K选择模块中,结合GPU平台的特性,提供使用一个线程计算一个组内最小值的优化方案,每个线程首先通过计算得到组内的最小值并存储在共享存储中,线程块内利用一个线程束对共享存储中存储的最小值进行最大值规约,得到线程块内的局部最大值,最后线程块之间再通过原子操作对全局存储中的最大值进行更新,得到最终的阈值。
所述的Top-K选择模块中,结合GPU平台的特性,提供使用一个线程束计算一个组内最小值的优化方案,每个线程束通过CUDA提供的warp shuffle操作规约得到最小值,并将结果存在线程块内部的共享存储中,线程块内利用一个线程束对共享存储中存储的最小值进行规约,得到线程块内的局部最大值,最后线程块之间再通过原子操作对全局存储中的最大值进行更新,得到最终的阈值。
所述的Top-K选择模块中,结合GPU平台的特性,提供使用一个线程块计算一个组内最小值的优化方案,每个线程块内部的线程束先通过CUDA提供的warp shuffle操作规约得到局部最小值存储在共享存储中,再利用一个线程束对共享存储中的局部最小值进行规约,得到组内最小值。线程块之间再通过原子操作对全局存储中的最大值进行更新,得到最终的阈值。
所述的Top-K选择模块中,结合GPU平台的特性,提供使用多个线程块计算一个组内最小值的优化方案,每个线程块内部的线程束先通过CUDA提供的warp shuffle操作规约得到局部最小值存储在共享存储中,再利用一个线程束对共享存储中的局部最小值进行规约,得到线程块的组内最小值。线程块之间先通过原子操作更新组内最小值,再对全局存储中的最大值进行更新,得到最终的阈值。
所述的Top-K选择模块中,提供基于基数排序优化方案,对每行的m个元素进行全排序,并返回距离值最小的前k个元素作为结果。
所属步骤3中,结合五种针对不同问题规模的优化方法,提出使用决策树和线性回归模型,根据传入数据集的规模和选择参数k值的大小,选择最优的并行实现方法,以达到充分利用计算资源的目的。其中决策树模型负责在五种不同优化方法间进行选择,线性回归模型决定在多个线程块实现中,负责处理一个组的线程块的个数。
本发明与现有技术相比,具有如下优点和积极效果:
(1)本发明针对在GPU并行优化瓶颈Top-K选择阶段,克服了传统Top-K过程自身的依赖问题,使用了一种基于分治法的Top-K并行框架,可根据输入的样本数据的规模自适应选择并行优化执行框架,从而能更充分的利用硬件资源,减少了Top-K过程中的数据依赖,同时筛选得到的候选集中元素的个数和k相关,大大减少了不必要的操作,达到在GPU处理器上提高K-NN并行效率、实现时间性能加速的目的。
(2)本发明在Top-K选择模块中,针对不同样本数据规模,使用决策树选择使用那个并行框架,所提供的Top-K选择模块中实现了五种并行优化框架,使得在实际应用中,本发明装置能根据输入问题规模的大小,自适应选择最为适合的优化并行框架,达到相对较好的性能。同时,本发明在Top-K选择模块中,在使用多线程块并行优化框架时,还使用了线性回归模型来计算最优的线程块个数,使得GPU处理器上的计算资源得到合理使用且不被浪费。
(3)本发明在样本距离计算模块中,调用CUBLAS提供的矩阵乘(GEMM)接口参与计算,并充分利用GPU为每一个线程块提供的共享存储,提高了K-NN并行化程度,加快了目标识别速度。
附图说明
图1为本发明基于通用GPU处理器的K-NN的并行实现装置的示意图;
图2为本发明中重点优化性能瓶颈Top-K选择模块的实现流程图;
图3为在Tesla P100平台上,本发明与其他实现方法在时间性能的对比图;
图4为在Tesla P100平台上,本发明对不同数据集的适应情况对比图;
图5为在Tesla P100平台上,本发明相比于KNN baseline并行优化方法在真实数据集下的加速比。
具体实施方式
下面将结合附图和实施例对本发明作进一步的详细说明。
本发明实施例中以经典应用场景,识别手写数据集MNIST为例,来说明本发明方法的实现。手写数据集MNIST由不同人手写的0至9的数字构成,每个样本的尺寸为28×28像素,以二进制格式存储,MNIST手写数字识别模型希望能根据输入的一张手写数字图像,识别手写图像是哪个数字,使用K-NN作为搭建手写数字识别模型的算法,每当输入一个新的手写数字图像,计算该图像和所有已知训练样本中图像的像素点之间的距离,并存储在一个距离矩阵中,随后选择与该图像最近的k个训练样本,结合它们各自的类别,最终投票选取数量最多的类别作为输入手写数字图像的类别并返回。
本发明实施例中涉及的数据实验基于NVIDIA Tesla P100处理器,但对GPU型号并没有限制。NVIDIA Tesla P100是英伟达公司运用NVIDIA Pascal GPU架构提供的统一平台,该GPU具有56个SM(流式多处理器)共3584个核心,同时提供5.3Tflops的双精度浮点计算峰值和10.6Tflops的单精度浮点计算峰值,具有12GB的GDDR5X显存,可提供高达732GB/s的带宽。每个SM有48KB的共享存储。
CUDA是由NVIDIA推出的通用并行计算架构,该架构使得GPU能够用于解决通用的复杂计算问题,同时CUDA C作为C语言的一个扩展,仅在C语言的基础上引入较少的新语法和结构,对开发者来说比较友好。
在使用本发明前,要获得应用场景中待分类目标的训练数据集和测试数据集,通过训练数据集来进行模型训练,通过测试数据集来进行目标分类效果的验证。本发明实施例中,将手写数据集MNIST分为训练样本数据集和测试样本数据集,对训练样本中标记对应的识别目标类别,即对应0~9中哪个数字,每个训练样本和测试样本均是以2进制形式存储的28×28像素大小的图片。本发明实施例中利用本发明装置实现高效的手写数字识别。
本发明提供了一种基于通用GPU处理器的K-NN的高性能并行实现装置,如图1所示,在GPU处理器上实现的功能模块包括:数据读入模块1,样本距离计算模块2,Top-K选择模块3,以及标签选择模块4。下面对各模块的实现进行说明。
数据读取模块1,用于读入训练数据和测试数据,并对应存储成样本矩阵,放入GPU的全局存储空间中。设将输入的训练数据存成一个m×d1维的样本矩阵,m为训练样本的个数,d1为训练样本的维度,将输入的测试数据存成一个n×d2维的样本矩阵,n为测试样本的个数,d2为测试样本的维度;数据读入模块1再对输入训练数据和测试数据的参数m,n,d1,d2进行检查,若m,n,d1,d2均为正数且d1=d2则表示数据检查合格,否则表示数据检验不合格,提示输入数据有误,需要重新输入。若测试样本数据集过大,无法一次性放入GPU的全局存储中,此时,数据读取模块1首先需要对测试数据进行分块处理,在数据读取模块1中预设一个样本大小阈值n′,当超过该阈值时,则对数据按照n′的大小进行分块,每次读入n′大小的数据块,存储成样本矩阵并进行检测。如测试样本数据n远远大于n′,此处一次处理n′个测试样本数据的预测,然后利用本装置对测试样本数据循环执行n/n′次,完成所有测试样本数据的预测。
本发明实施例中,每张28×28像素大小的图片被转化为一个行向量存储,长度是28*28=784,每一个值代表一个像素点。因此,本发明实施例中,训练样本和测试样本的维度是指手写数据图片的行向量长度。此外,设训练数据为6万张,测试数据有1万张,则对应上面的参数n=10000,m=60000。训练样本的标签为数字0~9。
样本距离计算模块2计算每个测试样本和所有训练样本的距离,并将距离结果存储在一个n×m的距离矩阵D中。本发明采用欧式距离确定两个样本间的距离。矩阵D中的第i行第j列元素为第i个测试样本与第j个训练样本的欧式距离,可以表示为其中,qi为第i个测试样本,rj为第j个训练样本;如果用NQ表示矩阵‖Q‖,它的第i行中每个元素都是‖qi‖;用NR表示矩阵‖R‖,它的第j列中每个元素都是‖rj‖。这样整个距离矩阵就可以表示为D=NQ+NR-2QTR。矩阵Q、R分别表示训练样本矩阵与测试样本矩阵。上角标T表示转置。
计算距离矩阵是一个典型的计算密集型操作,非常利于并行处理,其算法复杂度为O(n×m×d),其中m为训练样本的个数,n为测试样本的个数,d为训练样本和测试样本的特征维度,d=d1=d2。本发明采用GEMM替换常规优化方法。CUBLAS是由NVIDIA针对自己的GPU和CUDA平台对标准的线性代数库BLAS的优化产物。所以可以直接调用CUBLAS提供的矩阵乘(GEMM)接口计算出矩阵M的结果。而R和Q的形状和D不匹配,实际上,计算过程只需要用到R和Q对角线上的元素,使用单层循环,对矩阵R和矩阵Q的对角线元素分别进行乘积运算,并在D的对应行和列上进行广播操作。具体地,样本距离计算模块2在GPU上的实现包括如下过程:
(1.1)调用CUBLAS的GEMM计算-2QTR,记为M。
(1.2)计算NQ,NR,由于NQ一行的元素和NR一列的元素都是相同的,所以可以采用向量对原矩阵进行简化,优化不必要的存储空间,将优化后的向量记为AQ和AR。在GPU上启用一维的线程网格,每一个线程负责计算AQ或AR中的一个元素。在计算AQ的线程中,第i号线程负责计算矩阵Q中的第i行和矩阵QT的第i列乘积的结果。在计算AR的线程中,第j号线程负责计算矩阵R中的第j行和矩阵RT的第j列乘积的结果。
(1.3)对NQ,NR在M上进行广播,在GPU上启用m×n的二维线程网格,在逻辑上属于第i行、第j列的线程负责将NQ中的i个元素和NR中的第j个元素加到Mi,j上。Mi,j是矩阵M的第i行第j列元素。由于二维线程网格中同一行或同一列的线程会访问NR或NQ中的同一个元素,为减少重复的访存操作,充分利用GPU为每一个线程块提供的共享存储,将同一个线程块需要访问的NR和NQ中的元素提前加载到共享存储中。
对于本发明实施例,测试样本数据不需要进行分块,硬件设备可以一次性放下所有数据。
Top-K选择模块3读取距离矩阵D,选取D中每行距离最小的前k个元素,并将所选元素对应的训练样本的下标存储在一个n×k的下标矩阵中。由于测试点和测试点间没有依赖,故在距离矩阵中行与行之间执行的是相同无依赖的选择操作。GPU上可并行对距离矩阵D的每行的k个元素进行选取。
Top-K选择是一个典型的访存受限操作,如果采用常规的堆结构维护,算法复杂度为O(m×n×logk)。本发明中Top-K选择模块3是优化的重点,将从矩阵D一行的m个元素中寻找距离值最小的前k个元素的问题,分为没有依赖的k个子问题,基于分治法的并行计算框架来解决该问题,减少了数据之间的依赖,同时采用决策树在不同优化方案中进行选择,使计算资源能被尽可能的利用。
如图2所示,将距离矩阵D中每行的m个元素作为一个数组,Top-K选择模块3根据Top K选择中设定的k值,对每一行数组,将其中的m个元素分到k个组中;然后,分别选出每一组的局部最小值,得到的k个局部最小值;接着,选取k个局部最小值中最大的元素值作为阈值;再重新遍历m个元素,将比阈值小的元素放到候选集合中;最后,在候选集合中选择Top K。Top-K选择模块3是解决从每行m个元素中选择k个元素的优化问题,具体地,Top-K选择模块3在GPU上的实现包括如下过程:
(2.1)根据优化问题规模的两个参数—训练样本个数m和参数k,利用预训练好的决策树模型,输出优化方案的标号。决策树是根据不同优化实现方法在GPU处理器下对输入的不同优化问题规模预训练得到的,决策树输出优化方案的标号,其中,0代表线程(thread)级别优化,1代表线程束级别优化,2代表线程块级别优化,3代表多线程块级别优化,4代表基于基数排序的优化。根据所输出标号,执行相应粒度的优化。一个线程块包含多个线程束,一个线程束包含多个线程。
(2.2)当决策树输出标号为0时,Top-K选择模块3在GPU上分配k个线程,用一个线程处理一个组,得到组内最小值后,更新得到组间最大值作为阈值。每个线程首先得到其负责组内的最小值,并将结果存储在对应线程块内的共享存储中。一个线程块内的共享存储最多存放块内线程数个最小值,然后在线程块内,对共享存储中存放的组内局部最小值进行最大值规约,为了尽可能的减少内核调用过程中的开销,每个线程块得到块内最大值后,原子更新全局存储中的最大值,即组间最大值。然后跳转至步骤(2.7)。
(2.3)当决策树输出标号为1时,Top-K选择模块3在GPU上分配k个线程束,用一个线程束处理一个组,得到组内最小值后,更新得到组间最大值作为阈值。若一个线程束中有32个线程,那么最终分配了32×k个线程。一个线程束中的线程遵循在同一时间同时执行一条指令,结合CUDA提供的warp shuffle指令,可以通过规约操作高效的得到组内最小值。为了尽可能的减少内核调用过程中的开销,利用线程块内的共享存储存放k’=线程块中的线程数/32个组的局部最小值,并调用一个线程束,求得共享存储中的所有局部最小值中的最大值,并原子更新全局存储中的最大值,即组间最大值。然后跳转至步骤(2.7)。WarpShuffle指令用于预处理器warp线程间的数据访问。
(2.4)当决策树输出标号为2时,Top-K选择模块3在GPU上分配k个线程块,用一个线程块处理一个组,得到组内最小值后,更新得到组间最大值作为阈值。分配的k个线程块中包含(k×线程块中的线程数)个线程。线程块内以线程束为单位,每个线程块内的线程束结合CUDA提供的warp shuffle指令,通过规约得到局部最小值,并记录在线程块内的共享存储中。而后用一个线程束对共享存储中存放的局部最小值进行规约,得到组内的最小值,并原子更新全局存储中的最大值,即组间最大值。然后跳转至步骤(2.7)。
(2.5)当决策树输出标号为3时,Top-K选择模块3在GPU上分配k个多线程块,设用b个线程块处理一个组,得到组内最小值后,更新得到组间最大值作为阈值。线程块的个数b和组内元素个数(m/k)线性相关,使用线性回归模型,在给定m和k下,拟合得到最优的b值。那么在GPU上总共分配了(k×b×线程块中的线程数)个线程。每个线程块内的线程束先结合CUDA提供的warp shuffle指令,通过规约得到局部最小值存储在对应线程块的共享存储中,再利用一个线程束对共享存储中的局部最小值进行规约,得到组内最小值。b个线程块之间先通过原子操作更新组内最小值,再对全局存储中的最大值进行更新,得到最终的阈值,求解得到局部最小值,并原子更新全局存储中的组内全局最小值。最后,原子更新全局存储中的最大值,即组间最大值。然后跳转至步骤(2.7)。
(2.6)当决策树输出标号为4时,Top-K选择模块3执行基于基数排序优化方案。基数排序由于位与位之间没有依赖,是一个比较适合并行的排序算法,在很多高性能库中,也有对应高效的实现,如Thrust,CUB等。故当问题规模不大时,采取对数据全排序后,直接返回前k个值作为结果并结束流程。
(2.7)当获得组间最大值后,将它作为阈值和数组中所有m个元素进行比较,并将所有小于阈值的元素加入候选集,由于多个线程可能同时向候选集中添加新的元素,所以会产生写冲突。为了避免写冲突,这里本发明利用最新CUDA所提供的原子操作,它能够自动支持warp聚合操作来减少原子冲突操作的数量,提高程序性能。利用硬件平台提供这种原子操作特性,只需维护一个全局的下标即可,每当一个线程需要加入候选集元素,只需要对全局下标进行原子加1后写入。
(2.8)对候选集进行基数排序后,选择前k个最小距离值,k个值和对应训练样本的下标即为所求,这里基于的基数排序和步骤(2.6)中的优化思路一致。这样处理原因:一方面经过筛选后需要排序的元素较少,另一方面实际K-NN应用中k值往往相对比较小,所以整个排序开销也会很小。
在进行Top-K选择时,k的大小根据具体的数据规模,由决策树自动决定。本发明实施例,当k=16,选取多线程块处理方案时,获得的标签识别的正确性最高。
标签选择模块4使用简单的统计选举完成对标签的统计,根据Top-K选择模块3最终输出的k个距离值和对应的训练样本的下标矩阵,对每个测试样本,获得k个训练样本的目标类别标签,统计每个目标类别标签出现的次数,以出现次数最多的目标类别标签作为测试样本的类别标签。
本发明实施例中,对每个测试样本添加标签向量,根据标签向量可知该测试样本所代表的数字。
测试试验及结果:
本发明的测试平台为Nvidia Tesla P100平台,如图3所示,是在n=215,k=[21,214]的均匀分布的模拟测试数据集下,本发明的GPU处理器上的K-NN的高性能并行实现装置(图3中简称基于规约的选择))相比于参考优化实现(图3中简称fgknn中的选择)以及基于并行全排序的实现(图3中简称全排序)的运行时间对比。其中,fgknn中的选择的实现可参见参考文献https://sites.google.com/site/xxtang1988/projects。
图3为Top-K在n=215,k∈[21,214]下的性能,其中纵坐标表示时间(单位毫秒),横坐标为k取对数的值,当logk=13和logk=14时,fgknn中的选择无法运行,所以没有对应的实验结果。从图3统计的性能数据可以看出,本发明相比于其他两种,在所有k值的情况下,性能都有比较明显的优势。
图4为Top-K在n=224,220,215,k∈[21,213]的性能,其中纵坐标表示时间(单位毫秒),横坐标为k取对数的值。图4展示了测试本发明在多个不同规模n的数据集下的性能表现,因为本发明使用决策树模型,根据数据集的规模和选择参数k进行模型选择,可以看到在不同数据规模下,本发明的性能基本维持一个平稳的变化趋势,说明本发明中提出的模型选择方案是有效的。
图5展示了在多个应用场景的真实数据集下,本发明相比KNN baseline并行优化方法,所提高的加速比,可以获得最高3.19x,平均2.19x的加速比。
本发明所提供的技术方案中,重点优化了Top-K选择操作在GPU上的并行化加速实现,其次还优化了计算距离矩阵的实现,这两个都是目前研究K-NN在GPU处理器上的实现的热点。本发明还通过实验验证了所提供技术方案在实现目标识别正确性和目标识别速度性能上的提升。
本发明装置还可以用于图像识别领域,在大规模数据集下,常用KNN进行相似度匹配工作,比如包括图片验证码,车牌号识别等一些其他的应用场景。也可以用于推荐系统,根据用户之前的喜好,判断他可能感兴趣的相关话题,或者根据两个人的兴趣爱好对他们之间的相似度进行匹配。
Claims (8)
1.一种GPU处理器上的K-NN的高性能并行实现装置,包括:数据读入模块,样本距离计算模块,Top-K选择模块,以及标签选择模块;
所述的数据读入模块,用于将应用场景中的训练数据与测试数据存成样本矩阵,并对输入的训练数据与测试数据进行检测和分块处理;数据读入模块对输入的训练数据与测试数据进行检测是指,检测训练样本和测试样本的个数、维度是否均为正数并且训练样本与测试样本的维度是否相同,若均是,则数据检验合格,否则,提示输入的数据有误;设训练样本个数为m,测试样本个数为n;
将训练数据存储成训练样本矩阵,将测试数据存储成测试样本矩阵;
所述的样本距离计算模块,读取训练样本矩阵与测试样本矩阵,计算每个测试样本与所有训练样本的距离,形成距离矩阵;
所述的Top-K选择模块,取距离矩阵中每行距离值最小的前k个元素,具体为:
将所选元素对应的训练样本的下标存储在一个n×k的下标矩阵中,输入给标签选择模块;所述的Top-K选择模块,对距离矩阵的每行的m个元素,包括:首先,根据Top K选择中设定的k值,将m个元素分到k个组中;其次,利用预训练好的决策树模型判断优化方案的执行粒度,执行粒度包括线程级别优化、线程束级别优化、线程块级别优化、多线程块级别优化以及基于基数排序优化;然后,对k组元素,当执行线程级别优化、线程束级别优化、线程块级别优化或多线程块级别优化方案时,在GPU上开启k个线程、线程束、线程块或多线程块,选取每一组元素中的最小值,再从k个最小值中选取最大值作为阈值;利用阈值重新遍历m个元素,将比阈值小的元素放到候选集合中;对候选集合中按照距离值排序,输出距离值最小的前k个元素;当在GPU上执行基于基数排序优化方案时,对m个元素进行全排序,获得距离值最小的前k个元素;
所述的标签选择模块对每个测试样本,根据Top-K选择模块最终选择的k个距离值和对应的训练样本的下标,获得k个训练样本的目标类别标签,统计每个目标类别标签出现的次数,以出现次数最多的目标类别标签作为测试样本的类别标签。
2.根据权利要求1所述的装置,其特征在于,所述的数据读入模块中预设样本大小阈值n′,当输入测试数据时,数据读取模块首先判断测试数据的样本个数是否超过阈值n′,若超过,则对测试数据进行分块处理,每次读入n′个测试样本。
3.根据权利要求1所述的装置,其特征在于,所述的样本距离计算模块在GPU上执行,包括:(1.1)调用GPU平台上编程库CUBLAS的矩阵乘GEMM接口计算-2QTR,记为M,其中Q表示训练样本矩阵,R表示测试样本矩阵,上角标T表示转置;(1.2)在GPU上启用一维的线程网格,每一个线程用于计算AQ或AR中的一个元素;其中,AQ是对矩阵NQ优化后的向量,NQ表示矩阵||Q||,AR是对矩阵NR优化后的向量,NR表示矩阵||R||;(1.3)在GPU上启用m×n的二维线程网格,其中第i行、第j列的线程负责将NQ中的i个元素和NR中的第j个元素加到M的元素Mi,j上;
所述的对矩阵NQ优化后的向量AQ和对矩阵NQ优化后的向量AR中,具体的优化过程为:
计算NQ,NR,由于NQ一行的元素和NR一列的元素都是相同的,所以采用向量对原矩阵进行简化,优化不必要的存储空间,将优化后的向量记为AQ和AR。
4.根据权利要求1所述的装置,其特征在于,所述的Top-K选择模块中,预训练好的决策树模型根据训练样本个数m和Top-K选择模块选择设定的k值,输出优化方案的标号,标号为0代表线程级别优化,标号为1代表线程束级别优化,标号为2代表线程块级别优化,标号为3代表多线程块级别优化,标号为4代表基于基数排序的优化。
5.根据权利要求1或4所述的装置,其特征在于,所述的Top-K选择模块中,执行一个线程计算一个组的最小值的优化方案,在GPU上分配k个线程,每个线程计算组内的最小值,并存储在对应线程块内的共享存储中,线程块内利用一个线程束对共享存储中存储的最小值进行最大值规约,线程块之间再通过原子操作对全局存储中的最大值进行更新,得到最终的阈值。
6.根据权利要求1或4所述的装置,其特征在于,所述的Top-K选择模块中,执行一个线程束计算一个组的最小值的优化方案,在GPU上分配k个线程束,每个线程束内的线程同时执行一条指令,每个线程束获得组内的最小值,并存储在对应线程块内的共享存储中,线程块内利用一个线程束对共享存储中存储的最小值进行最大值规约,得到线程块内的局部最大值,线程块之间再通过原子操作对全局存储中的最大值进行更新,得到最终的阈值。
7.根据权利要求1或4所述的装置,其特征在于,所述的Top-K选择模块中,执行一个线程块计算一个组的最小值的优化方案,在GPU上分配k个线程块,每个线程块内部的线程束得到局部最小值存储在对应线程块的共享存储中,再利用一个线程束对线程块的共享存储中的局部最小值进行最小值规约,得到组内最小值;线程块之间再通过原子操作对全局存储中的最大值进行更新,得到最终的阈值。
8.根据权利要求1或4所述的装置,其特征在于,所述的Top-K选择模块中,执行多个线程块计算一个组的局部最小值的优化方案,在GPU上分配k个多线程块,设对每个组开启b个线程块,b与组内元素个数m/k线性相关,已知m和k,使用线性回归模型拟合得到最优b值;每个线程块内的线程束获得局部最小值存储在对应线程块的共享存储中,再利用一个线程束对共享存储中的局部最小值进行最小值规约;b个线程块之间先通过原子操作更新组内最小值,再对全局存储中的最大值进行更新,得到最终的阈值。
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010991550 | 2020-09-18 | ||
CN202010991550X | 2020-09-18 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN112380003A CN112380003A (zh) | 2021-02-19 |
CN112380003B true CN112380003B (zh) | 2021-09-17 |
Family
ID=74577115
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202011203928.1A Active CN112380003B (zh) | 2020-09-18 | 2020-11-02 | 一种gpu处理器上的k-nn的高性能并行实现装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN112380003B (zh) |
Families Citing this family (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112686342B (zh) * | 2021-03-12 | 2021-06-18 | 北京大学 | Svm模型的训练方法、装置、设备和计算机可读存储介质 |
CN113641956B (zh) * | 2021-08-05 | 2023-05-30 | 中国科学院软件研究所 | 面向SW26010-Pro处理器的1、2级BLAS函数库的高性能实现方法 |
CN114528106B (zh) * | 2022-02-17 | 2024-05-17 | 西安电子科技大学 | 雷达信号分选中利用gpu加速决策树训练的方法 |
CN114860341B (zh) * | 2022-05-19 | 2023-09-22 | 北京百度网讯科技有限公司 | 线程配置方法、设备、装置、存储介质 |
CN116341628B (zh) * | 2023-02-24 | 2024-02-13 | 北京大学长沙计算与数字经济研究院 | 分布式训练的梯度稀疏化方法、系统、设备及存储介质 |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105959175A (zh) * | 2016-04-21 | 2016-09-21 | 南开大学 | 基于GPU加速的kNN算法的网络流量分类方法 |
CN108600246A (zh) * | 2018-05-04 | 2018-09-28 | 浙江工业大学 | 一种基于knn算法的网络入侵检测并行化加速方法 |
CN108920720A (zh) * | 2018-07-30 | 2018-11-30 | 电子科技大学 | 基于深度哈希和gpu加速的大规模图像检索方法 |
CN109919208A (zh) * | 2019-02-25 | 2019-06-21 | 中电海康集团有限公司 | 一种外观图像相似度比对方法和系统 |
CN111259098A (zh) * | 2020-01-10 | 2020-06-09 | 桂林电子科技大学 | 一种基于稀疏表示和Fréchet距离融合的轨迹相似度计算方法 |
Family Cites Families (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8874557B2 (en) * | 2011-09-02 | 2014-10-28 | Adobe Systems Incorporated | Object retrieval and localization using a spatially-constrained similarity model |
CN113056743B (zh) * | 2018-09-20 | 2024-06-28 | 辉达公司 | 训练神经网络以用于车辆重新识别 |
-
2020
- 2020-11-02 CN CN202011203928.1A patent/CN112380003B/zh active Active
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105959175A (zh) * | 2016-04-21 | 2016-09-21 | 南开大学 | 基于GPU加速的kNN算法的网络流量分类方法 |
CN108600246A (zh) * | 2018-05-04 | 2018-09-28 | 浙江工业大学 | 一种基于knn算法的网络入侵检测并行化加速方法 |
CN108920720A (zh) * | 2018-07-30 | 2018-11-30 | 电子科技大学 | 基于深度哈希和gpu加速的大规模图像检索方法 |
CN109919208A (zh) * | 2019-02-25 | 2019-06-21 | 中电海康集团有限公司 | 一种外观图像相似度比对方法和系统 |
CN111259098A (zh) * | 2020-01-10 | 2020-06-09 | 桂林电子科技大学 | 一种基于稀疏表示和Fréchet距离融合的轨迹相似度计算方法 |
Non-Patent Citations (2)
Title |
---|
FastTopK: A Fast Top-K Trajectory Similarity Query Processing Algorithm for GPUs;Hamza Mustafa;《2018 IEEE International Conference on Big Data》;20181231;全文 * |
Realtime Top-k Personalized PageRank over Large Graphs on GPUs;jieming shi;《ACM》;20190901;全文 * |
Also Published As
Publication number | Publication date |
---|---|
CN112380003A (zh) | 2021-02-19 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN112380003B (zh) | 一种gpu处理器上的k-nn的高性能并行实现装置 | |
Pan et al. | Fast GPU-based locality sensitive hashing for k-nearest neighbor computation | |
US8583896B2 (en) | Massively parallel processing core with plural chains of processing elements and respective smart memory storing select data received from each chain | |
Barrientos et al. | kNN query processing in metric spaces using GPUs | |
Herout et al. | Real-time object detection on CUDA | |
CN111488177A (zh) | 数据处理方法、装置、计算机设备和存储介质 | |
Zhao et al. | Parallel support vector machines on multi-core and multiprocessor systems | |
Zhu et al. | Developing a pattern discovery method in time series data and its GPU acceleration | |
CN112906865B (zh) | 神经网络架构搜索方法、装置、电子设备及存储介质 | |
Yabuta et al. | Relational joins on gpus: A closer look | |
WO2023160290A1 (zh) | 神经网络推理加速方法、目标检测方法、设备及存储介质 | |
CN106778812B (zh) | 聚类实现方法和装置 | |
CN112686342B (zh) | Svm模型的训练方法、装置、设备和计算机可读存储介质 | |
Thapa et al. | Memory-efficient implementation of a graphics processor-based cluster detection algorithm for large spatial databases | |
CN108108251B (zh) | 一种基于MPI并行化的参考点k近邻分类方法 | |
Oro et al. | Accelerating boosting-based face detection on GPUs | |
Jing et al. | Efficient parallel algorithm for computing rough set approximation on GPU | |
Lopes et al. | Non-negative matrix factorization implementation using graphic processing units | |
US11507773B2 (en) | Large-scale similarity search with on-chip cache | |
US20220343146A1 (en) | Method and system for temporal graph neural network acceleration | |
Rodriguez-Borbon et al. | Heterogeneous acceleration of HAR applications | |
Masek et al. | Multi–gpu implementation of machine learning algorithm using cuda and opencl | |
Diao et al. | Large-scale semantic concept detection on manycore platforms for multimedia mining | |
Yang et al. | Acceleration of feature subset selection using CUDA | |
Xiaomin et al. | SLIC Research and Implementation of a Parallel Optimization Algorithm |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |