深度学习编译器脉冲神经网络算子处理方法、系统、介质

文档序号:35283624发布日期:2023-09-01 04:08阅读:36来源:国知局
深度学习编译器脉冲神经网络算子处理方法、系统、介质

本发明涉及脉冲神经网络领域,具体地涉及一种深度学习编译器脉冲神经网络算子处理方法、系统、介质设备,更为具体地,涉及一种基于深度学习编译器的脉冲神经网络算子处理方法、系统、介质和设备。


背景技术:

1、目前,深度学习模型框架快速演化,底层计算硬件层出不穷。脉冲神经网络(spiking neural network,snn)脉冲神经网络是源于生物启发的新一代人工神经网络模型,属于深度学习的子集,且具有较强的生物基础支撑。脉冲神经网络算子细胞主要有细胞核,树突,轴突。轴突用于传递从树突而来的脉冲刺激,然后传递到下一个神经元。在轴突末端与树突连接处是突触,主要是靠膜电位的变换进行传输。当由脉冲连续到来的时候,就能够产生一个较大的电位,然后可以传递到下一个升级元,然后立马会恢复到平衡的电位,在较长的时间内,无法感受刺激。用来模拟该神经元行为的模型包括泄露-积分-激发(leaky-integrity-fire,lif)模型、霍奇金赫胥黎(hodgkin huxley,hh)模型、伊日凯维奇(izhikevich,izh)模型等等,并称表征脉冲神经网络算子行为的运算集合称为一个脉冲神经网络算子。

2、深度学习编译器将深度学习模型编译并部署到底层硬件,使其在gpu、cpu、npu等不同的硬件平台上实现训练和推理计算。深度学习编译器的通用设计主要包括两部分:编译器前端和编译器后端,中间表示(ir)是前端和后端沟通的桥梁。通常,深度学习模型在编译器中转换为多级ir,其中高级别ir位于前端,低级ir位于后端。基于高级ir,编译器前端负责与硬件无关的转换和优化。基于低级ir,编译器后端负责特定硬件的优化、代码生成和编译。开放神经网络交换(open neural network exchange,onnx)格式是一个用于表示深度学习模型的中间表示(ir),可使模型在不同框架、不同硬件平台之间进行转移。何种训练框架训练模型(比如tensorflow/pytorch/mindspore/paddle),在训练完毕后都可以将这些框架的模型统一转换为onnx统一的格式进行存储。

3、将脉冲神经网络算子用onnx等格式表示是针对snn的深度学习编译器关键的一步。目前,tvm等主流深度学习编译器尚未实现对脉冲神经网络算子的适配。并且,loihi、tianj ic等低功耗机器人硬件众核处理器配套的编译器均是自研专用,通过将脉冲神经网络算子以json格式表示,由硬件直接读取json配置文件处理,跳过了中间表示(ir)这一步骤,由于未采用ir,其模型失去了通用性,无法直接对接tvm等主流深度学习编译器,也很难实现跨平台部署和执行。此外,loihi、tianj ic等低功耗机器人硬件众核处理器配套的编译器尚未针对众核处理器做片上路由通信等方面的映射优化。


技术实现思路

1、针对现有技术中的缺陷,本发明的目的是提供一种深度学习编译器脉冲神经网络算子处理方法、系统、介质。

2、根据本发明提供的一种深度学习编译器脉冲神经网络算子处理方法,包括:

3、步骤s1:将脉冲神经网络算子部署到低功耗机器人硬件众核处理器上,进行算子转换,将脉冲神经网络算子拆分为基础算子和自定义算子,适配深度学习编译器;

4、步骤s2:进行脉冲神经网络算子合并、算子拆分和算子映射,实现脉冲神经网络算子在低功耗机器人硬件众核处理器上的部署和执行。

5、优选地,在所述步骤s1中:

6、算子转换方法包括:拆分为基础算子或自定义算子;

7、拆分为基础算子:拆分脉冲神经网络算子为深度学习编译器能够识别的算子,包括加、减、乘和除;

8、拆分为基础算子包括:

9、步骤a1:拆分脉冲神经网络运算,根据脉冲神经网络算子行为模型,将脉冲神经网络算子模块拆分为加、减、乘、除深度学习编译器支持的算子库,算子库里的算子能够直接被深度学习编译器转化为中间表示;

