本发明涉及深度学习领域,具体来说,涉及一种基于离散向量的深度学习系统及方法。
背景技术:
1、随着深度神经网络(dnn)变得更大和更复杂,与实际的生物神经网络中体现的特点一样,离散性正在成为dnn探索效率和可伸缩性的最关键的维度。一个dnn模型通常被建模为一个数据流图(dfg),其中dfg中的每个节点都是一个具有一个或多个输入和输出向量的操作符。
2、模型离散性包括在向量上引入一些特定的离散性模式:量化或者是剪枝,或者是两者的结合。通过仔细的量化和修剪,dnn模型可以压缩到更小的内存占用,而不会损失太多的精度。但是目前的深度学习系统还不能有效地利用离散性:由于各种原因,离散性的增加并没有转化为相应的效率的提高。首先,一般离散操作的计算仍然不是最优的。
3、例如,用于离散矩阵操作的cuda库cusparse已经被证明性能不佳。其次,由于dnn计算倾向于需要多个阶段,离散性模式可能在不同阶段之间存在显著差异,这使得开发针对端到端增益的离散性感知优化变得困难。最后,任何有效的离散感知优化都可能涉及跨垂直堆栈的额外支持,从深度学习框架、编译器、优化器、操作符和内核,以及一直到硬件,在任何一层上的软硬件支持不充分都可能导致效率低下
4、目前存在的离散性模型非常常见,目前有各种离散性模式正在研究中:共粒度离散性,包括信道粒度离散性和块离散性,他们涉及到剪枝信道或向量的子块,且与某些操作符相关联,只要具有细粒度离散性的向量的任何元素都可以被修剪。量化算法代表了在不同的精度水平上的模型,甚至在神经网络层或单个向量内具有不同的混合精度。一些研究进一步结合了剪枝和量化,以在严格的延迟和内存约束下获得较高的精度。总的来说,剪枝和量化已经被证明可以有效地减少某些深度学习模型的大小和延迟,有时超过10倍,而不会损失很多准确性。
5、当前,现有的离散性模型存在的缺陷为:
6、1、模型的离散性并不能直接转化为性能效益:我们现在使用“代理度量”(例如,失败率或每秒浮点运算)来评估当前策略的效果,但是这样的模型推理延迟的方法是有缺陷的,并会导致不准确的结果。例如,当一个操作子的权值以细粒度的离散性修剪了50%时,即使理论上它的失败率可以减少一半,但是使用默认的离散核,实际的模型延迟甚至可能会变得更高。这样的原因之一是当前的通用离散核实现和当前的策略支持度不够。一个离散核倾向于设置一个阈值来决定一个向量或一个行/列是离散的还是密集的,这种粗粒度的离散性假设为离散核提供了有限的优化上限,同时我们也只能使用离散编码来减少内存的使用;
7、2、到端性能回报不足:离散性算法通常侧重于探索某个dnn算子的离散性(例如卷积)。然而,当放置在端到端深度学习模型中时,整个模型的离散模式可能会受到模型中每个操作符的影响,这可能会引入难以理解或优化的复杂离散模式,导致离散性的端到端返回值减少。如图6所示,向量w2显示了一个细粒度的离散模式(63%的离散模式),即使没有进一步的复杂性,w2的初始离散模式也会引起连锁效应。w2将其离散性属性传播到下游和上游向量,包括w1、t2、t3、t4、t5和w5。由于w2的第二列被修剪了,t3的第二列注定全部为零,因此也相应的被修剪(如t2×w2=t3)。同样的,当w2的第三行被修剪时,t2的第三列也被修剪。因此,如果深度学习编译器能利用这种离散性的传播,就能进一步实现端到端离散性感知优化;
8、3、跨垂直堆栈的额外支持:模型的离散性策略往往可以在垂直堆栈中工作,但是由于缺乏一个共同的基础来建立整个计算过程中的优化策略,在不同软硬件实现程度上并不统一,所以管理员通常必须手动端到端地实现他们的离散性算法。
9、总的来说,所面临的问题是通用离散内核仍远未达到最佳状态;难以匹配当前设计的离散性方法;针对局部优化指标而没有关注到全局收益;对离散性创新的支持不足。
10、针对相关技术中的问题,目前尚未提出有效的解决方案。
技术实现思路
1、针对相关技术中的问题,本发明提出一种基于离散向量的深度学习系统及方法,以克服现有相关技术所存在的上述技术问题。
2、为此,本发明采用的具体技术方案如下:
3、根据本发明的一个方面,提供了一种基于离散向量的深度学习系统,该基于离散向量的深度学习系统包括:离散性属性导出模块、离散性属性传播模块、代码生成模块及代码执行模块;
4、所述离散性属性导出模块,用于导出dnn模型中初始向量的离散性属性;
5、所述离散性属性传播模块,用于获取dnn模型中所有向量的离散性属性;
6、所述代码生成模块,用于将原始执行计划转换为具有给定离散性模式的新执行计划,并生成端到端dnn代码;
7、所述代码执行模块,用于利用生成的端到端dnn代码对dnn模型进行配置,并获取可信的性能反馈。
8、进一步的,所述用于获取dnn模型中所有向量的离散性属性包括以下步骤:
9、获取初始向量的离散性属性;
10、利用基于初始向量的离散性属性在操作符的粒度中沿着dnn模型的数据流图传播下游和上游;
11、推导出dnn模型中所有向量的离散性属性。
12、进一步的,所述用于将原始执行计划转换为具有给定离散性模式的新执行计划,并生成端到端dnn代码包括以下步骤:
13、利用dnn模型生成原始执行计划,将原始执行计划转换为具有给定离散性属性的新执行计划;
14、对新执行计划进行编译传递处理;
15、利用dnn模型中的离散性属性进行专门化代码处理;
16、基于离散性模式中的离散性属性及专门化代码的处理生成高效的端到端dnn代码。
17、进一步的,所述可信的性能反馈包括dnn模型的整个或特定部分的内存消耗和延迟。
18、进一步的,所述利用dnn模型生成原始执行计划,将原始执行计划转换为具有给定离散性属性的新执行计划包括以下步骤:
19、将权值向量转化为不同的两个向量;
20、引入两个操作符分别对不同的两个向量进行处理;
21、将两个操作符利用相应的量化方案使用硬件指令;
22、将带有一个向量操作的原始执行计划转换为具有给定离散型属性的新执行计划。
23、进一步的,所述对新执行计划进行编译传递处理包括以下步骤:
24、将具有复杂离散性模式的向量转换为更简单的离散性模式的组合;
25、将每个简化的离散性模式生成一个有效的核;
26、重写算子的执行计划,以适应新的算子来计算新变换的向量;
27、对转换后的新执行计划执行代码生成,并专门化执行具有离散性感知的代码。
28、进一步的,所述利用dnn模型中的离散性属性进行专门化代码处理包括以下步骤:
29、利用转换后的新执行计划及dnn模型中的离散性模式,在代码生成期间使用离散性属性来专门化代码,执行离散性感知优化,以给定的离散性模式生成高效的自定义内核代码。
30、根据本发明的另一个方面,提供了一种基于离散向量的深度学习方法,该方法包括以下步骤:
31、s1、导出dnn模型中初始向量的离散性属性;
32、s2、基于初始向量的离散性属性,获取dnn模型中所有向量的离散性属性;
33、s3、基于获取的dnn模型中所有向量的离散性属性,将原始执行计划转换为具有给定离散性模式的新执行计划,并生成端到端dnn代码;
34、s4、利用生成的端到端dnn代码对dnn模型进行配置,并获取可信的性能反馈。
35、进一步的,所述基于初始向量的离散性属性,获取dnn模型中所有向量的离散性属性包括以下步骤:
36、s21、获取初始向量的离散性属性;
37、s22、利用基于初始向量的离散性属性在操作符的粒度中沿着dnn模型的数据流图传播下游和上游;
38、s23、推导出dnn模型中所有向量的离散性属性。
39、进一步的,所述基于获取的dnn模型中所有向量的离散性属性,将原始执行计划转换为具有给定离散性模式的新执行计划,并生成端到端dnn代码包括以下步骤:
40、s31、利用dnn模型生成原始执行计划,将原始执行计划转换为具有给定离散性属性的新执行计划;
41、s32、对新执行计划进行编译传递处理;
42、s33、利用dnn模型中的离散性属性进行专门化代码处理;
43、s34、基于离散性模式中的离散性属性及专门化代码的处理生成高效的端到端dnn代码。
44、本发明的有益效果为:
45、1、本发明能够针对每个操作符实现代码的专门化,为不同的操作符指定一组特定的转换规则,这些规则能够将复杂的离散性属性分解为具有已知有效优化的简单属性的组合,然后通过评估执行计划在整个堆栈中做出最优决策。
46、2、本发明所提供的系统是高度可定制的和可扩展的,不仅能够利用离散性的新方法定义新的离散性属性和模式,且能够提供新的离散性属性向量传播规则,并将新的离散性感知操作符、内核和硬件加速器合并到转换规则中。
47、3、本发明通过一种离散性属性向量的新抽象来建模离散性,能够用离散性属性扩展了现有的向量抽象,对于初始离散性属性,系统将根据自动定义的传播规则或由特定领域的知识进行属性传播,以推断深度学习模型中所有其他向量的离散性属性,与原始离散向量相比,离散性属性传播在整个模型中暴露了更多的优化机会。