首页> 中国专利> 一种面向通用CPU的深度学习计算加速方法及系统

一种面向通用CPU的深度学习计算加速方法及系统

摘要

本发明公开一种面向通用CPU的深度学习计算加速方法及系统,其中方法包括:步骤1:系统初始化后,通过汇编指令获取CPU核数以及CPU支持的指令集;步骤2:基于数据库中内置的不同指令集加速效果的排序对获取到的指令集进行排序,并生成排序后的列表;步骤3:将列表作为一全局配置放入模型配置池并输入模型,获取模型的最优配置后,将最优配置与数据送入模型推理模块;步骤4:由模型推理模块进行模型推理,并输出最终的推理结果。

著录项

  • 公开/公告号CN113190352A

    专利类型发明专利

  • 公开/公告日2021-07-30

    原文格式PDF

  • 申请/专利权人 北京睿芯高通量科技有限公司;

    申请/专利号CN202110517757.8

  • 发明设计人 琚午阳;罗鑫;

    申请日2021-05-12

  • 分类号G06F9/50(20060101);G06F16/21(20190101);

  • 代理机构11139 北京科龙寰宇知识产权代理有限责任公司;

  • 代理人孙皓晨

  • 地址 102600 北京市大兴区北京经济技术开发区荣华中路19号院1号楼A座7层711C室

  • 入库时间 2023-06-19 12:02:28

说明书

技术领域

本发明涉及计算机技术领域,具体而言,涉及一种面向通用CPU的深度学习计算加速方法及系统。

背景技术

在很多应用场景中深度学习在进行推理时,对硬件有一定限制(如只有通用CPU(中央处理器),没有GPU(图形处理器)),但对推理速度依然还有比较高的要求,例如在移动端进行人脸识别与语音语义识别、安防领域的烟雾报警等。在这些领域中,推理速度的快慢不但直接影响着软件效果与体验,也决定着一款产品能否获得更加广阔的市场。因此,如何基于通用CPU对深度学习推理进行优化以获得更快的推理速度,已成为目前人工智能领域最为火热的方向之一,在推理运行时的加速方面,针对不同硬件需要充分利用并行处理、硬件加速来实现。

对于大部分的卷积神经网络而言,卷积层是最消耗时间的部分,而全连接层则是参数量最多的部分。图1为Alexnet分别在GPU和CPU进行推断的时间分布示意图,如图1所示,2012年获得ImageNet(大规模视觉识别项目的挑战赛)冠军的深度神经网络结构Alexnet分别在GPU和CPU进行推断的性能检测,在GPU上卷积层(conv1~conv5)和全连接层(fc6和fc7)占用了95%的计算时间,而在CPU上卷积层(conv1~conv5)和全连接层(fc6和fc7)占用了89%的时间,因此,如何高效地进行卷积层和全连接层的计算成为提升深度学习推断性能的关键点。

目前,对于x86架构CPU所采用的指令集加速与并行处理具体为:在MKLDNN(一种深度学习底层库,主要针对以intel为首的x86架构CPU,对深度神经网络进行层级及指令集级的优化)中,对于计算密集型算子即卷积和全连接层等进行了专门的指令集优化,指令集优化的原理在于使用SIMD(Single Instruction Multiple Data,单指令流多数据流)指令进行加速,即在一个CPU循环中,SIMD可在多个值上同时执行相同的运算/指令(如加、乘等)。如果我们在4个数据点上同时运行SIMD指令,就会直接实现4倍的加速。SIMD指令集包括SSE4.1、AVX、AVX2、AVX-512等,对于不同的算子,MKLDNN基于不同的指令集有不同的实现与优化方式。在使用MKLDNN进行训练或者推理时,使用JIT(Just In Time)代码生成技术,根据神经网络的参数以及后端硬件支持的指令集,生成优化后的代码,以提高神经网络在x86架构CPU上的执行速度。卷积运算与矩阵乘法为深度学习的核心,它们的计算模式均为大规模的循环计算,为了提升卷积、全连接层等运算的处理速度,MKLDNN使用并行化处理将计算任务切分并分配到多个线程并行运算,使用这种方式可以最大化利用CPU的计算资源。

但是,这个指令集加速只适用于x86架构CPU平台,不支持其它架构的CPU,如ARM架构CPU,使得该系统无法在广大使用ARM架构CPU的移动端设备上使用。且并行处理只考虑了尽可能多的使用CPU资源,并未考虑到线程创建过程与线程同步过程的开销,也未考虑有些模型结构主要的开销在于数据访问,而不是计算开销,这样的模型并不适宜使用并行处理的计算模式。盲目地以占用CPU资源为目的的计算模式在很多场景下不仅浪费了宝贵的CPU计算资源,还会提升模型的推理时延。

