一种神经网络截断推理的方法与流程

文档序号:35736638发布日期:2023-10-15 22:32阅读:26来源:国知局
一种神经网络截断推理的方法与流程

本发明涉及人工智能,特别涉及一种神经网络截断推理的方法。


背景技术:

1、随着5g技术的发展和相关人工智能技术的进一步发展,一些像智能驾驶、智慧医疗、智能安防等各个领域都与人工智能技术进行了深度融合,有一些场景的设备的运行对存储和能耗有较高要求,由原始框架产生的浮点模型在大小和计算能耗方面远不能满足其边缘设备低能耗的要求。

2、现有主流的优秀深度学习训练框架如tensorflow,caffe,pytorch等,这些框架可以实现任意起始点和终止点推理过程,除此之外,一些边缘设备推理框架歩ncnn,mnn,tengine等也可以在特定设备上进行推理,并可以产生子图进行调度推理。

3、在对现有的优秀开源神经网络算法如yolo系列,mobilenet系列等进行落地适配时,往往需要对模型进行后量化处理来压缩权重和各层的输入输出特征图来达到减小模型存储空间和计算能耗的目的,现有的训练后量化算法在量化之后可以将权重(8bzt)压缩到原来的4倍,但由于算法繁多,各个算法模型的复杂度不尽相同,在对一些较为简单的模型进行训练后量化后,其推理精度网络较之前有所下降。而现有技术在此方面需要适应不同场景。

4、此外,现有技术中的常用术语如下:

5、推理:深度学习网络拓扑排序后从第一个节点开始逐次向后运行的过程;拓扑排序:在一个有向图中,对所有的节点进行排序,要求没有一个节点指向它前面的节点。

6、ir-intermediate representation(中间表示)是程序编译过程中,源代码与目标代码之间翻译的中介,ir的设计对编译器来说非常关键,好的ir要考虑从源代码到目标代码编译的完备性、编译优化的易用性和性能。


技术实现思路

1、为了解决上述问题,本技术的目的在于:

2、对浮点模型在不损失精度的情况下进行压缩存储和计算能耗降低是适配边缘设备要求的最佳途径,本技术的技术就是为设配边缘低功耗设备芯片进行的模型压缩存储并进行块(层)重建进而重新训练来保持原有精度的过程。

3、为了能够有效的弥补这些精度下降并保持与量化前模型的精度效果,需要在量化过程中对原有深度学习算法模型进行再训练,此种训练与算法训练相比所需的数据集较少,并且自动化,用户仅需配置必要参数便可方便使用,量化完成后其在保持原有精度的基础上对计算能耗和存储大小的要求能够大大减少。本发明技术解决了在前文提到的量化训练过程中所需要的进行块重建训练的模型截断推理训练。

4、具体地,本发明提供一种神经网络截断推理的方法,能够随意指定有意义的输入输出节点并能据此生成正确推理结果,所述方法的实施步骤包括:

5、s1,由高级ir转换为中级ir并进行数据和图优化,优化完成初始化中级ir的数据结构的各个成员变量;

6、s2,根据用户设置的起止点动态从节点池中选择输出节点并由输出节点开始递归执行,执行过程中提供空间的利用选项和错误检查功能;

7、s3,推理完成并重置各个节点属性,准备下一次推理。

8、所述方法进一步包括:

9、s1,由高层ir转换为中级ir:

10、高层ir也被称为图ir,表示计算和控制流,并且是独立于硬件的,高层ir设计是为了对计算和控制流能够准确的描述,通过高层ir抽象的表达了计算和控制流的抽象,能够捕捉和表达各种深度模型,通过将高层ir中的控制流信息转换为中级ir中的控制信息来达到可定制化推理的效果;

11、s2,递归执行:

12、递归执行的三要素有执行参数、退出条件、函数体,本专利该步骤中的递归步骤是通过子节点进行回溯执行,比如有子节点的父节点未被执行则执行器去执行该节点的父节点,如此循环至节点的父节点为空,即到达停止条件。

13、s2.1,通过中级ir构建图:

14、中级ir构建图的详细步骤如下,通过将高级ir的必要属性遍历并转换成之前约定的中间ir数据结构,并在此步骤中做好进一步的数据格式转换。

15、通过步骤s1将高级ir转换为中级ir后,通过给定的数据结构来构建图:其中节点node关键数据成员有:weights、consumer-inpus-isinput-isoutput,其中isinput-isoutput表示其节点是否是首尾节点,并且通过间接判断作为子节点的消费者consumer和作为父节点的输入节点inputs的数量来确定其父子节点的个数;