10、步骤a2:设置前向、反向传播替代函数;将反向传播函数转为训练时能够计算梯度的替代函数;将前向传播的阶跃函数转为替代算子,替代算子来源于深度学习编译器支持的算子库;

11、步骤a3:导出中间表示,由深度学习编译器将脉冲神经网络模型的所有算子转化为中间表示;

12、自定义算子:自定义深度学习编译器能够识别的脉冲神经网络算子;

13、自定义算子包括:

14、步骤b1:自定义算子,将脉冲神经网络算子行为模型定义为一个单一的算子;

15、步骤b2:注册算子,将自定义的脉冲神经网络算子注册到深度学习编译器支持的算子库;

16、步骤b3:导出中间表示,由深度学习编译器将脉冲神经网络算子转化为中间表示;

17、所述的脉冲神经网络算子行为模型包括:泄露、积分、激发模型、霍奇金赫胥黎模型、伊日凯维奇模型;所述的深度学习编译器,将深度学习模型的算子转化为静态或动态计算图,其中静态或动态计算图以中间表示进行表示,中间表示的格式为开放神经网络交换格式。

18、优选地,算子合并方法为遍历中间表示中的节点列表,其中一个算子表示为一个节点;当两个连续的节点类型依次为fc和脉冲神经网络算子时,识别其为自定义算子转换方式,使用一个新生成的算子替代这两个算子,并将这两个算子从ir的节点列表中删除;当发现算子类型中出现前向、反向传播替代算子时,识别其为拆分为基础算子转换方法,从当前节点往上遍历,直到出现fc为止,将fc算子后的第一个算子到前向、反向传播替代算子之间的所有算子合并为脉冲神经网络算子,并将fc算子和脉冲神经网络算子合并为一个算子,并将其他所有算子从ir的节点列表中删除;

19、算子合并方法的实现步骤如下:

20、步骤c1:取出第一个节点;

21、步骤c2:在每个节点处执行判断,当前节点是否是脉冲神经网络算子;若是,识别脉冲神经网络转换方法为自定义算子转换方式,执行步骤c3;否则,执行步骤c5;

22、步骤c3:判断前一节点是否是fc算子;若是,执行步骤c4;否则,切换到下一个节点,节点下标加1,回到步骤c2;

23、步骤c4:使用新生成的算子fc_snnact替代fc和脉冲神经网络两个连续算子,并将这两个算子从ir的节点列表中删除;

24、步骤c5:判断当前算子是否是前向、反向传播替代算子;若是,识别脉冲神经网络转换方法为拆分为基础算子转换方法,执行步骤c6,否则,切换到下一个节点,节点下标加1,回到步骤c2;

25、步骤c6:从当前节点往上遍历,直到出现fc为止,将fc算子后的第一个算子到前向、反向传播替代算子之间的所有算子合并为脉冲神经网络算子。执行步骤c4。

26、所提供的算子拆分方法为根据fc算子的规模s和低功耗机器人硬件众核处理器单核乘加器的处理能力c,决定拆分粒度将fc的大矩阵拆分为g个子矩阵;其中为上限取整函数。

27、优选地,算子拆分的实现步骤如下:

28、步骤d1:获取fc算子的规模s;

29、步骤d2:从芯片配置文件中获取低功耗机器人硬件众核处理器单核乘加器的处理能力c;

30、步骤d3:计算拆分粒度

31、步骤d4:划分fc矩阵,确定横向拆分点c,2c,…,(g-1)c,和纵向拆分点c,2c,…,(g-1)c;

32、步骤d5:执行拆分,将fc矩阵中横坐标为0到c、纵坐标为0到c的元素取出,组成第1个子矩阵;将fc矩阵中横坐标为c到2c、纵坐标为c到2c的元素取出,组成第2个子矩阵;将fc矩阵中横坐标为2c到3c、纵坐标为2c到3c的元素取出,组成第3个子矩阵;以此类推,将fc矩阵中横坐标为(g-1)c到s、纵坐标为(g-1)c到s的元素取出,组成第g个子矩阵,称这些子矩阵为新的算子。

33、优选地,算子映射方法为以最少通信跳数为优化目标,建立算子约束、资源约束和依赖约束,以线性规划方法求解组合优化,将算子映射到低功耗机器人硬件众核处理器;

34、算子映射的实现步骤如下:

35、步骤e1:进行映射问题建模,将算子、计算核、时序建立成三维坐标系,其中,m个算子,放在x轴,坐标表示依次为1,2,…,m;n个计算核,放在y轴,坐标表示依次为1,2,…,n;t个时间步,放在z轴,坐标表示依次为1,2,…,t;定义决策变量xijk,xijk=1表示算子i被部署到计算核j的第k个时间步;

36、步骤e2:建立约束方程,约束条件包括算子约束、资源约束和依赖约束;

37、算子约束表述为:对于任意算子,只分布在一个计算核和一个时间步中,所有计算核在所有时间步累计决策变量之和为1,对于任意i,j为计算核的编号t为时间;

38、资源约束表述为:对于任一计算核,在任一时间步,承担的算子只有一个,对于任意的j,k,

39、依赖约束表述为:对于算子ia和在其后执行的算子ic,有

40、步骤e3:确定目标函数,以最小化通信跳数为目标函数;

41、步骤e4:采用线性规划方法求解优化问题。

42、根据本发明提供的一种深度学习编译器脉冲神经网络算子处理系统,包括:

43、模块m1:将脉冲神经网络算子部署到低功耗机器人硬件众核处理器上,进行算子转换,将脉冲神经网络算子拆分为基础算子和自定义算子,适配深度学习编译器;

44、模块m2:进行脉冲神经网络算子合并、算子拆分和算子映射,实现脉冲神经网络算子在低功耗机器人硬件众核处理器上的部署和执行。

45、优选地,在所述模块m1中:

46、算子转换方法包括:拆分为基础算子或自定义算子;

47、拆分为基础算子:拆分脉冲神经网络算子为深度学习编译器能够识别的算子,包括加、减、乘和除;

48、拆分为基础算子包括:

49、模块a1:拆分脉冲神经网络运算,根据脉冲神经网络算子行为模型,将脉冲神经网络算子模块拆分为加、减、乘、除深度学习编译器支持的算子库,算子库里的算子能够直接被深度学习编译器转化为中间表示;

50、模块a2:设置前向、反向传播替代函数;将反向传播函数转为训练时能够计算梯度的替代函数;将前向传播的阶跃函数转为替代算子,替代算子来源于深度学习编译器支持的算子库;

51、模块a3:导出中间表示,由深度学习编译器将脉冲神经网络模型的所有算子转化为中间表示;

52、自定义算子:自定义深度学习编译器能够识别的脉冲神经网络算子;

53、自定义算子包括:

54、模块b1:自定义算子,将脉冲神经网络算子行为模型定义为一个单一的算子;

55、模块b2:注册算子,将自定义的脉冲神经网络算子注册到深度学习编译器支持的算子库;

56、模块b3:导出中间表示,由深度学习编译器将脉冲神经网络算子转化为中间表示;

57、所述的脉冲神经网络算子行为模型包括:泄露、积分、激发模型、霍奇金赫胥黎模型、伊日凯维奇模型;所述的深度学习编译器,将深度学习模型的算子转化为静态或动态计算图,其中静态或动态计算图以中间表示进行表示,中间表示的格式为开放神经网络交换格式。

58、优选地,算子合并方法为遍历中间表示中的节点列表,其中一个算子表示为一个节点;当两个连续的节点类型依次为fc和脉冲神经网络算子时,识别其为自定义算子转换方式,使用一个新生成的算子替代这两个算子,并将这两个算子从ir的节点列表中删除;当发现算子类型中出现前向、反向传播替代算子时,识别其为拆分为基础算子转换方法,从当前节点往上遍历,直到出现fc为止,将fc算子后的第一个算子到前向、反向传播替代算子之间的所有算子合并为脉冲神经网络算子,并将fc算子和脉冲神经网络算子合并为一个算子,并将其他所有算子从ir的节点列表中删除;

59、算子合并方法的实现步骤如下:

60、模块c1:取出第一个节点;

61、模块c2:在每个节点处执行判断,当前节点是否是脉冲神经网络算子;若是,识别脉冲神经网络转换方法为自定义算子转换方式,执行模块c3;否则,执行模块c5;

62、模块c3:判断前一节点是否是fc算子;若是,执行模块c4;否则,切换到下一个节点,节点下标加1,回到模块c2;

63、模块c4:使用新生成的算子fc_snnact替代fc和脉冲神经网络两个连续算子,并将这两个算子从ir的节点列表中删除;

64、模块c5:判断当前算子是否是前向、反向传播替代算子;若是,识别脉冲神经网络转换方法为拆分为基础算子转换方法,执行模块c6,否则,切换到下一个节点,节点下标加1,回到模块c2;