另外,ARM公司发布的开源工程ARM Compute Library(ACL),旨在为图像/视频/多媒体/计算机视觉等领域的开发者提供ARM平台的硬件加速库。ACL库中使用ARM A系列CPU支持的SIMD指令对计算密集型算子进行硬件加速。ARM架构CPU中的SIMD指令为NEON指令集,NEON结合了64-bit和128-bit的SIMD指令集,提供128-bit宽的向量运算。但是,这个指令集加速只适用于ARM平台,不支持其它架构的CPU,如x86架构CPU,使得该系统无法在使用在x86 CPU的设备上。

发明内容

为了解决上述问题,本发明提供一种面向通用CPU的深度学习计算加速方法及系统,其既可以在x86架构CPU又可以在ARM架构CPU上使用,并能够自适应选取最佳硬件加速方式的进行深度学习推理加速,从而降低了针对不同的平台需要重新开发而投入的资源成本,同时,其还可以自适应选择性能最佳的模型推理计算线程数,以实现在性能最优的前提下能保证资源占用最小。

为达到上述目的,本发明提供了一种面向通用CPU的深度学习计算加速方法,其包括以下步骤:

步骤1:系统初始化后,通过汇编指令获取CPU核数以及CPU支持的指令集;

步骤2:基于数据库中内置的不同指令集加速效果的排序对获取到的指令集进行排序,并生成排序后的列表;

步骤3:将列表作为一全局配置放入模型配置池并输入模型,获取模型的最优配置后,将最优配置与数据送入模型推理模块;

步骤4:由模型推理模块进行模型推理,并输出最终的推理结果。

在本发明一实施例中,其中,步骤1具体为:

步骤11:系统初始化CPU架构获取模块;

步骤12:CPU架构获取模块通过汇编指令获取CPU核数以及CPU所支持的指令集,并验证。

在本发明一实施例中,其中,步骤2具体为:

步骤21:数据库中预置所有指令集加速效果的排序;

步骤22:基于数据库中预置的排序,对步骤1中获取到的指令集进行排序;

步骤23:将排序的结果生成列表。

在本发明一实施例中,其中,步骤3中所述最优配置包括预置的基于最优指令集的加速代码配置以及最佳的推理计算并行线程数配置。

在本发明一实施例中,其中,步骤3中获取模型最优配置的具体过程包括以下步骤:

步骤31:根据输入模型,在模型配置池中查找是否存在该模型的最优配置,如果有,则根据最优配置生成模型加速算子代码,并将对应的最优配置与数据送入模型推理模块;

如果没有,则进入下一步;

步骤32:根据模型的加速算子,查找步骤2的列表中加速效果最优的指令集是否存在与该算子对应的实现方式,

如果有,则采用最优指令集的实现方式,并将指令集中的加速代码作为对应算子的加速代码配置;

如果没有,则依次查找步骤2的列表中的后续指令集是否存在与算子对应的实现方式,若找到,则采用对应指令集的实现方式,并将指令集中的加速代码作为对应算子的加速代码配置;

如果步骤2的列表中的指令集没有对应算子的实现方式,则采用预置的不带加速的代码作为对应算子的加速代码配置;

步骤33:对模型及其算子配置的加速代码进行模拟推理,得到对应模型的最优配置并存储,然后返回步骤31。

在本发明一实施例中,其中,步骤33的具体过程为:

步骤331:遍历尝试每一种线程数的设定,其中,所述线程数为基于获取到的CPU核数进行设定的,其最小值为1,最大值为2×CPU的核数;

步骤332:在每一种线程数设定下进行50次推理,并统计对应线程数推理的平均耗时;

步骤333:选择所有平均耗时中耗时最少的线程数作为最佳的推理计算并行线程数配置,若存在至少两种线程数的平均耗时相同且均为最小值,则选择线程数少的设定作为最佳的推理计算并行线程数配置;

步骤334:将最佳的推理计算并行线程数配置发送到模型配置池,创建对应模型的最优配置并存储,返回步骤31。

为达到上述目的,本发明提供了一种面向通用CPU的深度学习计算加速系统,其包括:

CPU架构获取器,用于获取CPU架构;

指令集分析器,与所述CPU架构获取器连接,用于对指令集排序;

模型配置池,与所述指令集分析器连接,用于存储各模型的配置;

模拟推理器,与所述模型配置池连接,用于通过模拟推理获取输入模型的最优配置;