16、图graph的关键数据成员有:nodes-inputnodes-outputnodes;

17、在将高级ir转为中级ir的过程中并通过用户指定的图起始点就能够确定输入节点input nodes和输出节点output nodes的数量和数据成员,即,在拓扑排序中通过用户指定的输入输出节点将根据执行的次序排序成线性结构,并通过检查用户提供的输入输出节点是否与节点名称相匹配来达到截断推理的目的;

18、s2.2,由输出节点outputnodes开始进行递归推理:

19、在每次推理开始前需要将每个节点重置,以备记录每次推理的节点重要信息,由输出节点outputnodes开始循环递归执行,如果遍历到的输出节点outputnode的父节点没有被执行就开始调用runpapanode()函数,该函数实现了在运行子类节点前应先保证父类节点运行完成的功能,此函数会递归调用其自身,当是首节点时候会检查首节点的输入是否准备就绪,如果准备就绪则开始递归返回执行,如果没有准备就绪则中断执行;除此之外还设置了inplace属性,当该字段属性设置后,当神经网络中的中间数据不被使用时就会被及时释放,以达到节省空间内存的目的,在检查其所有的子节点都被执行完成之后会自动释放其父节点输出所占用的空间。

20、所述步骤s2.2采用神经网络任意起止点算法:

21、要求推理起止点:

22、调用函数runpapanode(node,graph);

23、进行函数getpapanode(node,graph),即获取到该节点的父节点;

24、如果父辈节点没有运行,即papanodeisnotrun,则

25、进行调用函数runpapanode(node,graph),由于父辈节点没有运行即该节点所需要的数据没有准备好,所以需要运行父辈节点来准备好该节点所需要的数据,如果父辈节点的父节点还没有被运行则重复递归此步骤;另外,遍历节点,即runnode;

26、结束如果语句段;

27、使用函数alginedaddanotherpapanode(node,graph,ic),为了推理速度和效率对父节点的权重或参数做对齐操作;

28、使用函数alglnedconvnode(node,graph,ic),为了卷积的推理效率对卷积的权重做对齐操作;

29、返回;

30、结束函数语句段;

31、使用函数runoutputnode(node,graph,ic),通过运行最后一个输出节点出发递归调用;

32、假如满足node in graph则,即for node in graph,通过遍历图中的节点以此执行节点;进行

33、如果node.isoutput/,即不是最后一个输出节点;则

34、进行对齐alignment;

35、使用函数runpapanode(node,graph);

36、运行节点q,即runnodeq;

37、结束如果语句段;

38、结束假如语句段;

39、返回;

40、结束函数语句段。

41、所述步骤s1中所述高层ir的目标是建立控制流和操作者与数据之间的依赖关系,以及为图优化提供接口,并且包含了语义信息以及为定制的操作符提供可扩展性。

42、所述步骤s1中,所述将高层ir中的控制流信息转换为中级ir中的控制信息是使用工厂类设计模式通过将高级ir中的推理所用到的必要信息由在程序中预制的必要信息段转换,分为以下三个步骤:

43、a、必要信息确定:每层算子的推理所采用的必要信息不同,通过事先制定的协议来确定,包括卷积算子的必要信息是卷积核的大小和输出输入通道,以及激活函数类型;

44、b、转换功能实现:由不同训练平台转换过来的模型信息不同,需要统一,模型信息的统一是通过将各个平台过来的模型通过格式转换成事先制定好的协议,包括从pytorch过来的卷积权重是nchw格式,需要将nhwc格式的权重转换成nhwc格式的权重才能保证转换功能的正常运行;

45、c、ir信息核对:为确保最终正确结果,需要核对转换而来的信息,在转换功能完成之后,为了保证可靠运行需要对转换而来的各类信息做进一步的核对,保证结果的正确性。

46、所述步骤s2中所述节点nodes存储了图中的所有节点,以备用户在推理过程中频繁的改变起止点。

47、所述方法不要求图中的节点事先排序。

48、由此,本技术的优势在于:

49、为了使用不同的场景,本技术所提出的技术方案正好解决了其开源神经网络模型在后量化过程中需要保持原有精度需要重新进行块重建并进行训练的过程问题,由于需要分块并分别进行训练所以需要对排好序的网络进行截断推理。本发明技术是在适配北京君正集成电路股份有限公司(以下简称:北京君正)转换工具后量化模型模块的功能的基础上提出的。

50、除了完成任意起始点推理的基本功能外,本发明还提供了高效内存利用的选项来随时释放后续不需要用到的空间。

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