65、模块c6:从当前节点往上遍历,直到出现fc为止,将fc算子后的第一个算子到前向、反向传播替代算子之间的所有算子合并为脉冲神经网络算子。执行模块c4。

66、所提供的算子拆分方法为根据fc算子的规模s和低功耗机器人硬件众核处理器单核乘加器的处理能力c,决定拆分粒度将fc的大矩阵拆分为g个子矩阵;其中为上限取整函数;

67、算子拆分的实现步骤如下:

68、模块d1:获取fc算子的规模s;

69、模块d2:从芯片配置文件中获取低功耗机器人硬件众核处理器单核乘加器的处理能力c;

70、模块d3:计算拆分粒度

71、模块d4:划分fc矩阵,确定横向拆分点c,2c,…,(g-1)c,和纵向拆分点c,2c,…,(g-1)c;

72、模块d5:执行拆分,将fc矩阵中横坐标为0到c、纵坐标为0到c的元素取出,组成第1个子矩阵;将fc矩阵中横坐标为c到2c、纵坐标为c到2c的元素取出,组成第2个子矩阵;将fc矩阵中横坐标为2c到3c、纵坐标为2c到3c的元素取出,组成第3个子矩阵;以此类推,将fc矩阵中横坐标为(g-1)c到s、纵坐标为(g-1)c到s的元素取出,组成第g个子矩阵,称这些子矩阵为新的算子;

73、算子映射方法为以最少通信跳数为优化目标,建立算子约束、资源约束和依赖约束,以线性规划方法求解组合优化,将算子映射到低功耗机器人硬件众核处理器;

74、算子映射的实现步骤如下:

75、模块e1:进行映射问题建模,将算子、计算核、时序建立成三维坐标系,其中,m个算子,放在x轴,坐标表示依次为1,2,…,m;n个计算核,放在y轴,坐标表示依次为1,2,…,n;t个时间步,放在z轴,坐标表示依次为1,2,…,t;定义决策变量xijk,xijk=1表示算子i被部署到计算核j的第k个时间步;

76、模块e2:建立约束方程,约束条件包括算子约束、资源约束和依赖约束;

77、算子约束表述为:对于任意算子,只分布在一个计算核和一个时间步中,所有计算核在所有时间步累计决策变量之和为1,对于任意i,j为计算核的编号t为时间;

78、资源约束表述为:对于任一计算核,在任一时间步,承担的算子只有一个,对于任意的j,k,

79、依赖约束表述为:对于算子ia和在其后执行的算子ic,有

80、模块e3:确定目标函数,以最小化通信跳数为目标函数;

81、模块e4:采用线性规划方法求解优化问题。

82、根据本发明提供的一种存储有计算机程序的计算机可读存储介质,所述计算机程序被处理器执行时实现任一项所述的深度学习编译器脉冲神经网络算子处理方法的步骤。

83、根据本发明提供的一种深度学习编译器脉冲神经网络算子处理设备,包括:控制器;

84、所述控制器包括所述的存储有计算机程序的计算机可读存储介质,所述计算机程序被处理器执行时实现任一项所述的深度学习编译器脉冲神经网络算子处理方法的步骤;或者,所述控制器包括任一项所述的深度学习编译器脉冲神经网络算子处理系统。

85、与现有技术相比,本发明具有如下的有益效果:

86、1、本发明与深度学习编译器的兼容性较好,本发明以深度学习编译器中常用的onnx(open neural network exchange)格式表示snn(spike neural network)神经元操作符,这种兼容性使脉冲神经网络算子能够集成到主流的深度学习编译器中,如tvm(tensorvirtual machine),这是目前该领域所缺乏的;

87、2、本发明能够实现跨平台部署和执行,之前的低功耗机器人硬件众核处理器编译器,如loihi和tianj ic,是自主开发和专用的,限制了它们与tvm等主流深度学习编译器的接口能力;然而,本发明的方法允许将snn操作符集成到主流编译器中,促进跨不同硬件架构的跨平台部署和执行;

88、3、本发明实现了面向众核处理器的映射优化,目前用于loihi、tianj ic等低功耗机器人硬件众核处理器的编译器尚未针对众核处理器进行映射优化;本发明通过提供一种解决方案,包括专门为众核处理器设计的优化技术,提高了这些架构上snn计算的性能和效率,解决了这一限制。

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