模型推理器,与所述模型配置池连接,用于获取输入模型的最优配置进行模型推理。

在本发明一实施例中,其中,所述CPU架构包括CPU核数和CPU支持的指令集。

在本发明一实施例中,其中,所述最优配置包括预置的基于最优指令集的加速代码配置以及最佳的推理计算并行线程数配置。

本发明提供的深度学习计算加速方法及系统是能够面向x86和ARM架构CPU的通用深度学习加速方法及系统,与现有加速系统相比,其具有以下优点:

1)可以自适应选择针对CPU的最佳硬件加速方式,同时解决了现有加速系统只针对特定平台,切换到了其它平台需要重新开发的问题,可以减少资源的投入;

2)能自适应地调节每个模型推理时的线程分配,在性能最优的前提下同时能保证资源占用最小。

附图说明

为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。

图1为Alexnet分别在GPU和CPU进行推断的时间分布示意图;

图2为本发明一实施例的深度学习计算加速方法流程图;

图3为本发明一实施例的深度学习计算加速系统架构图。

附图标记说明:301-CPU架构获取器;302-指令集分析器;303-模型配置池;304-模拟推理器;305-模型推理器。

具体实施方式

下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有付出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。

实施例一

图2为本发明一实施例的深度学习计算加速方法流程图,如图2所示,本实施例提供了一种面向通用CPU的深度学习计算加速方法,其包括以下步骤:

步骤1:系统初始化后,通过汇编指令获取CPU的核数和CPU支持的指令集;

在本实施例中,其中,步骤1具体为:

步骤11:系统初始化时首先初始化CPU架构获取模块;

步骤12:CPU架构获取模块通过汇编指令获取CPU的核数和对应CPU所支持的指令集,并验证。

其中,若本实施例的CPU架构获取模块获取到CPU的架构为x86架构的四核CPU,则其对应的指令集可能为AVX、AVX2、AVX-512等,但由于不是所有的x86架构CPU都支持AVX-512,所以在获取到CPU的架构之后,还需要进一步使用汇编指令测试其是否都能够支持这些指令集,只有经过测试验证后确认支持的指令集,才能作为对应CPU所支持的指令集获取,本实施获取到的CPU支持的指令集为AVX2和AVX-512。

步骤2:基于数据库中内置的不同指令集加速效果的排序,对获取到的CPU支持的指令集进行排序,并生成排序后的列表;

在本实施例中,其中,步骤2具体为:

步骤21:数据库中预置所有指令集加速效果的排序;其中,对应x86架构的CPU,其指令集按照指令集加速效果的排序可以为AVX512>AVX2>AVX>SSE,本发明也可以包括更多指令集进行加速效果的排序,此处仅为举例,并不限制指令集数量及排序结果;对应ARM架构的CPU,由于其支持的指令集只有NEON,因此不需要再对指令集进行排序,只需要测试CPU是否支持NEON即可。

步骤22:基于数据库中指令集加速效果的排序,对获取到的CPU支持的指令集进行排序;其中,步骤1获取的CPU支持的指令集为AVX512和AVX2两种,那么基于数据库中指令集加速效果AVX512>AVX2的排序,可知AVX512的加速效果优于AVX2,因此将AVX512排在第一位,为最优,将AVX2排在第二位。

步骤23:将CPU支持的指令集排序的结果生成列表。其中,以步骤22结果为例,由于AVX512为最优,则AVX512在列表的第一位,AVX2在列表的第二位。

步骤3:将生成的列表作为一全局配置放入模型配置池并输入模型,获取模型的最优配置后,将最优配置与数据送入模型推理模块;

在本实施例中,其中,步骤3中最优配置包括预置的基于最优指令集的加速代码配置以及最佳的推理计算并行线程数配置。

在本实施例中,其中,步骤3中获取模型最优配置的具体过程为:

步骤31:根据输入模型,在模型配置池中查找是否存在该模型的最优配置,如果有,则根据最优配置生成模型加速算子代码,并将对应的最优配置与数据送入模型推理模块;

如果没有,则进入下一步;

步骤32:根据模型的加速算子,查找步骤2的列表中加速效果最优的指令集是否存在与该算子对应的实现方式,

如果有,则采用最优指令集的实现方式,并将指令集中的加速代码作为该算子的加速代码配置;

如果没有,则依次查找步骤2的列表中的后续指令集中,是否存在与该算子对应的实现方式,当在后续指令集中找到对应实现方式时,则采用找到这一指令集的实现方式,并将指令集中的加速代码作为该算子的加速代码配置;

如果步骤2的列表中的指令集没有对应算子的实现方式,则采用预置的不带加速的代码作为该算子的加速代码配置;

其中,再以步骤2得到的列表为例,若一模型算子为A,按照列表中指令集的排序,则会首先查找是否存在算子A基于AVX512的实现方式,如果有则采用;如果没有则继续查找是否存在算子A基于AVX2的实现方式,如果有则采用;如果还没有,则采用不带硬件加速的实现方式。不论采用了哪种实现方式,都会将对应的代码作为该算子的加速代码配置,用以进行后续的模拟推理。

步骤33:对模型与其算子配置的加速代码进行模拟推理,得到对应模型的最优配置并存储,然后返回步骤31。

在本实施例中,其中,步骤33的具体过程为:

步骤331:遍历尝试每一种线程数的设定,其中,线程数为基于步骤1获取到的CPU核数进行设定的,其设定的最小值为1,最大值为2×CPU的核数;其中,步骤1中的CPU核数为四核,则线程数的设定的最小值为1,最大值为2×4=8,因此,遍历尝试每一种线程数设定时,需要遍历的线程数为1~8。

步骤332:在每一种线程数设定下进行50次推理,并统计对应线程数设定下的推理的平均耗时;

步骤333:选择所有平均耗时中耗时最少的线程数作为最佳的推理计算并行线程数配置,若得到的结果中,存在至少两种线程数设定下的平均耗时相同且均为最小值,则选择其中线程数少的设定作为最佳的推理计算并行线程数配置;其中,由于在线程数多的情况下,会增加线程调度与同步的开销,其对系统整体资源的开销会增大,因此,在进行最优配置选择时,当平均耗时相同则优先以线程数作为选择标准。

步骤334:将最佳的推理计算并行线程数配置发送到模型配置池,创建对应模型的最优配置并存储到模型配置池中,然后返回步骤31。

步骤4:由模型推理模块进行模型推理,并输出最终的推理结果。

其中,若某个深度学习模型包含了A、B两个算子的运算过程,则模型配置池中会包含以下信息:1、A算子在该CPU上的最优指令集实现方式;2、B算子在该CPU上的最优指令集实现方式;3、最佳的推理计算并行线程数。当模型推理模块获得最优配置后,整体的执行流程为:首先,设置推理计算并行线程数;然后,模型按照输入->算子A->算子B->推理结果的方式进行计算,从而得到最终的结果并输出。

实施例二

图3为本发明一实施例的深度学习计算加速系统架构图,如图3所示,本实施例提供了一种面向通用CPU的深度学习计算加速系统,用于实现实施例一的方法,其包括:

CPU架构获取器(301),用于获取CPU架构;

指令集分析器(302),与CPU架构获取器(301)连接,用于对指令集排序;

模型配置池(303),与指令集分析器(302)连接,用于存储各模型的配置;

模拟推理器(304),与模型配置池(303)连接,用于通过模拟推理获取输入模型的最优配置;

模型推理器(305),与模型配置池(303)连接,用于获取输入模型的最优配置进行模型推理。

在本实施例中,其中,所述CPU架构包括CPU核数和CPU支持的指令集。

在本实施例中,其中,所述最优配置包括预置的基于最优指令集的加速代码配置以及最佳的推理计算并行线程数配置。

本发明提供的深度学习计算加速方法及系统,是能够面向x86和ARM架构CPU的通用深度学习加速方法及系统,其可以自适应地选择针对CPU架构的最佳硬件加速方式,同时其解决了现有加速系统只针对特定平台,若切换到其它平台则需要重新开发的问题,可以减少资源的投入;还能够自适应地调节每个模型推理时的线程分配,在性能最优的前提下同时能保证资源占用最小。

本领域普通技术人员可以理解:附图只是一个实施例的示意图,附图中的模块或流程并不一定是实施本发明所必须的。

本领域普通技术人员可以理解:实施例中的装置中的模块可以按照实施例描述分布于实施例的装置中,也可以进行相应变化位于不同于本实施例的一个或多个装置中。上述实施例的模块可以合并为一个模块,也可以进一步拆分成多个子模块。

最后应说明的是:以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明实施例技术方案的精神和范围。

去获取专利,查看全文>

相似文献

  • 专利
  • 中文文献
  • 外文文献
获取专利

客服邮箱:kefu@zhangqiaokeyan.com

京公网安备:11010802029741号 ICP备案号:京ICP备15016152号-6 六维联合信息科技 (北京) 有限公司©版权所有
  • 客服微信

  • 服务号