CN113850362A - 一种模型蒸馏方法及相关设备 - Google Patents
一种模型蒸馏方法及相关设备 Download PDFInfo
- Publication number
- CN113850362A CN113850362A CN202110962700.9A CN202110962700A CN113850362A CN 113850362 A CN113850362 A CN 113850362A CN 202110962700 A CN202110962700 A CN 202110962700A CN 113850362 A CN113850362 A CN 113850362A
- Authority
- CN
- China
- Prior art keywords
- model
- submodel
- computing node
- data
- input data
- 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.)
- Pending
Links
- 238000000034 method Methods 0.000 title claims abstract description 201
- 238000004821 distillation Methods 0.000 title claims abstract description 122
- 230000008569 process Effects 0.000 claims abstract description 113
- 230000036961 partial effect Effects 0.000 claims abstract description 50
- 238000012545 processing Methods 0.000 claims description 114
- 230000015654 memory Effects 0.000 claims description 58
- 238000004590 computer program Methods 0.000 claims description 9
- 230000001133 acceleration Effects 0.000 abstract description 21
- 238000013473 artificial intelligence Methods 0.000 abstract description 15
- 239000013598 vector Substances 0.000 description 122
- 238000012549 training Methods 0.000 description 121
- 230000006835 compression Effects 0.000 description 64
- 238000007906 compression Methods 0.000 description 64
- 238000013140 knowledge distillation Methods 0.000 description 57
- 238000013528 artificial neural network Methods 0.000 description 51
- 230000006870 function Effects 0.000 description 51
- 239000011159 matrix material Substances 0.000 description 42
- 238000010586 diagram Methods 0.000 description 41
- 238000004364 calculation method Methods 0.000 description 33
- 238000003058 natural language processing Methods 0.000 description 33
- 238000004891 communication Methods 0.000 description 18
- 238000003062 neural network model Methods 0.000 description 18
- 230000007246 mechanism Effects 0.000 description 17
- 238000007781 pre-processing Methods 0.000 description 14
- 230000009466 transformation Effects 0.000 description 13
- 238000013519 translation Methods 0.000 description 13
- 238000007667 floating Methods 0.000 description 12
- 238000013138 pruning Methods 0.000 description 11
- 230000001537 neural effect Effects 0.000 description 10
- 238000013500 data storage Methods 0.000 description 9
- 210000002569 neuron Anatomy 0.000 description 9
- 230000002829 reductive effect Effects 0.000 description 9
- 238000006243 chemical reaction Methods 0.000 description 8
- 238000013139 quantization Methods 0.000 description 8
- 230000001976 improved effect Effects 0.000 description 7
- 238000003672 processing method Methods 0.000 description 7
- 230000004913 activation Effects 0.000 description 6
- 238000009825 accumulation Methods 0.000 description 5
- 238000013135 deep learning Methods 0.000 description 5
- 238000013461 design Methods 0.000 description 5
- 238000000605 extraction Methods 0.000 description 5
- 230000003993 interaction Effects 0.000 description 5
- 238000010801 machine learning Methods 0.000 description 5
- 230000000644 propagated effect Effects 0.000 description 5
- 238000012546 transfer Methods 0.000 description 5
- 238000004422 calculation algorithm Methods 0.000 description 4
- 230000008859 change Effects 0.000 description 4
- 238000013480 data collection Methods 0.000 description 4
- 238000005516 engineering process Methods 0.000 description 4
- 238000000638 solvent extraction Methods 0.000 description 4
- 238000004458 analytical method Methods 0.000 description 3
- 230000000694 effects Effects 0.000 description 3
- 238000010606 normalization Methods 0.000 description 3
- 238000011022 operating instruction Methods 0.000 description 3
- 238000011002 quantification Methods 0.000 description 3
- 230000004044 response Effects 0.000 description 3
- 239000000872 buffer Substances 0.000 description 2
- 230000008602 contraction Effects 0.000 description 2
- 238000011161 development Methods 0.000 description 2
- 230000018109 developmental process Effects 0.000 description 2
- 230000010365 information processing Effects 0.000 description 2
- 230000000977 initiatory effect Effects 0.000 description 2
- 230000002452 interceptive effect Effects 0.000 description 2
- 238000002372 labelling Methods 0.000 description 2
- 238000007726 management method Methods 0.000 description 2
- 230000003287 optical effect Effects 0.000 description 2
- 239000002245 particle Substances 0.000 description 2
- 230000008447 perception Effects 0.000 description 2
- 238000011160 research Methods 0.000 description 2
- 230000011218 segmentation Effects 0.000 description 2
- 230000003068 static effect Effects 0.000 description 2
- 230000009471 action Effects 0.000 description 1
- 230000003190 augmentative effect Effects 0.000 description 1
- 238000013475 authorization Methods 0.000 description 1
- 230000006399 behavior Effects 0.000 description 1
- 230000008901 benefit Effects 0.000 description 1
- 230000015572 biosynthetic process Effects 0.000 description 1
- 230000000903 blocking effect Effects 0.000 description 1
- 239000000470 constituent Substances 0.000 description 1
- 238000011217 control strategy Methods 0.000 description 1
- 238000013527 convolutional neural network Methods 0.000 description 1
- 238000000354 decomposition reaction Methods 0.000 description 1
- 238000006073 displacement reaction Methods 0.000 description 1
- 230000008451 emotion Effects 0.000 description 1
- 238000005538 encapsulation Methods 0.000 description 1
- 239000000835 fiber Substances 0.000 description 1
- 230000008570 general process Effects 0.000 description 1
- 230000006872 improvement Effects 0.000 description 1
- 239000003999 initiator Substances 0.000 description 1
- 208000013409 limited attention Diseases 0.000 description 1
- 230000000670 limiting effect Effects 0.000 description 1
- 238000012886 linear function Methods 0.000 description 1
- 239000007788 liquid Substances 0.000 description 1
- 238000013507 mapping Methods 0.000 description 1
- 238000013137 model compression technique Methods 0.000 description 1
- 238000012544 monitoring process Methods 0.000 description 1
- 238000005192 partition Methods 0.000 description 1
- 230000002085 persistent effect Effects 0.000 description 1
- 238000011176 pooling Methods 0.000 description 1
- 230000001902 propagating effect Effects 0.000 description 1
- 238000005070 sampling Methods 0.000 description 1
- 238000012216 screening Methods 0.000 description 1
- 239000004065 semiconductor Substances 0.000 description 1
- 238000012163 sequencing technique Methods 0.000 description 1
- 239000007787 solid Substances 0.000 description 1
- 239000000126 substance Substances 0.000 description 1
- 230000008093 supporting effect Effects 0.000 description 1
- 230000009897 systematic effect Effects 0.000 description 1
- 230000001052 transient effect Effects 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06N—COMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
- G06N3/00—Computing arrangements based on biological models
- G06N3/02—Neural networks
- G06N3/08—Learning methods
- G06N3/096—Transfer learning
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06N—COMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
- G06N3/00—Computing arrangements based on biological models
- G06N3/02—Neural networks
- G06N3/04—Architecture, e.g. interconnection topology
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06N—COMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
- G06N3/00—Computing arrangements based on biological models
- G06N3/02—Neural networks
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06N—COMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
- G06N3/00—Computing arrangements based on biological models
- G06N3/02—Neural networks
- G06N3/04—Architecture, e.g. interconnection topology
- G06N3/045—Combinations of networks
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06N—COMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
- G06N3/00—Computing arrangements based on biological models
- G06N3/02—Neural networks
- G06N3/08—Learning methods
- G06N3/084—Backpropagation, e.g. using gradient descent
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- Data Mining & Analysis (AREA)
- General Health & Medical Sciences (AREA)
- Biomedical Technology (AREA)
- Biophysics (AREA)
- Computational Linguistics (AREA)
- Life Sciences & Earth Sciences (AREA)
- Evolutionary Computation (AREA)
- Artificial Intelligence (AREA)
- Molecular Biology (AREA)
- Computing Systems (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Mathematical Physics (AREA)
- Software Systems (AREA)
- Health & Medical Sciences (AREA)
- Feedback Control In General (AREA)
Abstract
本申请涉及人工智能领域,公开了一种模型蒸馏方法,包括:在计算节点集群的第一计算节点处,通过学生模型的部分模型以及老师模型的部分模型,对学生模型进行蒸馏,且在蒸馏的梯度回传过程在第一计算节点的内部进行,不依赖于其他计算节点完成所负责的网络层的蒸馏,以此实现更大的计算资源利用率,进而实现蒸馏过程的加速。
Description
技术领域
本申请涉及人工智能领域,尤其涉及一种模型蒸馏方法及相关设备。
背景技术
人工智能(artificial intelligence,AI)是利用数字计算机或者数字计算机控制的机器模拟、延伸和扩展人的智能,感知环境、获取知识并使用知识获得最佳结果的理论、方法、技术及应用系统。换句话说,人工智能是计算机科学的一个分支,它企图了解智能的实质,并生产出一种新的能以人类智能相似的方式作出反应的智能机器。人工智能也就是研究各种智能机器的设计原理与实现方法,使机器具有感知、推理与决策的功能。
随着人工智能技术的不断发展,让人机之间能够通过自然语言进行交互的自然语言人机交互系统变的越来越重要。人机之间能够通过自然语言进行交互,就需要系统能够识别出人类自然语言的具体含义。通常,系统通过采用对自然语言的句子进行关键信息提取来识别句子的具体含义。
transformer结构具有强大的语义表达能力,能捕捉文本长依赖关系。自被提出以来在以翻译为代表的一系列自然语言处理的任务上显著超越了之前的模型,基于transformer结构的预训练语言模型在问答系统,语音助手等领域也取得了非常好的效果。
然而transformer模型参数很多,在对时延和精度有要求的云侧或者端侧作推理有很大挑战。因而,一些研究提出了一些在分布式计算节点上对transformer模型进行并行压缩的方法,比如剪枝、量化等,且需要配合知识蒸馏才能得到很好的效果。在现有的知识蒸馏的梯度回传过程中,是从输出层开始逐步向输入层更新,前一级网络层的更新依赖于后一级网络层的更新的完成,因此,当后一级或多级计算节点的网络层还未完成更新时,较多的计算节点都处于资源空闲状态,导致训练时间长。
发明内容
现有的分布式蒸馏方法中,各个计算节点需要依赖之后的计算节点的梯度回传结果进行模型更新,导致较多的计算节点都处于资源空闲状态,本申请提供了一种模型蒸馏方法,各个计算节点的梯度回传过程在内部进行,不依赖于之后的计算节点完成所负责的网络层的蒸馏,且各个计算节点计算得到的梯度也不会回传至前一级计算节点,以此实现更大的计算资源利用率,进而实现蒸馏过程的加速。
第一方面,本申请提供了一种模型蒸馏方法,所述方法应用于第一计算节点,第一计算节点包括于计算节点集群,计算节点集群可以进行基于老师模型对学生模型的知识蒸馏,其中,每个计算节点可以负责学生模型的一部分模型的蒸馏,各个计算节点之间可以相互协调以实现对学生模型的蒸馏。其中,计算节点集群可以包括多个串联连接的计算节点,多个串联连接的计算节点可以包括第一计算节点以及第二计算节点,第一计算节点和第二计算节点通信连接;
其中,计算节点(例如第一计算节点、第二计算节点)可以为手机、平板、笔记本电脑、智能穿戴设备等终端设备,还可以是服务器、芯片等具备数据处理能力的设备,这里并不限定;
其中,所述第一计算节点可以部署有第一子模型和第二子模型,其中,所述第一子模型为学生模型的部分模型,所述学生模型还包括与所述第一子模型连接的第三子模型,所述第二子模型为老师模型的部分模型,所述老师模型还包括与所述第二子模型连接的第四子模型,所述第一计算节点与第二计算节点通信连接,所述第二计算节点部署有所述第三子模型和所述第四子模型;
其中,在所述学生模型中,所述第三子模型连接在所述第一子模型之前,在所述老师模型中,所述第四子模型连接在所述第二子模型之前。
这里所谓的“第三子模型连接在所述第一子模型之前”,可以理解为,第三子模型相比第一子模型更靠近学生模型的输入层,也就是,第一子模型相比第三子模型更靠近学生模型的输出层,也就是,第三子模型的输出用于作为第一子模型的输入;
这里所谓的“第四子模型连接在所述第二子模型之前”,可以理解为,第四子模型相比第二子模型更靠近老师模型的输入层,也就是,第二子模型相比第四子模型更靠近老师模型的输出层,也就是,第四子模型的输出用于作为第二子模型的输入;
所述方法包括:
获取来自所述第二计算节点的第一输入数据和第二输入数据,所述第一输入数据为所述第三子模型的输出数据,所述第二输入数据为所述第四子模型处理的输出数据;其中,所述第一输入数据可以为所述第二计算节点通过所述第三子模型处理数据得到的输出,所述第二输入数据可以为所述第二计算节点通过所述第四子模型处理数据得到的输出;
其中,学生模型可以为对老师模型进行压缩得到的,例如,学生模型可以为对老师模型进行剪枝得到的,例如,学生模型可以为对老师模型进行量化得到的。
在根据老师模型进行针对于学生模型的知识蒸馏时,每次迭代训练可以包括前馈过程和梯度回传过程,其中前馈过程是学生模型和老师模型处理训练样本的过程,由于每本申请实施例中的老师模型和学生模型被划分为多个模块并分别由不同的计算节点负责,因此每个计算节点可以获取到前一级连接的计算节点的计算结果(第一个计算节点可以获取到训练样本),并基于自身负责的模块对前一级连接的计算节点的计算结果进行运算,并将计算结果传递至下一级连接的计算节点,且由于计算节点的串联连接顺序与模型的网络层排布一致,因此从多个节点的整体来看,前馈过程依然等效于通过完整的学生模型和老师模型处理训练样本的过程;
本申请实施例中,每个计算节点用于基于自身负责的部分网络进行前馈(或者称之为前向传播),得到输出数据,各个计算节点可以基于串行的顺序进行输出数据的流动,以第一计算节点以及第二计算节点为例,在前馈过程中,第二计算节点可以通过所述第三子模型处理第三输入数据得到第一输入数据,第一输入数据可以作为第一子模型的输入,进而,第一计算节点可以获取到第一输入数据,类似的,第二计算节点可以通过所述第四子模型处理第四输入数据得到第二输入数据,第二输入数据可以作为第二子模型的输入,进而,第一计算节点可以获取到第二输入数据;
通过所述第一子模型,处理所述第一输入数据,以得到第一中间输出;
通过所述第二子模型,处理所述第二输入数据,以得到第二中间输出,所述第一中间输出和所述第二中间输出用于确定第一梯度;
针对于所负责的学生模型(第一子模型),可以通过第一子模型,处理所述第一输入数据,以得到第一中间输出,针对于所负责的老师模型(第二子模型),可以通过第二子模型,处理所述第二输入数据,以得到第二中间输出。
在一种可能的实现中,第一子模型和第二子模型可以包括多个网路层(例如多个transformer层),第一中间输出可以为第一子模型中最后一层(也就是最靠近学生模型的输出层的网络层)的输出,相应的,第二中间输出可以为第二子模型中最后一层(也就是最靠近老师模型的输出层的网络层)的输出;在一种可能的实现中,第一中间输出也可以为第一子模型中各个层的输出,相应的,第二中间输出可以为第二子模型中各个层的输出。
根据所述第一梯度,对所述第一子模型进行蒸馏,以得到更新后的所述第一子模型。
在现有的知识蒸馏的梯度回传过程,是从输出层开始逐步向输入层更新,前一级网络层的更新依赖于后一级网络层的更新的完成,因此,当后一级或多级计算节点的网络层还未完成更新时,较多的计算节点都处于资源空闲状态,例如,计算节点1负责网络层1的蒸馏,计算节点2负责网络层2的蒸馏,网络层2连接在网络层1之后,在前馈过程中,网络层1的输出作为网络层2的输入,在梯度回传时,网络层2完成更新后,才进行网络层1的更新,也就是在计算节点2还没完成网络层2的更新时,计算节点1就无法对网络层1进行更新。本申请实施例中,各个计算节点的梯度回传过程在内部进行,不依赖于后一级(或后N级,N大于1)计算节点完成所负责的网络层的蒸馏,且各个计算节点计算得到的梯度也不会回传至前一级计算节点(针对于第一计算节点得到的第一梯度来说,所述第一梯度仅用于更新所述第一子模型,可以不被回传至第二计算节点,即不会被第二计算节点蒸馏负责的网络层时所使用),以此实现更大的计算资源利用率,进而实现蒸馏过程的加速。
应理解,上述描述的异步并行训练过程中,学生模型产生的误差会逐层传播(前馈的时候传播)。并行训练时,当前面的分段没有训练完成,后面的分段会受到前面的影响。另一方面,虽然通过队列可以不需要让计算节点之间互相等待,非顺序计算也给模型带来了相比于普通流水并行训练更大的误差。因此,在一种实现中,可以采用了老师模型减缓因为学生模型带来的误差累积。具体的,在蒸馏训练开始的时候,计算节点获取的输入数据可以为上一级连接的计算节点的老师模型的输出(在蒸馏开始时,学生模型的误差极大,老师模型的输入更准确,由于本申请实施例中误差会逐层传播,使得学生模型的收敛速度很慢,在开始时采用老师模型的输出作为输入可以降低前馈时候的误差传播,提高学生模型的收敛速度)。随着训练的进行,再逐渐变化成使用学生模型的输出队列的样本作为输入,以保持和推理阶段(只用学生模型)一致。
在一种可能的实现中,所述学生模型和所述老师模型为transformer模型,所述第一子模型和所述第二子模型包括一个或多个transformer层。
在一种可能的实现中,所述第一子模型不包括所述学生模型的输出层,相应的,第二子模型不包括老师模型的输出层。在第一子模型包括学生模型的输出层、第二子模型包括老师模型的输出层的情况下,第一计算节点本身就无需等待下一级计算节点的梯度回传(自身就是最后一级计算节点)。
在一种可能的实现中,所述第一梯度仅用于更新所述第一子模型。针对于第一计算节点得到的第一梯度来说,所述第一梯度仅用于更新所述第一子模型,可以不被回传至第二计算节点,也就是不会被第二计算节点蒸馏负责的网络层时所使用,以此实现更大的计算资源利用率,进而实现蒸馏过程的加速。
在实际应用中,各个计算节点执行各自负责的网络层的前馈过程的时间不统一,为了进一步减少不同计算节点之间的等待时间,在前向传播时,后一个计算节点并不会等前一个计算节点计算完成之后再开始计算。
在一种可能的实现中,可以在相邻的计算节点(例如第n个计算节点和第n+1个计算节点)之间部署一个输出队列I来收集第n个计算节点最近t0步的输出。该输出队列可以具有预先设置的内存大小并遵循先进先出(first input first output,FIFO)进行更新。第n+1个计算节点总是可以从输出队列中获取数据作为自己的输入而无需等待。这样的设计可以避免来自落后模块的负载不平衡问题,实现接近理论上的用N个训练设备就加速N倍的线性加速比。
以第n个计算节点为第二计算节点,第n+1个计算节点为第一计算节点为例,可以在第二计算节点和第一计算节点之间部署第一队列(针对于学生模型),第二计算节点可以将输出数据(包括第一输入数据)存储至第一队列,进而,第一计算节点可以从第一队列中获取所述第一输入数据,其中,所述第一队列用于存储来自所述第二计算节点的至少一个第一数据,每个所述第一数据为所述第二计算节点通过所述第三子模型处理数据得到的输出。
在一种可能的实现中,所述第一计算节点还与第三计算节点通信连接,可以部署一个第三队列(例如部署在第一计算节点和第三计算节点之间的一个存储位置,或者是部署在第一计算节点上,或者是部署在第三计算节点上),所述学生模型还包括连接在所述第一子模型之后的第五子模型,在第一计算节点通过所述第一子模型,处理所述第一输入数据之后,可以将处理得到的第一中间输出存储至第三队列(存储动作的执行主体不限于为第一计算节点),也就是所述第一中间输出可以用于被传递至第三队列,所述第三队列用于存储所述第一中间输出,以便所述第三计算节点从所述第三队列中获取所述第一中间输出,所述第一中间输出用于作为对所述第三子模型进行模型蒸馏时前馈过程的输入数据。
由于各个计算节点之间的蒸馏过程不存在依赖,因此计算节点在完成以一次梯度回传的更新过程之后,无需等待就可以直接获取下一个输入数据并进行前馈,且由于下一个输入数据已经存储在与前一级计算节点部署的队列中,也无需等待前一级计算节点的前馈过程完成,进一步提高了计算节点的计算资源利用率,实现了蒸馏过程的加速。
以第一计算节点为例,在前一次迭代时,第一计算节点可以对自身负责的学生网络的网络层进行蒸馏,以得到第一子模型,并响应于得到了第一子模型就直接从第一队列中获取第一输入数据。而在完成对所述第一子模型进行蒸馏之后,可以响应于得到了所述更新后的所述第一子模型,从所述第一队列中获取第三输入数据(即下一个输入数据),进而可以基于第三输入数据进行对所述更新后的所述第一子模型进行模型蒸馏时前馈过程。
类似的,针对于老师模型,也可以部署有一个输出队列,以第n个计算节点为第二计算节点,第n+1个计算节点为第一计算节点为例,可以部署第二队列(针对于老师模型,部署位置可以为第一计算节点和第二计算节点之间的一个存储位置,或者是部署在第一计算节点上,或者是部署在第二计算节点上),第二计算节点可以将输出数据(包括第二输入数据)存储至第二队列,进而,第一计算节点可以从第二队列中获取所述第二输入数据,其中,所述第二队列用于存储来自所述第二计算节点的至少一个第二数据,每个所述第二数据为所述第二计算节点通过所述第四子模型处理数据得到的输出。
第二方面,本申请提供了一种模型蒸馏方法,所述方法应用于第一计算节点,所述第一计算节点部署有第一子模型和第二子模型,其中,所述第一子模型为学生模型的部分模型,所述第二子模型为老师模型的部分模型,所述老师模型还包括与所述第二子模型连接的第三子模型,所述第一计算节点与第二计算节点通信连接,所述第二计算节点部署有所述第三子模型,所述方法包括:
获取来自所述第二计算节点的第一输入数据,所述第一输入数据为所述第三子模型的输出数据;
本申请实施例中,计算节点集群可以进行基于老师模型对学生模型的知识蒸馏,其中,每个计算节点可以负责学生模型的一部分模型的蒸馏,各个计算节点之间可以相互协调以实现对学生模型的蒸馏。其中,计算节点集群可以包括多个串联连接的计算节点,多个串联连接的计算节点可以包括第一计算节点以及第二计算节点,第一计算节点和第二计算节点通信连接。
其中,学生模型可以为对老师模型进行压缩得到的,例如,学生模型可以为对老师模型进行剪枝得到的,例如,学生模型可以为对老师模型进行量化得到的;
本申请实施例中,老师模型可以包括第二子模型以及第三子模型,其中,第三子模型的输出用于作为第二子模型的输入,也就是说,第二子模型和第三子模型为老师模型的部分模型,且第三子模型是老师模型中连接在所述第二子模型之前的模型;
通过所述第一子模型,处理所述第一输入数据,以得到第一中间输出;
通过所述第二子模型,处理所述第一输入数据,以得到第二中间输出,所述第一中间输出和所述第二中间输出用于确定第一梯度;
根据所述第一梯度,对所述第一子模型进行蒸馏,以得到更新后的所述第一子模型。
在现有的知识蒸馏的梯度回传过程,是从输出层开始逐步向输入层更新,前一级网络层的更新依赖于后一级网络层的更新的完成,因此,当后一级或多级计算节点的网络层还未完成更新时,较多的计算节点都处于资源空闲状态,例如,计算节点1负责网络层1的蒸馏,计算节点2负责网络层2的蒸馏,网络层2连接在网络层1之后,在前馈过程中,网络层1的输出作为网络层2的输入,在梯度回传时,网络层2完成更新后,才进行网络层1的更新,也就是在计算节点2还没完成网络层2的更新时,计算节点1就无法对网络层1进行更新。在第一方面描述的实施例中,各个计算节点的梯度回传过程在内部进行,不依赖于后一级(或后N级,N大于1)计算节点完成所负责的网络层的蒸馏,且各个计算节点计算得到的梯度也不会回传至前一级计算节点(针对于第一计算节点得到的第一梯度来说,所述第一梯度仅用于更新所述第一子模型,可以不被回传至第二计算节点,即不会被第二计算节点蒸馏负责的网络层时所使用),以此实现更大的计算资源利用率,进而实现蒸馏过程的加速。
然而,在上述描述的异步并行训练过程中,学生模型产生的误差会逐层传播(前馈的时候传播)。并行训练时,当前面的分段没有训练完成,后面的分段会受到前面的影响。另一方面,虽然通过队列可以不需要让计算节点之间互相等待,非顺序计算也给模型带来了相比于普通流水并行训练更大的误差。因此,在一种实现中,可以采用了老师模型减缓因为学生模型带来的误差累积。具体的,在蒸馏训练开始的时候,计算节点获取的输入数据可以为上一级连接的计算节点的老师模型的输出(在蒸馏开始时,学生模型的误差极大,老师模型的输入更准确,由于本申请实施例中误差会逐层传播,使得学生模型的收敛速度很慢,在开始时采用老师模型的输出(第三子模型的输出)作为输入(作为第一子模型的输入)可以降低前馈时候的误差传播,提高学生模型的收敛速度)。随着训练的进行,再逐渐变化成使用学生模型的输出队列的样本作为输入,以保持和推理阶段(只用学生模型)一致。
在一种可能的实现中,所述学生模型和所述老师模型为transformer模型,所述第一子模型和所述第二子模型包括一个或多个transformer层。
在一种可能的实现中,所述第一损失仅用于更新所述第一子模型。
在一种可能的实现中,所述获取来自所述第二计算节点的第一输入数据,包括:
从第一队列中获取所述第一输入数据,其中,所述第一队列用于存储来自所述第二计算节点的至少一个第一数据,每个所述第一数据为所述第二计算节点通过所述第三子模型处理数据得到的输出,所述至少一个第一数据包括所述第一输入数据。
在一种可能的实现中,所述第一队列为先进先出队列。
在一种可能的实现中,在所述根据所述第一梯度,对所述第一子模型进行蒸馏之前,所述至少一个第一数据包括第二输入数据,所述第二输入数据为所述第三子模型的输出数据;所述根据所述第一梯度,对所述第一子模型进行蒸馏之后,所述方法还包括:
响应于得到所述更新后的所述第一子模型,从所述第一队列中获取所述第二输入数据,所述第二输入数据用于作为对所述更新后的所述第一子模型进行模型蒸馏时前馈过程的输入数据。
在一种可能的实现中,存储所述第一子模型所需的存储资源小于存储所述第二子模型所需的存储资源。
本申请还提供了一种模型蒸馏方法,包括:
接收终端设备发送的性能要求信息;
本申请实施例中,终端设备可以向云侧设备发送性能要求信息,其中,性能要求信息可以至少包括如下的一种:精度要求、时延要求或模型压缩比要求;
在一些场景中,当终端设备需要从云侧设备获取用于推理的模型时,可以向云侧设备发送模型获取请求,其中,模型获取请求可以包括性能要求信息,相应的,云侧设备可以接收到终端设备发送的性能要求信息,并根据性能要求信息确定一个适合终端设备的学生模型,其中,当精度要求较高时,学生模型的尺寸大小可以较大(例如参数量较大或者所需存储空间较大),以此提供一个具有很高性能的模型,当时延要求较高时,学生模型的尺寸大小可以较小,以此提供一个可以快速推导的模型,当模型压缩比(伸缩前的模型与伸缩后的模型的大小比值)要求较高时,学生模型的尺寸大小可以较大,以此提供一个模型压缩比较高的模型;
获取老师模型,并基于所述性能要求信息,确定学生模型,所述学生模型为对所述老师模型进行压缩得到的;
基于多个计算节点执行针对于学生网络的知识蒸馏,以得到知识蒸馏后的学生网络,其中每个计算节点用于负责所述学生网络中部分网络的知识蒸馏;每个所述计算节点用于基于自身负责的部分网络进行前馈,得到输出数据;每个所述计算节点还用于基于自身负责的部分网络进行前馈得到的数据数据,确定梯度,并在每个所述计算节点内部进行梯度回传,以蒸馏所述自身负责的部分网络,且各个所述计算节点确定的梯度不被传递至连接的计算节点上;
向所述终端设备发送所述知识蒸馏后的学生网络。
在一种可能的实现中,所述学生模型为transformer模型,所述部分模型包括一个或多个transformer层。
在一种可能的实现中,所述串联连接的多个计算节点之间还部署有先入先出队列,将所述输出数据传递至连接的计算节点之间的先入先出队列,以便所述连接的计算节点从所述先入先出队列中获取所述输出数据。
本申请实施例中,当云侧设备确定了知识蒸馏后的学生网络后,可以将确定的知识蒸馏后的学生网络发送至终端设备,终端设备可以根据接收到的学生模型进行推理。需要说明的是,终端设备还可以对接收到的知识蒸馏后的学生网络进行进一步的模型压缩处理,这里并不限定。
通过上述方式,使得云侧设备可以基于终端设备的性能要求信息确定一个适合终端设备需求的学生模型。
第三方面,本申请提供了一种计算节点集群,包括串联连接的多个计算节点,所述多个计算节点用于执行针对于学生网络的知识蒸馏,且每个计算节点用于负责所述学生网络中部分网络的知识蒸馏;其中,
每个所述计算节点用于基于自身负责的部分网络进行前馈,得到输出数据;
每个所述计算节点还用于基于所述输出数据,确定梯度,并根据所述梯度蒸馏所述自身负责的部分网络。
在一种可能的实现中,每个所述计算节点用于在每个所述计算节点内部进行梯度回传,且各个所述计算节点确定的梯度不被传递至连接的计算节点上。
在一种可能的实现中,所述学生模型为transformer模型,所述部分模型包括一个或多个transformer层。
在一种可能的实现中,所述串联连接的多个计算节点之间还部署有先入先出队列,所述方法还包括:
每个计算节点将所述输出数据传递至连接的计算节点之间的先入先出队列,以便所述连接的计算节点从所述先入先出队列中获取所述输出数据。
第四方面,本申请提供了一种模型蒸馏装置,所述装置应用于第一计算节点,所述第一计算节点部署有第一子模型和第二子模型,其中,所述第一子模型为学生模型的部分模型,所述学生模型还包括与所述第一子模型连接的第三子模型,所述第二子模型为老师模型的部分模型,所述老师模型还包括与所述第二子模型连接的第四子模型,所述第一计算节点与第二计算节点通信连接,所述第二计算节点部署有所述第三子模型和所述第四子模型,所述装置包括:
获取模块,用于获取来自所述第二计算节点的第一输入数据和第二输入数据,所述第一输入数据为所述第三子模型的输出数据,所述第二输入数据为所述第四子模型处理的输出数据;
前馈模块,用于通过所述第一子模型,处理所述第一输入数据,以得到第一中间输出;
通过所述第二子模型,处理所述第二输入数据,以得到第二中间输出,所述第一中间输出和所述第二中间输出用于确定第一梯度;
蒸馏模块,用于根据所述第一梯度,对所述第一子模型进行蒸馏,以得到更新后的所述第一子模型。
在一种可能的实现中,所述学生模型和所述老师模型为transformer模型,所述第一子模型和所述第二子模型包括一个或多个transformer层。
在一种可能的实现中,所述第一子模型不包括所述学生模型的输出层。
在一种可能的实现中,存储所述第一子模型所需的存储资源小于存储所述第二子模型所需的存储资源。
在一种可能的实现中,所述第一梯度仅用于更新所述第一子模型。
在一种可能的实现中,所述获取模块,具体用于:
从第一队列中获取所述第一输入数据,其中,所述第一队列用于存储来自所述第二计算节点的至少一个第一数据,每个所述第一数据为所述第二计算节点通过所述第三子模型处理输入数据得到的输出,所述至少一个第一数据包括所述第一输入数据。
在一种可能的实现中,所述第一队列为先进先出队列。
在一种可能的实现中,在所述根据所述第一梯度,对所述第一子模型进行蒸馏之前,所述至少一个第一数据包括第三输入数据,所述第三输入数据为所述第三子模型的输出数据;所述获取模块,还用于:
响应于得到所述更新后的所述第一子模型,从所述第一队列中获取所述第三输入数据,所述第三输入数据用于作为对所述更新后的所述第一子模型进行模型蒸馏时前馈过程的输入数据。
在一种可能的实现中,所述获取模块,具体用于:
从第二队列中获取所述第二输入数据,其中,所述第二队列用于存储来自所述第二计算节点的至少一个第二数据,每个所述第二数据为所述第二计算节点通过所述第四子模型处理输入数据得到的输出,所述至少一个第二数据包括所述第二输入数据。
在一种可能的实现中,所述第一计算节点还与第三计算节点通信连接,所述学生模型还包括连接在所述第一子模型之后的第五子模型,所述第一中间输出用于被传递至第三队列,所述第三队列用于存储所述第一中间输出,以便所述第三计算节点从所述第三队列中获取所述第一中间输出,所述第一中间输出用于作为对所述第三子模型进行模型蒸馏时前馈过程的输入数据。
第五方面,本申请提供了一种模型蒸馏装置,应用于第一计算节点,所述第一计算节点部署有第一子模型和第二子模型,其中,所述第一子模型为学生模型的部分模型,所述第二子模型为老师模型的部分模型,所述老师模型还包括与所述第二子模型连接的第三子模型,所述第一计算节点与第二计算节点通信连接,所述第二计算节点部署有所述第三子模型,所述装置包括:
获取模块,用于获取来自所述第二计算节点的第一输入数据,所述第一输入数据为所述第三子模型的输出数据;
前馈模块,用于通过所述第一子模型,处理所述第一输入数据,以得到第一中间输出;
通过所述第二子模型,处理所述第一输入数据,以得到第二中间输出,所述第一中间输出和所述第二中间输出用于确定第一梯度;
蒸馏模块,用于根据所述第一梯度,对所述第一子模型进行蒸馏,以得到更新后的所述第一子模型。
在一种可能的实现中,所述学生模型和所述老师模型为transformer模型,所述第一子模型和所述第二子模型包括一个或多个transformer层。
在一种可能的实现中,所述第一损失仅用于更新所述第一子模型。
在一种可能的实现中,所述获取模块,具体用于:
从第一队列中获取所述第一输入数据,其中,所述第一队列用于存储来自所述第二计算节点的至少一个第一数据,每个所述第一数据为所述第二计算节点通过所述第三子模型处理数据得到的输出,所述至少一个第一数据包括所述第一输入数据。
在一种可能的实现中,所述第一队列为先进先出队列。
在一种可能的实现中,在所述根据所述第一梯度,对所述第一子模型进行蒸馏之前,所述至少一个第一数据包括第二输入数据,所述第二输入数据为所述第三子模型的输出数据;所述获取模块,还用于:
在所述根据所述第一梯度,对所述第一子模型进行蒸馏之后,响应于得到所述更新后的所述第一子模型,从所述第一队列中获取所述第二输入数据,所述第二输入数据用于作为对所述更新后的所述第一子模型进行模型蒸馏时前馈过程的输入数据。
在一种可能的实现中,存储所述第一子模型所需的存储资源小于存储所述第二子模型所需的存储资源。
本申请提供了一种模型蒸馏装置,包括:
接收模块,用于接收终端设备发送的性能要求信息。
获取模块,用于获取老师模型,并基于所述性能要求信息,确定学生模型,所述学生模型为对所述老师模型进行压缩得到的;
知识蒸馏模块,用于基于多个计算节点执行针对于学生网络的知识蒸馏,以得到知识蒸馏后的学生网络,其中每个计算节点用于负责所述学生网络中部分网络的知识蒸馏;每个所述计算节点用于基于自身负责的部分网络进行前馈,得到输出数据;每个所述计算节点还用于基于自身负责的部分网络进行前馈得到的数据数据,确定梯度,并在每个所述计算节点内部进行梯度回传,以蒸馏所述自身负责的部分网络,且各个所述计算节点确定的梯度不被传递至连接的计算节点上。
在一种可能的实现中,所述学生模型为transformer模型,所述部分模型包括一个或多个transformer层。
在一种可能的实现中,所述串联连接的多个计算节点之间还部署有先入先出队列,将所述输出数据传递至连接的计算节点之间的先入先出队列,以便所述连接的计算节点从所述先入先出队列中获取所述输出数据。
发送模块,用于向所述终端设备发送所述知识蒸馏后的学生网络。
通过上述方式,使得云侧设备可以基于终端设备的性能要求信息确定一个适合终端设备需求的学生模型。
第六方面,本申请实施例提供了一种模型蒸馏装置,可以包括存储器、处理器以及总线系统,其中,存储器用于存储程序,处理器用于执行存储器中的程序,以执行如上述第一方面及其任一可选的方法、第二方面及其任一可选的方法。
第七方面,本申请实施例提供了一种计算机可读存储介质,所述计算机可读存储介质中存储有计算机程序,当其在计算机上运行时,使得计算机执行上述第一方面及其任一可选的方法、第二方面及其任一可选的方法。
第八方面,本申请实施例提供了一种计算机程序,当其在计算机上运行时,使得计算机执行上述第一方面及其任一可选的方法、第二方面及其任一可选的方法。
第九方面,本申请提供了一种芯片系统,该芯片系统包括处理器,用于支持模型蒸馏装置实现上述方面中所涉及的功能,例如,发送或处理上述方法中所涉及的数据;或,信息。在一种可能的设计中,所述芯片系统还包括存储器,所述存储器,用于保存执行设备或训练设备必要的程序指令和数据。该芯片系统,可以由芯片构成,也可以包括芯片和其他分立器件。
附图说明
图1为人工智能主体框架的一种结构示意图;
图2为一种自然语言处理系统;
图3为一种自然语言处理系统;
图4为本申请实施例提供的自然语言处理的相关设备的示意图;
图5为本申请实施例提供的自然语言处理的相关设备的示意图;
图6为本申请实施例提供的自然语言处理的相关设备的示意图;
图7为本申请实施例提供的自然语言处理的相关设备的示意图;
图8为本申请实施例提供的自然语言处理的相关设备的示意图;
图9为一种transformer层的架构示意;
图10为本申请实施例提供的相关设备的示意图;
图11为本申请实施例提供的一种模型蒸馏方法的实施例示意;
图12为本申请实施例中的一种神经网络模型的结构示意;
图13为一种transformer层的结构示意;
图14为一个注意力头head的操作示意图;
图15为本申请实施例提供的一种模型宽度伸缩的示意;
图16为本申请实施例提供的一种模型深度伸缩的示意;
图17为本申请实施例提供的一种模型蒸馏方法的实施例示意图;
图18为本申请实施例提供的一种模型蒸馏方法的实施例示意图;
图19为本申请实施例提供的一种模型蒸馏方法的实施例示意图;
图20为本申请实施例提供的模型蒸馏装置的一种结构示意图;
图21为本申请实施例提供的模型蒸馏装置的一种结构示意图;
图22为本申请实施例提供的模型蒸馏装置的一种结构示意图;
图23为本申请实施例提供的执行设备的一种结构示意图;
图24是本申请实施例提供的训练设备一种结构示意图;
图25为本申请实施例提供的芯片的一种结构示意图。
具体实施方式
下面结合本发明实施例中的附图对本发明实施例进行描述。本发明的实施方式部分使用的术语仅用于对本发明的具体实施例进行解释,而非旨在限定本发明。
下面结合附图,对本申请的实施例进行描述。本领域普通技术人员可知,随着技术的发展和新场景的出现,本申请实施例提供的技术方案对于类似的技术问题,同样适用。
本申请的说明书和权利要求书及上述附图中的术语“第一”、“第二”等是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的术语在适当情况下可以互换,这仅仅是描述本申请的实施例中对相同属性的对象在描述时所采用的区分方式。此外,术语“包括”和“具有”以及他们的任何变形,意图在于覆盖不排他的包含,以便包含一系列单元的过程、方法、系统、产品或设备不必限于那些单元,而是可包括没有清楚地列出的或对于这些过程、方法、产品或设备固有的其它单元。
首先对人工智能系统总体工作流程进行描述,请参见图1,图1示出的为人工智能主体框架的一种结构示意图,下面从“智能信息链”(水平轴)和“IT价值链”(垂直轴)两个维度对上述人工智能主题框架进行阐述。其中,“智能信息链”反映从数据的获取到处理的一列过程。举例来说,可以是智能信息感知、智能信息表示与形成、智能推理、智能决策、智能执行与输出的一般过程。在这个过程中,数据经历了“数据—信息—知识—智慧”的凝练过程。“IT价值链”从人智能的底层基础设施、信息(提供和处理技术实现)到系统的产业生态过程,反映人工智能为信息技术产业带来的价值。
(1)基础设施
基础设施为人工智能系统提供计算能力支持,实现与外部世界的沟通,并通过基础平台实现支撑。通过传感器与外部沟通;计算能力由智能芯片(CPU、NPU、GPU、ASIC、FPGA等硬件加速芯片)提供;基础平台包括分布式计算框架及网络等相关的平台保障和支持,可以包括云存储和计算、互联互通网络等。举例来说,传感器和外部沟通获取数据,这些数据提供给基础平台提供的分布式计算系统中的智能芯片进行计算。
(2)数据
基础设施的上一层的数据用于表示人工智能领域的数据来源。数据涉及到图形、图像、语音、文本,还涉及到传统设备的物联网数据,包括已有系统的业务数据以及力、位移、液位、温度、湿度等感知数据。
(3)数据处理
数据处理通常包括数据训练,机器学习,深度学习,搜索,推理,决策等方式。
其中,机器学习和深度学习可以对数据进行符号化和形式化的智能信息建模、抽取、预处理、训练等。
推理是指在计算机或智能系统中,模拟人类的智能推理方式,依据推理控制策略,利用形式化的信息进行机器思维和求解问题的过程,典型的功能是搜索与匹配。
决策是指智能信息经过推理后进行决策的过程,通常提供分类、排序、预测等功能。
(4)通用能力
对数据经过上面提到的数据处理后,进一步基于数据处理的结果可以形成一些通用的能力,比如可以是算法或者一个通用系统,例如,翻译,文本的分析,计算机视觉的处理,语音识别,图像的识别等等。
(5)智能产品及行业应用
智能产品及行业应用指人工智能系统在各领域的产品和应用,是对人工智能整体解决方案的封装,将智能信息决策产品化、实现落地应用,其应用领域主要包括:智能终端、智能交通、智能医疗、自动驾驶、智慧城市等。
本申请可以但不限于应用于人工智能领域的自然语言处理领域中,具体可以应用于自然语言处理领域的神经网络压缩以及自然语言处理领域的神经网络推理等领域,下面将对多个落地到产品的多个应用场景进行介绍。
为了更好地理解本申请实施例的方案,下面先结合图1至图8对本申请实施例可能的应用场景进行简单的介绍。
场景1:神经网络压缩
本申请可以应用于神经网络压缩相关的服务中,具体可以为云侧服务器提供的神经网络压缩服务,其中,用户可以通过用户设备将与模型压缩相关的信息传递至云侧的神经网络压缩系统(例如云服务器),其中与模型压缩相关的信息可以为用户对于压缩后模型的性能要求等,进而云侧的服务器可以基于用户上传的性能要求,通过一定的神经网络压缩方法,得到压缩结果(例如本申请实施例中的蒸馏后的学生模型),并将压缩结果下发至用户设备。
图2示出了一种神经网络压缩系统,该神经网络搜索系统可以包括用户设备以及神经网络搜索设备。其中,用户设备包括手机、个人电脑或者信息处理中心等智能终端。用户设备为神经网络压缩的发起端,通常用户通过用户设备发起神经网络压缩请求。
上述神经网络压缩设备可以是云服务器、网络服务器、应用服务器以及管理服务器等具有神经网络压缩功能的设备或服务器。神经网络压缩设备通过交互接口接收来自智能终端的神经网络压缩请求,再通过存储数据的存储器以及处理器环节进行机器学习,深度学习,搜索,推理,决策等方式的神经网络压缩,并将压缩结果(例如本申请实施例中的蒸馏后的学生模型)反馈至用户设备。神经网络压缩设备中的存储器可以是一个统称,包括本地存储以及存储历史数据的数据库,数据库可以在神经网络压缩设备上,也可以在其它网络服务器上。
在图2所示的神经网络压缩系统中,用户设备可以接收用户的指令,例如用户设备可以接收用户输入的针对于神经网络压缩的模型性能要求,然后向神经网络压缩设备发起请求。
在图2中,神经网络压缩设备可以执行本申请实施例的模型蒸馏方法。
图3示出了另一种神经网络压缩系统,在图3中,用户设备直接作为神经网络压缩设备,该用户设备能够直接接收来自用户输入的针对于神经网络压缩的模型性能要求并直接由用户设备本身的硬件进行神经网络压缩,具体过程与图2相似,可参考上面的描述,在此不再赘述。
在图3中,用户设备自身就可以执行本申请实施例的模型蒸馏方法。
在一种可能的实现中,本申请提供的压缩服务可以适用于transformer模型的压缩,压缩服务可以用于快速高效帮助用户对其给定或者指定的基础模型(transformer模型)进行压缩,给出满足硬件约束的新模型(transformer模型)。如图4所示,用户输入所需模型的硬件的约束条件,如计算量约束,计算出需要使用提出的高效并行训练的方案压缩基础模型,输出符合用户需求的新模型。
应理解,参照图5,本申请实施例中的神经网络压缩设备可以为计算节点集群的形态,该计算节点集群可以包括多个串联连接的计算节点,可以通过多个串联连接的计算节点协同进行压缩。这里的计算节点可以是云侧或者端侧的不同设备,也可以是同一个设备或者不同设备的不同芯片。计算节点之间可以互相通信。训练阶段端侧多计算节点可以进行协同将一个大模型分块部署到每个设备上,协同进行压缩训练得到最终的小模型。最后再通过通信将小模型部署到各个平台上进行推理。
场景2:自然语言处理
图6示出了一种自然语言处理系统,该自然语言处理系统包括用户设备以及数据处理设备。其中,用户设备包括手机、个人电脑或者信息处理中心等智能终端。用户设备为自然语言数据处理的发起端,作为语言问答或者查询等请求的发起方,通常用户通过用户设备发起请求。
上述数据处理设备可以是云服务器、网络服务器、应用服务器以及管理服务器等具有数据处理功能的设备或服务器。数据处理设备通过交互接口接收来自智能终端的查询语句/语音/文本等问句(例如本申请实施例中的待处理数据),再通过存储数据的存储器以及数据处理的处理器环节进行机器学习,深度学习,搜索,推理,决策等方式的语言数据处理(例如通过本申请实施例中蒸馏后的学生模型进行数据处理),并将处理结果(例如本申请实施例中的数据处理结果)反馈至用户设备。数据处理设备中的存储器可以是一个统称,包括本地存储以及存储历史数据的数据库,数据库可以在数据处理设备上,也可以在其它网络服务器上。
在图6所示的自然语言处理系统中,用户设备可以接收用户的指令,例如用户设备可以接收用户输入的一段文本,然后向数据处理设备发起请求,使得数据处理设备针对用户设备得到的该一段文本执行自然语言处理应用(例如文本分类、文本推理、命名实体识别、翻译等),从而得到针对该一段文本的对应的自然语言处理应用的处理结果(例如分类结果、推理结果、命名实体识别结果、翻译结果等)。示例性的,用户设备可以接收用户输入的一段中文,然后向数据处理设备发起请求,使得数据处理设备对该一段中文进行实体分类,从而得到针对该一段中文的实体分类结果;示例性的,用户设备可以接收用户输入的一段中文,然后向数据处理设备发起请求,使得数据处理设备将该一段中文翻译成英文,从而得到针对该一段中文的英文译文。
图7示出了另一种自然语言处理系统,在图7中,用户设备直接作为数据处理设备,该用户设备能够直接接收来自用户的输入(例如本申请实施例中的待处理数据)并直接由用户设备本身的硬件进行处理,具体过程与图6相似,可参考上面的描述,在此不再赘述。
在图7所示的自然语言处理系统中,用户设备可以接收用户的指令,例如用户设备可以接收用户输入的一段文本,然后再由用户设备自身针对该一段文本执行自然语言处理应用(例如文本分类、文本推理、命名实体识别、翻译等),从而得到针对该一段文本的对应的自然语言处理应用的处理结果(例如分类结果、推理结果、命名实体识别结果、翻译结果等)。示例性的,用户设备可以接收用户输入的一段中文,并针对该一段中文进行实体分类,从而得到针对该一段中文的实体分类结果;示例性的,用户设备可以接收用户输入的一段中文,并将该一段中文翻译成英文,从而得到针对该一段中文的英文译文。
在本申请实施例中,用户设备可以存储有目标神经网络,并在每次操作系统(operating system,OS)或应用程序(application,APP)调用该模型后,根据目标神经网络执行推理任务。
图8是本申请实施例提供的自然语言处理的相关设备300的示意图。
上述图6和图7中的用户设备具体可以是图8中的本地设备301或者本地设备302,图6中的数据处理设备具体可以是图8中的执行设备310,其中,数据存储系统350可以存储执行设备310的待处理数据,数据存储系统350可以集成在执行设备310上,也可以设置在云上或其它网络服务器上。
图6和图7中的处理器可以通过神经网络模型或者其它模型进行数据训练/机器学习/深度学习,并利用训练得到的模型(例如本申请实施例中的蒸馏后的学生模型)针对文本序列执行自然语言处理应用(例如文本分类、序列标注、阅读理解、文本生成、文本推理、翻译等),从而得到相应的处理结果。
由于本申请实施例涉及大量神经网络的应用,为了便于理解,下面先对本申请实施例涉及的相关术语及神经网络等相关概念进行介绍。
(1)神经网络
神经网络可以是由神经单元组成的,神经单元可以是指以xs(即输入数据)和截距1为输入的运算单元,该运算单元的输出可以为:
其中,s=1、2、……n,n为大于1的自然数,Ws为xs的权重,b为神经单元的偏置。f为神经单元的激活函数(activation functions),用于将非线性特性引入神经网络中,来将神经单元中的输入信号转换为输出信号。该激活函数的输出信号可以作为下一层卷积层的输入,激活函数可以是sigmoid函数。神经网络是将多个上述单一的神经单元联结在一起形成的网络,即一个神经单元的输出可以是另一个神经单元的输入。每个神经单元的输入可以与前一层的局部接受域相连,来提取局部接受域的特征,局部接受域可以是由若干个神经单元组成的区域。
(2)transformer层
参照图9,图9为一种transformer层的架构示意,如图9所示,神经网络包括嵌入层和至少一个transformer层,至少一个transformer层可以为N个transformer层(N大于0的整数),其中,每个transformer层包括依次相邻的注意力层、加和与归一化(add&norm)层、前馈(feed forward)层和加和与归一化层。在嵌入层,对当前输入进行嵌入处理,得到多个特征向量;在所述注意力层,从所述transformer层的上一层获取P个输入向量,以P个输入向量中的任意的第一输入向量为中心,基于预设的注意力窗口范围内的各个输入向量与该第一输入向量之间的关联度,得到该第一输入向量对应的中间向量,如此确定出P个输入向量对应的P个中间向量;在所述池化层,将所述P个中间向量合并为Q个输出向量,其中至少一个transformer层中最后一个transformer层得到的多个输出向量用作所述当前输入的特征表示。
接下来,结合具体例子对上述各步骤进行具体介绍。
首先,在所述嵌入层,对当前输入进行嵌入处理,得到多个特征向量。
嵌入层可以称为输入嵌入(input embedding)层。当前输入可以为文本输入,例如可以为一段文本,也可以为一个句子。文本可以为中文文本,也可以为英文文本,还可以为其他语言文本。嵌入层在获取当前输入后,可以对该当前输入中各个词进行嵌入处理,可得到各个词的特征向量。在一些实施例中,如图1所示,所述嵌入层包括输入嵌入层和位置编码(positional encoding)层。在输入嵌入层,可以对当前输入中的各个词进行词嵌入处理,从而得到各个词的词嵌入向量。在位置编码层,可以获取各个词在该当前输入中的位置,进而对各个词的位置生成位置向量。在一些示例中,各个词的位置可以为各个词在该当前输入中的绝对位置。以当前输入为“几号应还花呗”为例,其中的“几”的位置可以表示为第一位,“号”的位置可以表示为第二位,……。在一些示例中,各个词的位置可以为各个词之间的相对位置。仍以当前输入为“几号应还款”为例,其中的“几”的位置可以表示为“号”之前,“号”的位置可以表示为“几”之后、“应”之前,……。当得到当前输入中各个词的词嵌入向量和位置向量时,可以将各个词的位置向量和对应的词嵌入向量进行组合,得到各个词特征向量,即得到该当前输入对应的多个特征向量。多个特征向量可以表示为具有预设维度的嵌入矩阵。可以设定该多个特征向量中的特征向量个数为M,预设维度为H维,则该多个特征向量可以表示为M×H的嵌入矩阵。
其次,从所述第一transformer层的上一层获取P个输入向量,以P个输入向量中的任意的第一输入向量为中心,基于预设的注意力窗口范围内的各个输入向量与该第一输入向量之间的关联度,得到该第一输入向量对应的中间向量,如此确定出P个输入向量对应的P个中间向量。注意力层也可以称为多头注意力(multi-head attention)层。在一个例子中,注意力层可以为固定窗口多头注意力(fixed window multi-head attention)层。
在一些实施例中,第一transformer层可以为上述嵌入层的下一层,P个输入向量为从嵌入层得到的所述多个特征向量。在一些实施例中,本说明书实施例提供的神经网络中的至少一个transformer层还包括第二transformer层。该第二transformer层为第一自注意力的上一层,则P个输入向量为第二transformer层输出的P个输出向量。在该神经网络中的最后一个transformer层,通过上述步骤的多个输出向量可用作当前输入的特征表示。该特征表示为为当前输入的一种适合计算机处理的特征表示,可用于文本相似度、文本分类、阅读理解、机器翻译等任务。
(3)注意力机制(attention mechanism)
注意力机制模仿了生物观察行为的内部过程,即一种将内部经验和外部感觉对齐从而增加部分区域的观察精细度的机制,能够利用有限的注意力资源从大量信息中快速筛选出高价值信息。注意力机制可以快速提取稀疏数据的重要特征,因而被广泛用于自然语言处理任务,特别是机器翻译。而自注意力机制(self-attention mechanism)是注意力机制的改进,其减少了对外部信息的依赖,更擅长捕捉数据或特征的内部相关性。注意力机制的本质思想可以改写为如下公式:
其中,Lx=||Source||代表Source的长度,公式含义即将Source中的构成元素想象成是由一系列的数据对构成,此时给定目标Target中的某个元素Query,通过计算Query和各个Key的相似性或者相关性,得到每个Key对应Value的权重系数,然后对Value进行加权求和,即得到了最终的Attention数值。所以本质上Attention机制是对Source中元素的Value值进行加权求和,而Query和Key用来计算对应Value的权重系数。从概念上理解,把Attention可以理解为从大量信息中有选择地筛选出少量重要信息并聚焦到这些重要信息上,忽略大多不重要的信息。聚焦的过程体现在权重系数的计算上,权重越大越聚焦于其对应的Value值上,即权重代表了信息的重要性,而Value是其对应的信息。自注意力机制可以理解为内部Attention(intra attention),Attention机制发生在Target的元素Query和Source中的所有元素之间,自注意力机制指的是在Source内部元素之间或者Target内部元素之间发生的Attention机制,也可以理解为Target=Source这种特殊情况下的注意力计算机制,其具体计算过程是一样的,只是计算对象发生了变化而已。
(4)自然语言处理(natural language processing,NLP)
自然语言(natural language)即人类语言,自然语言处理(NLP)就是对人类语言的处理。自然语言处理是以一种智能与高效的方式,对文本数据进行系统化分析、理解与信息提取的过程。通过使用NLP及其组件,我们可以管理非常大块的文本数据,或者执行大量的自动化任务,并且解决各式各样的问题,如自动摘要(automatic summarization),机器翻译(machine translation,MT),命名实体识别(named entity recognition,NER),关系提取(relation extraction,RE),信息抽取(information extraction,IE),情感分析,语音识别(speech recognition),问答系统(question answering)以及主题分割等等。
示例性的,自然语言处理任务可以有以下几类。
序列标注:句子中每一个单词要求模型根据上下文给出一个分类类别。如中文分词、词性标注、命名实体识别、语义角色标注。
分类任务:整个句子输出一个分类值,如文本分类。
句子关系推断:给定两个句子,判断这两个句子是否具备某种名义关系。例如entilment、QA、语义改写、自然语言推断。
生成式任务:输出一段文本,生成另一段文本。如机器翻译、文本摘要、写诗造句、看图说话。
(5)神经网络压缩
其中,压缩可以包括如下方式的至少一种:模型裁剪、权重共享、核稀疏(正则)、量化、二值化、Low-rank分解等等。
其中,量化,即为神经网络的量化(neural network quantization),是将浮点存储(运算)转换为整型存储(运算)的一种模型压缩技术,例如,原来一个模型的模型参数使用float32(32位的浮点)表示,量化后该模型的模型参数使用int8(8位的定点)表示,通过模型的量化操作,以较小的精度损失为代价,提高模型的运算速度。
模型的量化的本质是两种数据类型的数据之间的转换/映射,其中,在将浮点数据(数据类型为浮点的数据)转换为定点数据(数据类型为定点的数据)的一种实现方式中,可以通过如下公式:
其中,R为输入的浮点数据,Q为浮点数据R量化之后的定点数据,Z表示0点值(ZeroPoint),S表示比例,可见,确定S和Z后,既可进行这两个数据之间的转换。S和Z的确定方式很多,例如:
Z=Qmax-Rmax/S;
其中,Rmax表示输入浮点数据的最大值,Rmin表示输入浮点数据的最小值,Qmax表示定点数据的最大的值,Rmin表示定点数据的最小值。
其中,不同比特数(位数,1比特=1位)的定点数据之间的转换可以参照上述浮点数据和定点数据之间的转换方式,也可以是现有技术中其他的转换方式,这里不再赘述。
在一种实现中,4比特和8比特可以参照上述的转换方式进行,而浮点数据和2比特(1比特)转换的一种实现方式可通过如下公式进行:
其中2比特可表示为三个数-1,0,1。T为阈值,浮点数据大于等于T时,转换得到的2比特的定点数据为1。浮点数据小于-T时,其值转换为-1。浮点数据为其他值时,其值转换为0。1比特的转换方式和2比特类似,但其定点值只有-1和1,其中T值为0。
其中,剪枝可以理解为将网络中的部分网络结构去除。
在模型压缩后,存储压缩后的模型所需的存储资源会降低,为了保证压缩后的模型的精度,可以对压缩后的模型进行知识蒸馏,具体的,可以将压缩前的模型作为老师模型,压缩后的模型作为学生模型,对学生模型进行知识蒸馏(或者简称为蒸馏)。
其中,老师(teacher)模型也可以称之为教师模型、指导模型等,这里并不限定。
在进行知识蒸馏时,可以通过采用压缩前的模型(预先训练好的复杂网络)去训练压缩后的模型(另外一个简单的网络),以使得简单的网络可以具有和复杂网络相同或相似的数据处理能力。所谓知识蒸馏就是将训练好的复杂网络具有的“知识”迁移到一个结构更为简单的网络中。其中,上述简单的网络相比于复杂的网络可以具有更少的参数量。
需要说明的是,上述相同或相似的数据处理能力可以理解为,在处理相同的待处理数据时,知识蒸馏后的学生模型和老师模型得到处理结果是相同或相似的。
(6)损失函数
在训练深度神经网络的过程中,因为希望深度神经网络的输出尽可能的接近真正想要预测的值,所以可以通过比较当前网络的预测值和真正想要的目标值,再根据两者之间的差异情况来更新每一层神经网络的权重向量(当然,在第一次更新之前通常会有初始化的过程,即为深度神经网络中的各层预先配置参数),比如,如果网络的预测值高了,就调整权重向量让它预测低一些,不断的调整,直到深度神经网络能够预测出真正想要的目标值或与真正想要的目标值非常接近的值。因此,就需要预先定义“如何比较预测值和目标值之间的差异”,这便是损失函数(loss function)或目标函数(objective function),它们是用于衡量预测值和目标值的差异的重要方程。其中,以损失函数举例,损失函数的输出值(loss)越高表示差异越大,那么深度神经网络的训练就变成了尽可能缩小这个loss的过程。
在进行知识蒸馏时,需要基于老师模型的输出以及学生模型的输出来构建损失,其中,用于构建损失的模型输出可以是模型的输出层的输出,也可以是中间网络层的中间特征图输出,或者是对输出层的输出和/或中间网络层的中间特征图输出进行处理得到的结果。
(7)反向传播算法
卷积神经网络可以采用误差反向传播(back propagation,BP)算法在训练过程中修正初始的超分辨率模型中参数的大小,使得超分辨率模型的重建误差损失越来越小。具体地,前向传递输入信号直至输出会产生误差损失,通过反向传播误差损失信息来更新初始的超分辨率模型中参数,从而使误差损失收敛。反向传播算法是以误差损失为主导的反向传播运动,旨在得到最优的超分辨率模型的参数,例如权重矩阵。
接下来介绍本申请实施例中执行神经网络搜索方法的执行主体的更细节的架构。
下面结合图10对本申请实施例提供的系统架构进行详细的介绍。图10为本申请实施例提供的系统架构示意图。如图10所示,系统架构500包括执行设备510、训练设备520、数据库530、客户设备540、数据存储系统550以及数据采集系统560。
执行设备510包括计算模块511、I/O接口512、预处理模块513和预处理模块514。计算模块511中可以包括目标模型/规则501,预处理模块513和预处理模块514是可选的。
数据采集设备560用于采集训练样本。训练样本可以为图像数据、文本数据、音频数据等等,在本申请实施例中,训练样本为对学生模型进行蒸馏时所采用的数据。在采集到训练样本之后,数据采集设备560将这些训练样本存入数据库530。
训练设备520可以基于数据库530中维护训练样本,基于老师模型对对学生模型进行蒸馏,以得到目标模型/规则501。本申请实施例中,目标模型/规则501可以为蒸馏后的学生模型。
需要说明的是,在实际应用中,数据库530中维护的训练样本不一定都来自于数据采集设备560的采集,也有可能是从其他设备接收得到的。另外需要说明的是,训练设备520也不一定完全基于数据库530维护的训练样本进行目标模型/规则501的训练,也有可能从云端或其他地方获取训练样本进行模型训练,上述描述不应该作为对本申请实施例的限定。
根据训练设备520训练得到的目标模型/规则501可以应用于不同的系统或设备中,如应用于图10所示的执行设备510,该执行设备510可以是终端,如手机终端,平板电脑,笔记本电脑,增强现实(augmented reality,AR)/虚拟现实(virtual reality,VR)设备,车载终端等,还可以是服务器或者云端等。
具体的,训练设备520可以将蒸馏后的学生模型传递至执行设备510。
在图10中,执行设备510配置输入/输出(input/output,I/O)接口512,用于与外部设备进行数据交互,用户可以通过客户设备540向I/O接口512输入数据(例如本申请实施例中的待处理数据)。
预处理模块513和预处理模块514用于根据I/O接口512接收到的输入数据进行预处理。应理解,可以没有预处理模块513和预处理模块514或者只有的一个预处理模块。当不存在预处理模块513和预处理模块514时,可以直接采用计算模块511对输入数据进行处理。
在执行设备510对输入数据进行预处理,或者在执行设备510的计算模块511执行计算等相关的处理过程中,执行设备510可以调用数据存储系统550中的数据、代码等以用于相应的处理,也可以将相应处理得到的数据、指令等存入数据存储系统550中。
最后,I/O接口512将处理结果(例如本申请实施例中的数据处理结果)呈现给客户设备540,从而提供给用户。
在图10所示情况下,用户可以手动给定输入数据,该“手动给定输入数据”可以通过I/O接口512提供的界面进行操作。另一种情况下,客户设备540可以自动地向I/O接口512发送输入数据,如果要求客户设备540自动发送输入数据需要获得用户的授权,则用户可以在客户设备540中设置相应权限。用户可以在客户设备540查看执行设备510输出的结果,具体的呈现形式可以是显示、声音、动作等具体方式。客户设备540也可以作为数据采集端,采集如图所示输入I/O接口512的输入数据及输出I/O接口512的输出结果作为新的样本数据,并存入数据库530。当然,也可以不经过客户设备540进行采集,而是由I/O接口512直接将如图所示输入I/O接口512的输入数据及输出I/O接口512的输出结果,作为新的样本数据存入数据库530。
值得注意的是,图10仅是本申请实施例提供的一种系统架构的示意图,图中所示设备、器件、模块等之间的位置关系不构成任何限制,例如,在图10中,数据存储系统550相对执行设备510是外部存储器,在其它情况下,也可以将数据存储系统550置于执行设备510中。应理解,上述执行设备510可以部署于客户设备540中。
从模型的推理侧来说:
本申请实施例中,上述执行设备520的计算模块511可以获取到数据存储系统550中存储的代码来实现本申请实施例中的数据处理方法。
本申请实施例中,执行设备520的计算模块511可以包括硬件电路(如专用集成电路(application specific integrated circuit,ASIC)、现场可编程门阵列(field-programmable gate array,FPGA)、通用处理器、数字信号处理器(digital signalprocessing,DSP)、微处理器或微控制器等等)、或这些硬件电路的组合,例如,训练设备520可以为具有执行指令功能的硬件系统,如CPU、DSP等,或者为不具有执行指令功能的硬件系统,如ASIC、FPGA等,或者为上述不具有执行指令功能的硬件系统以及具有执行指令功能的硬件系统的组合。
具体的,执行设备520的计算模块511可以为具有执行指令功能的硬件系统,本申请实施例提供的数据处理方法可以为存储在存储器中的软件代码,执行设备520的计算模块511可以从存储器中获取到软件代码,并执行获取到的软件代码来实现本申请实施例提供的数据处理方法。
应理解,执行设备520的计算模块511可以为不具有执行指令功能的硬件系统以及具有执行指令功能的硬件系统的组合,本申请实施例提供的数据处理方法的部分步骤还可以通过执行设备520的计算模块511中不具有执行指令功能的硬件系统来实现,这里并不限定。
从模型的训练侧来说:
本申请实施例中,上述训练设备520可以获取到存储器(图10中未示出,可以集成于训练设备520或者与训练设备520分离部署)中存储的代码来实现本申请实施例中模型蒸馏方法。
本申请实施例中,训练设备520可以包括硬件电路(如专用集成电路(applicationspecific integrated circuit,ASIC)、现场可编程门阵列(field-programmable gatearray,FPGA)、通用处理器、数字信号处理器(digital signal processing,DSP)、微处理器或微控制器等等)、或这些硬件电路的组合,例如,训练设备520可以为具有执行指令功能的硬件系统,如CPU、DSP等,或者为不具有执行指令功能的硬件系统,如ASIC、FPGA等,或者为上述不具有执行指令功能的硬件系统以及具有执行指令功能的硬件系统的组合。
具体的,训练设备520可以为具有执行指令功能的硬件系统,本申请实施例提供的数据处理方法可以为存储在存储器中的软件代码,训练设备520可以从存储器中获取到软件代码,并执行获取到的软件代码来实现本申请实施例提供的中模型蒸馏方法。
应理解,训练设备520可以为不具有执行指令功能的硬件系统以及具有执行指令功能的硬件系统的组合,本申请实施例提供的中模型蒸馏方法的部分步骤还可以通过训练设备520中不具有执行指令功能的硬件系统来实现,这里并不限定。
应理解,上述训练设备的数量可以为多个(每个作为一个计算节点)。
参照图11,图11为本申请实施例提供的一种模型蒸馏方法的实施例示意,本申请实施例提供的一种模型蒸馏方法可以应用在第一计算节点上,第一计算节点可以为手机、平板、笔记本电脑、智能穿戴设备等终端设备,第一计算节点还可以是服务器、芯片等具备数据处理能力的设备,如图11示出的那样,本申请实施例提供的一种模型蒸馏方法包括:
1101、获取来自所述第二计算节点的第一输入数据和第二输入数据,所述第一输入数据为所述第三子模型的输出数据,所述第二输入数据为所述第四子模型处理的输出数据。
其中,所述第一计算节点可以部署有第一子模型和第二子模型,其中,所述第一子模型为学生模型的部分模型,所述学生模型可以包括与所述第一子模型连接的第三子模型,所述第二子模型为老师模型的部分模型,所述老师模型还包括连接在所述第二子模型之前的第四子模型,所述第一计算节点与第二计算节点通信连接,所述第二计算节点可以部署有所述第三子模型和所述第四子模型;
其中,上述第一计算节点包括第一子模型和第二子模型,可以理解为第一计算节点可以存储有第一子模型和第二子模型(存储位置可以在第一计算节点中,也可以在第一计算节点外,具体可以参照上述实施例中关于训练设备的描述)。
其中,上述第二计算节点包括所述第三子模型和所述第四子模型,可以理解为第二计算节点可以存储有第三子模型和所述第四子模型(存储位置可以在第二计算节点中,也可以在第二计算节点外,具体可以参照上述实施例中关于训练设备的描述)。
本申请实施例中,计算节点集群可以进行基于老师模型对学生模型的知识蒸馏,其中,每个计算节点可以负责学生模型的一部分模型的蒸馏,各个计算节点之间可以相互协调以实现对学生模型的蒸馏。其中,计算节点集群可以包括多个串联连接的计算节点,多个串联连接的计算节点可以包括第一计算节点以及第二计算节点,第一计算节点和第二计算节点通信连接。
其中,学生模型可以为对老师模型进行压缩得到的,例如,学生模型可以为对老师模型进行剪枝得到的,例如,学生模型可以为对老师模型进行量化得到的。
接下来描述学生模型以及老师模型:
在一种可能的实现中,终端设备可以向云侧设备发送针对于压缩的性能要求信息。具体的,终端设备可以向云侧设备发送获取NLP相关任务模型的请求,并上传要满足的性能要求信息,其中,性能要求信息包括且不限于精度要求、时延要求或模型压缩比要求中的至少一种。
以剪枝操作为例,在一种可能的实现中,云侧设备可以存储有基于transformer结构的初始神经网络模型(老师模型,该模型可以为为云侧预先存储好的具有较高数据处理精度的模型,也可以是用户指定的),云侧设备在接收到终端设备发送的性能要求信息之后,可以基于接收到的性能要求信息确定适合模型(学生模型)的尺寸信息,具体的,当性能要求信息包括的精度要求较高时,可以确定学生模型的尺寸较大,当性能要求信息包括的时延要求较高时,可以确定适合学生模型的尺寸较小,当性能要求信息包括的模型压缩比较高时,可以确定适合学生模型的尺寸较大。具体的,云侧设备可以基于预设的函数关系确定学生模型的尺寸信息,或者基于预设的对应关系确定学生模型的尺寸信息(例如通过查表的方式)。
参照图12,图12为本申请实施例中的一种神经网络模型的结构示意,如图12中示出的那样,基于transformer层的神经网络模型可以包括依次连接的嵌入层以及多个transformer层。如本领域技术人员所了解,transformer模型多用于执行自然语言处理NLP任务。需要理解,图12的结构仅仅是一个示例,transformer层的数目可以根据需要而设置。神经网络模型基于各transformer层得到的N个输出向量,确定当前节点对应的特征向量。
在嵌入层,对当前输入进行嵌入处理,得到多个特征向量。transformer模型的核心特点在于其采用的独特的注意力机制。在处理自然语言,例如一个句子时,transformer模型利用该注意力机制,为句子中各个词向量赋予不同的注意力系数,从而更全面地考虑句子中上下文对各个词的影响。嵌入层基于当前序列中各个节点的节点特征及其位置编码,得到N个嵌入向量Xl。注意力层与嵌入层相连,从嵌入层获取N个嵌入向量作为输入向量,基于N个输入向量中各个输入向量之间的关联度,对各个输入向量进行综合,得到N个输出向量,输出给后续的transformer层。transformer层获取前一层的输出作为输入向量,执行与前一级transformer层类似的操作。
参照图13,图13为一种transformer层的结构示意,本申请实施例中的各个神经网络的transformer层都可以参照图13中示出的结构,如图13中示出的那样,transformer层包括依次相邻的多头注意力层、加和与归一化(add&norm)层、前馈(feed forward)层、加和与归一化层。
其中,多头注意力层从其上一层获取N个输入向量Xl,又可以表示为矩阵X,采用自注意力机制,基于向量间的关联度对各个向量进行变换,得到N个输出向量,又可以表示为矩阵Y。可以理解,当该多头注意力层是与嵌入层直接相连的层,例如图13中与嵌入层直连的transformer层,其获取的输入向量即为嵌入层输出的嵌入向量;当该多头注意力层是后续的transformer层包括的多头注意力层,例如图13中与上一级transformer层直连的transformer层包括的多头注意力层,其获取的输入向量即为前一级transformer层的输出向量。在多头注意力层,基于多头注意力(multi-head attention,MHA)的MHA层包括多个注意力头head(如图14中示出的Head 1、Head 2、…、Head N)。
图14为一个注意力头head的操作示意图,该示意图示出注意力头head如何将输入矩阵X变换为输出矩阵Y。如图14所示,分别采用第一变换矩阵Q,第二变换矩阵K和第三变换矩阵V对N个输入向量<X1,X2,…,XN>中各个输入向量Xi进行变换,得到各个输入向量对应的第一中间向量(q向量),第二中间向量(k向量)和第三中间向量(v向量)。操作上,可以分别用第一变换矩阵Q,第二变换矩阵K和第三变换矩阵V,对N个输入向量构成的输入矩阵X进行线性变换,分别得到输入矩阵的Q矩阵,K矩阵和V矩阵,再分别对矩阵进行拆分,即可得到各个输入向量对应的q向量,k向量和v向量。对于N个输入向量中任意的第i输入向量Xi,基于该第i输入向量对应的第一中间向量(q向量,qi)与各个输入向量Xj对应的各个第二中间向量(k向量,kj)的点乘操作,确定该第i输入向量Xi与各个输入向量Xj的各个关联度。尽管也可以直接将qi与kj的点乘结果确定为关联度,但是更经典地,先将点乘结果除以一常数,然后进行softmax运算,将运算结果作为输入向量Xi与Xj的关联度,即:
于是,可以以该第i输入向量Xi与各个输入向量Xj的各个关联度αi,j作为权重因子,对各个输入向量Xj对应的第三中间向量(v向量,vj)进行加权组合,得到该第i输入向量Xi对应的第i组合向量Ci:
于是,可以得到N个输入向量对应的N个组合向量的向量序列<C1,C2,…,CN>,或矩阵C。基于该组合向量序列,可以得到N个输出向量。具体地,在一个实施例中,可以直接将N个组合向量的向量序列作为N个输出向量,即Yi=Ci。此时,输出矩阵Y即为组合向量矩阵C,又可以写成:
以上为一个注意力头head的处理过程描述,在MHA架构中,MHA层维护m套变换矩阵,每套变换矩阵包括前述第一变换矩阵Q、第二变换矩阵K和第三变换矩阵V,从而可以并行地进行上述操作,得到m个组合向量序列(即m个矩阵C),每个向量序列包括基于一套变换矩阵得到的N个组合向量。在这样的情况下,MHA层将得到的m个组合向量序列进行拼接,得到拼接矩阵;再通过第四变换矩阵W对该拼接矩阵进行变换,得到最终的输出矩阵Y。将该输出矩阵Y拆分即对应于N个输出向量<Y1,Y2,…,YN>。通过以上的操作过程,MHA层基于N个输入向量之间的关联度进行变换操作,得到N个输出向量。
如图13中示出的那样,transformer层包括前馈层,其中前馈层包括输入层、中间层intermediate layer以及输出层,其中intermediate layer包括多个神经元。
如前所述,神经网络模型可以包含多个transformer层。在一个实施例中,上述多个transformer层可以采用残差网络的方式堆叠连接,形成神经网络模型。
在多个transformer层的情况下,在一个实施例中,神经网络模型可以对多个transformer层中各个transformer层得到的N个输出向量进行综合,得到当前节点对应的特征向量。在另一实施例中,神经网络模型也可以仅提取最后一个transformer层得到的N个输出向量,对这N个输出向量进行综合,得到当前节点的特征向量。
本申请实施例中,云侧设备可以存储有上述基于transformer结构的神经网络模型(老师模型),在接收到终端设备发送的性能要求信息之后,可以基于接收到的性能要求信息确定学生模型的尺寸信息,其中,尺寸信息可以包括学生模型的宽度尺寸和深度尺寸,具体的,宽度尺寸信息可以包括神经网络模型中各个transformer层包括的注意力头的数量以及前馈层中的中间层intermediate layer包括的神经元的数量,深度尺寸信息可以包括神经网络模型包括的transformer层的数量。
本申请实施例中,多头注意力机制中的计算可以拆分成每个注意力头计算然后再相加,所以MHA层的的伸缩可以在注意力头的数量上进行。通过改变全连接网络(前馈层)的中间层intermediate layer包括的神经元的数量,全连接网络(前馈层)的中间层intermediate layer也是可以伸缩的。对于一个transformer层,宽度可以在MHA的注意力头和前馈层的中间层的神经元进行伸缩。示例性的,BERT的base模型有12个注意力头,那么对应的宽度尺寸伸缩可以有12种选择,即宽度可以是1,2,…,12中的任意一个,同理,前馈层的中间层也可以保留任意数量的神经元。
示例性的,参照图15,图15为本申请实施例提供的一种模型宽度伸缩的示意,如图15中示出的那样,在伸缩前第一神经网络模型包括的一个transformer层的中间层包括M个神经元,MHA层包括N个注意力头,对第一神经网络模型进行宽度伸缩后得到第二神经网络模型,其中第二神经网络模型包括与上述第一神经网络模型包括的一个transformer层对应的transformer层,该transformer层的中间层包括M/3个神经元,MHA层包括N/3个注意力头。
示例性的,参照图16,图16为本申请实施例提供的一种模型深度伸缩的示意,在压缩前老师模型包括M个transformer层,在压缩后得到的学生模型中transformer层的数量减少为M/3。
本申请实施例中,学生模型可以包括第一子模型以及第三子模型,其中,第三子模型的输出用于作为第一子模型的输入,也就是说,第一子模型和第三子模型为学生模型的部分模型,且第三子模型是学生模型中连接在所述第一子模型之前的模型。
本申请实施例中,老师模型可以包括第二子模型以及第四子模型,其中,第四子模型的输出用于作为第二子模型的输入,也就是说,第二子模型和第四子模型为老师模型的部分模型,且第四子模型是老师模型中连接在所述第二子模型之前的模型。
在一种可能的实现中,学生模型和老师模型可以为transformer模型,第一子模型和所述第二子模型可以包括一个或多个transformer层,相应的,第三子模型和所述第四子模型可以包括一个或多个transformer层。具体的,可以将transformer模型划分为多个模块(数量可以基于计算节点集群中的节点数量或者训练速度要求确定),其中每个模块包含一个或多个transformer层,计算节点集群中的每个计算节点可以负责一个模块的压缩。
其中,在蒸馏时可以最小化每个模块中的所有transformer层,相比于以前的局部监督学习信号,这种分区允许更大的粒度,并考虑更多的内部逐层依赖性。其次,基于模块的划分可以允许设计一个新的模型并行策略来进一步加速训练。通过将每个模块分配在不同的计算节点上,所有模块可以并行进行训练,这比之前的顺序训练显著减少了训练时间。
其中,可以基于计算节点串联连接的顺序,将transformer模型(学生模型)划分的各个模块按照在transformer模型中的连接顺序进行部署;
例如transformer模型(学生模型,学生模型为对老师模型进行量化、在宽度上的剪枝得到的,即transformer层数量不变,其中宽度上的剪枝可以为注意力头head的数量的剪枝、中间层的神经元数量的剪枝等等)可以包括transformer层A1、transformer层A2、transformer层A3、transformer层A4、transformer层A5、transformer层A6、transformer层A7、transformer层A8、transformer层A9、transformer层A10、transformer层A11、transformer层A12,计算节点集群可以包括计算节点1、计算节点2、计算节点3,计算节点1和计算节点2连接,计算节点2和计算节点3连接,可以将transformer模型划分为三个模块,分别为模块A1(包括transformer层A1、transformer层A2、transformer层A3、transformer层A4)、模块A2(包括transformer层A5、transformer层A6、transformer层A7、transformer层A8)以及模块A3(包括transformer层A9、transformer层A10、transformer层A11、transformer层A12),计算节点1可以负责模块A1的知识蒸馏,计算节点2可以负责模块A2的知识蒸馏,计算节点3可以负责模块A3的知识蒸馏。
类似的,transformer模型(老师模型)可以包括transformer层B1、transformer层B2、transformer层B3、transformer层B4、transformer层B5、transformer层B6、transformer层B7、transformer层B8、transformer层B9、transformer层B10、transformer层B11、transformer层B12,计算节点集群可以包括计算节点1、计算节点2、计算节点3,计算节点1和计算节点2连接,计算节点2和计算节点3连接,可以将transformer模型划分为三个模块,分别为模块1(包括transformer层B1、transformer层B2、transformer层B3、transformer层B4)、模块2(包括transformer层B5、transformer层B6、transformer层B7、transformer层B8)以及模块3(包括transformer层B9、transformer层B10、transformer层B11、transformer层B12),计算节点1可以负责模块A1的知识蒸馏(基于模块A1和模块B1),计算节点2可以负责模块A2的知识蒸馏(基于模块A2和模块B2),计算节点3可以负责模块A3的知识蒸馏(基于模块A3和模块B3)。
例如transformer模型(学生模型,学生模型为对老师模型进行深度上的剪枝得到的,即transformer层数量变少)可以包括transformer层A1、transformer层A2、transformer层A3、transformer层A4、transformer层A5、transformer层A6,计算节点集群可以包括计算节点1、计算节点2、计算节点3,计算节点1和计算节点2连接,计算节点2和计算节点3连接,可以将transformer模型划分为三个模块,分别为模块A1(包括transformer层A1、transformer层A2)、模块A2(包括transformer层A3、transformer层A4)以及模块A3(包括transformer层A5、transformer层A6),计算节点1可以负责模块A1的知识蒸馏,计算节点2可以负责模块A2的知识蒸馏,计算节点3可以负责模块A3的知识蒸馏。
类似的,transformer模型(老师模型)可以包括transformer层B1、transformer层B2、transformer层B3、transformer层B4、transformer层B5、transformer层B6、transformer层B7、transformer层B8、transformer层B9、transformer层B10、transformer层B11、transformer层B12,计算节点集群可以包括计算节点1、计算节点2、计算节点3,计算节点1和计算节点2连接,计算节点2和计算节点3连接,可以将transformer模型划分为三个模块,分别为模块1(包括transformer层B1、transformer层B2、transformer层B3、transformer层B4)、模块2(包括transformer层B5、transformer层B6、transformer层B7、transformer层B8)以及模块3(包括transformer层B9、transformer层B10、transformer层B11、transformer层B12),计算节点1可以负责模块A1的知识蒸馏(基于模块A1和模块B1),计算节点2可以负责模块A2的知识蒸馏(基于模块A2和模块B2),计算节点3可以负责模块A3的知识蒸馏(基于模块A3和模块B3)。
在根据老师模型进行针对于学生模型的知识蒸馏时,每次迭代训练可以包括前馈过程和梯度回传过程,其中前馈过程是学生模型和老师模型处理训练样本的过程,由于每本申请实施例中的老师模型和学生模型被划分为多个模块并分别由不同的计算节点负责,因此每个计算节点可以获取到前一级连接的计算节点的计算结果(第一个计算节点可以获取到训练样本),并基于自身负责的模块对前一级连接的计算节点的计算结果进行运算,并将计算结果传递至下一级连接的计算节点,且由于计算节点的串联连接顺序与模型的网络层排布一致,因此从多个节点的整体来看,前馈过程依然等效于通过完整的学生模型和老师模型处理训练样本的过程。
本申请实施例中,每个计算节点用于基于自身负责的部分网络进行前馈(或者称之为前向传播),得到输出数据,各个计算节点可以基于串行的顺序进行输出数据的流动,以第一计算节点以及第二计算节点为例,在前馈过程中,第二计算节点可以通过所述第三子模型处理数据得到第一输入数据,第一输入数据可以作为第一子模型的输入,进而,第一计算节点可以获取到第一输入数据,类似的,第二计算节点可以通过所述第四子模型处理数据得到第二输入数据,第二输入数据可以作为第二子模型的输入,进而,第一计算节点可以获取到第二输入数据。
接下来描述第一输入数据的获取方式:
在实际应用中,各个计算节点执行各自负责的网络层的前馈过程的时间不统一,为了进一步减少不同计算节点之间的等待时间,在前向传播时,后一个计算节点并不会等前一个计算节点计算完成之后再开始计算。
在一种可能的实现中,可以在相邻的计算节点(例如第n个计算节点和第n+1个计算节点)之间部署一个输出队列I来收集第n个计算节点最近t0步的输出,该输入队列具有预先设置的内存大小并遵循先进先出(firstinput first output,FIFO)进行更新。第n+1个计算节点总是可以从队列中获取作为自己的输入而无需等待。这样的设计可以避免来自落后模块的负载不平衡问题,实现接近理论上的用N个训练设备就加速N倍的线性加速比。
以第n个计算节点为第二计算节点,第n+1个计算节点为第一计算节点为例,可以在第二计算节点和第一计算节点之间部署第一队列(针对于学生模型),第二计算节点可以将输出数据(包括第一输入数据)存储至第一队列,进而,第一计算节点可以从第一队列中获取所述第一输入数据,其中,所述第一队列用于存储来自所述第二计算节点的至少一个第一数据,每个所述第一数据为所述第二计算节点通过所述第三子模型处理输入数据得到的输出。
在一种可能的实现中,所述第一计算节点还与第三计算节点通信连接,可以部署一个第三队列(例如部署在第一计算节点和第三计算节点之间的一个存储位置,或者是部署在第一计算节点上,或者是部署在第三计算节点上),所述学生模型还包括连接在所述第一子模型之后的第五子模型,在第一计算节点通过所述第一子模型,处理所述第一输入数据之后,可以将处理得到的第一中间输出存储至第三队列(存储动作的执行主体不限于为第一计算节点),也就是所述第一中间输出可以用于被传递至第三队列,所述第三队列用于存储所述第一中间输出,以便所述第三计算节点从所述第三队列中获取所述第一中间输出,所述第一中间输出用于作为对所述第三子模型进行模型蒸馏时前馈过程的输入数据。
接下来描述第一输入数据的获取时机:
在现有的知识蒸馏的梯度回传过程,是从输出层开始逐步向输入层更新,前一级网络层的更新依赖于后一级网络层的更新的完成,因此,当后一级或多级计算节点的网络层还未完成更新时,较多的计算节点都处于资源空闲状态,例如,计算节点1负责网络层1的蒸馏,计算节点2负责网络层2的蒸馏,网络层2连接在网络层1之后,在前馈过程中,网络层1的输出作为网络层2的输入,在梯度回传时,网络层2完成更新后,才进行网络层1的更新,也就是在计算节点2还没完成网络层2的更新时,计算节点1就无法对网络层1进行更新。本申请实施例的发明思路在于,各个计算节点的梯度回传过程在内部进行,不依赖于后一级(或后N级,N大于1)计算节点完成所负责的网络层的蒸馏,且各个计算节点计算得到的梯度也不会回传至前一级计算节点,基于异步并行训练实现了更大的计算资源利用率,进而实现蒸馏过程的加速。
由于各个计算节点之间的蒸馏过程不存在依赖,因此计算节点在完成以一次梯度回传的更新过程之后,无需等待就可以直接获取下一个输入数据并进行前馈,且由于下一个输入数据已经存储在与前一级计算节点部署的队列中,也无需等待前一级计算节点的前馈过程完成,进一步提高了计算节点的计算资源利用率,实现了蒸馏过程的加速。
以第一计算节点为例,在前一次迭代时,第一计算节点可以对自身负责的学生网络的网络层进行蒸馏,以得到第一子模型,并响应于得到了第一子模型就直接从第一队列中获取第一输入数据。而在完成对所述第一子模型进行蒸馏之后,可以基于得到所述更新后的所述第一子模型,从所述第一队列中获取第三输入数据(即下一个输入数据),进而可以基于第三输入数据进行对所述更新后的所述第一子模型进行模型蒸馏时前馈过程。
类似的,针对于老师模型,也可以部署有一个输出队列,以第n个计算节点为第二计算节点,第n+1个计算节点为第一计算节点为例,可以部署第二队列(针对于老师模型,部署位置可以为第一计算节点和第二计算节点之间的一个存储位置,或者是部署在第一计算节点上,或者是部署在第二计算节点上),第二计算节点可以将输出数据(包括第二输入数据)存储至第二队列,进而,第一计算节点可以从第二队列中获取所述第二输入数据,其中,所述第二队列用于存储来自所述第二计算节点的至少一个第二数据,每个所述第二数据为所述第二计算节点通过所述第四子模型处理数据得到的输出。
1102、通过所述第一子模型,处理所述第一输入数据,以得到第一中间输出。
1103、通过所述第二子模型,处理所述第二输入数据,以得到第二中间输出,所述第一中间输出和所述第二中间输出用于确定第一梯度。
其中,步骤1102和步骤1103描述了第一计算节点基于输入数据进行的前馈过程,针对于所负责的学生模型(第一子模型),可以通过第一子模型,处理所述第一输入数据,以得到第一中间输出,针对于所负责的老师模型(第二子模型),可以通过第二子模型,处理所述第二输入数据,以得到第二中间输出。
在一种可能的实现中,第一子模型和第二子模型可以包括多个网路层(例如多个transformer层),第一中间输出可以为第一子模型中最后一层(也就是最靠近学生模型的输出层的网络层)的输出,相应的,第二中间输出可以为第二子模型中最后一层(也就是最靠近老师模型的输出层的网络层)的输出。
对于第n个计算节点,假设其负责的小模型(所负责的学生模型的部分模型)中可学习的参数为wn,它的训练目标函数是最小化压缩之后的小模型的特征与未压缩的大模型(所负责的老师模型的部分模型)特征之间的距离L(n)。对于第n个计算节点,一种常用的构建损失函数的特征是该计算节点最后的输出,假设和分别是压缩前后模型的第n个计算节点的输出,那么第n个计算节点的训练目标函数可以表达为
在一种可能的实现中,第一中间输出也可以为第一子模型中各个层的输出,相应的,第二中间输出可以为第二子模型中各个层的输出。对于不改变网络层(例如transformer层)数的压缩方法(例如模型量化,宽度方向上的剪枝),一种常用的构建损失函数的特征是每个计算节点中每个网络层(例如transformer层)的输出。假设fl和分别是压缩前后第l个transformer层的输出,那么第n个计算节点的目标函数可以表示成:
本申请实施例中,在得到第一中间输出以及第二中间输出后,可以基于第一中间输出和第二中间输出构建损失,并基于损失确定第一梯度,第一梯度可用于更新第一子模型。
应理解,在一种可能的实现中,所述第一子模型不包括所述学生模型的输出层,相应的,第二子模型不包括老师模型的输出层。在第一子模型包括学生模型的输出层、第二子模型包括老师模型的输出层的情况下,第一计算节点本身就无需等待下一级计算节点的梯度回传(自身就是最后一级计算节点)。
1104、根据所述第一梯度,对所述第一子模型进行蒸馏,以得到更新后的所述第一子模型。
在现有的知识蒸馏的梯度回传过程,是从输出层开始逐步向输入层更新,前一级网络层的更新依赖于后一级网络层的更新的完成,因此,当后一级或多级计算节点的网络层还未完成更新时,较多的计算节点都处于资源空闲状态,例如,计算节点1负责网络层1的蒸馏,计算节点2负责网络层2的蒸馏,网络层2连接在网络层1之后,在前馈过程中,网络层1的输出作为网络层2的输入,在梯度回传时,网络层2完成更新后,才进行网络层1的更新,也就是在计算节点2还没完成网络层2的更新时,计算节点1就无法对网络层1进行更新。本申请实施例中,各个计算节点的梯度回传过程在内部进行,不依赖于后一级(或后N级,N大于1)计算节点完成所负责的网络层的蒸馏,且各个计算节点计算得到的梯度也不会回传至前一级计算节点(针对于第一计算节点得到的第一梯度来说,所述第一梯度仅用于更新所述第一子模型,可以不被回传至第二计算节点,即不会被第二计算节点蒸馏负责的网络层时所使用),以此实现更大的计算资源利用率,进而实现蒸馏过程的加速。
应理解,上述描述的异步并行训练过程中,学生模型产生的误差会逐层传播(前馈的时候传播)。并行训练时,当前面的分段没有训练完成,后面的分段会受到前面的影响。另一方面,虽然通过队列可以不需要让计算节点之间互相等待,非顺序计算也给模型带来了相比于普通流水并行训练更大的误差。因此,在一种实现中,可以采用了老师模型减缓因为学生模型带来的误差累积。具体的,在蒸馏训练开始的时候,计算节点获取的输入数据可以为上一级连接的计算节点的老师模型的输出(在蒸馏开始时,学生模型的误差极大,老师模型的输入更准确,由于本申请实施例中误差会逐层传播,使得学生模型的收敛速度很慢,在开始时采用老师模型的输出作为输入可以降低前馈时候的误差传播,提高学生模型的收敛速度)。随着训练的进行,再逐渐变化成使用学生模型的输出队列的样本作为输入,以保持和推理阶段(只用学生模型)一致。具体可以参照图18以及对应的实施例中的描述,这里不再赘述。
有很多衰减函数都可以达到让λ在训练过程中从1变化到0。假设训练的总的迭代次数是T0,一种常用的线性衰减可以表示成:
λt=max(1-t/T0,0);
参照图17,图17为一种系统的示意,为了加速压缩训练,可以将模型的各个模块放在N个计算设备上。给定训练集D,小网络前向传播时每个分块单独计算自己模块的损失Ln,n=1,...,N。在反向传播中,限制每个模块的梯度只在模块内局部传播,而不向前面的模块传播。模块的数量N可以根据计算资源的内存限制进行调整。同时,最好对模型进行均匀分区,以确保不同模块之间的内存占用平衡。
以学生网络为量化得到的,利用本申请实施例提出的蒸馏时,相比于普通的非并行量化训练。并行训练方法有着显著的训练速度提升(超过100倍),同时仅消耗1/3的显存,依赖4096条训练数据,而最终压缩模型准确率仅略有下降,效果可以如下表所示:
此外,本申请实施例还提供了一种计算节点集群,包括串联连接的多个计算节点,所述多个计算节点用于执行针对于学生网络的知识蒸馏,且每个计算节点用于负责所述学生网络中部分网络的知识蒸馏;其中,每个所述计算节点用于基于自身负责的部分网络进行前馈,得到输出数据;
每个所述计算节点还用于基于自身负责的部分网络进行前馈得到的数据数据,确定梯度,并在每个所述计算节点内部进行梯度回传,以蒸馏所述自身负责的部分网络,且各个所述计算节点确定的梯度不被传递至连接的计算节点上。
在一种可能的实现中,所述学生模型为transformer模型,所述部分模型包括一个或多个transformer层。
在一种可能的实现中,可以将所述输出数据传递至连接的计算节点之间的先入先出队列,以便所述连接的计算节点从所述先入先出队列中获取所述输出数据。
本申请实施例提供了一种模型蒸馏方法,所述方法应用于第一计算节点,所述第一计算节点部署有第一子模型和第二子模型,其中,所述第一子模型为学生模型的部分模型,所述学生模型还包括与所述第一子模型连接的第三子模型,所述第二子模型为老师模型的部分模型,所述老师模型还包括与所述第二子模型连接的第四子模型,所述第一计算节点与第二计算节点通信连接,所述第二计算节点部署有所述第三子模型和所述第四子模型,所述方法包括:获取来自所述第二计算节点的第一输入数据和第二输入数据,所述第一输入数据为所述第三子模型的输出数据,所述第二输入数据为所述第四子模型处理的输出数据;通过所述第一子模型,处理所述第一输入数据,以得到第一中间输出;通过所述第二子模型,处理所述第二输入数据,以得到第二中间输出,所述第一中间输出和所述第二中间输出用于确定第一梯度;根据所述第一梯度,对所述第一子模型进行蒸馏,以得到更新后的所述第一子模型。本申请实施例中,各个计算节点的梯度回传过程在内部进行,不依赖于后一级(或后N级,N大于1)计算节点完成所负责的网络层的蒸馏,且各个计算节点计算得到的梯度也不会回传至前一级计算节点(针对于第一计算节点得到的第一梯度来说,所述第一梯度仅用于更新所述第一子模型,可以不被回传至第二计算节点,即不会被第二计算节点蒸馏负责的网络层时所使用),以此实现更大的计算资源利用率,进而实现蒸馏过程的加速。
参照图18,图18为本申请实施例提供的一种模型蒸馏方法的示意,所述方法可以应用于第一计算节点,所述第一计算节点与第二计算节点通信连接,第一计算节点可以为手机、平板、笔记本电脑、智能穿戴设备等终端设备,第一计算节点还可以是服务器、芯片等具备数据处理能力的设备,如图18示出的那样,本申请实施例提供的一种模型蒸馏方法包括:
1801、获取来自所述第二计算节点的第一输入数据,所述第一输入数据为所述第三子模型的输出数据。
其中,所述第一计算节点可以部署有第一子模型和第二子模型,其中,所述第一子模型为学生模型的部分模型,所述第二子模型为老师模型的部分模型,所述老师模型还包括与所述第二子模型连接的第三子模型,所述第一计算节点与第二计算节点通信连接,所述第二计算节点可以部署有所述第三子模型;
本申请实施例中,计算节点集群可以进行基于老师模型对学生模型的知识蒸馏,其中,每个计算节点可以负责学生模型的一部分模型的蒸馏,各个计算节点之间可以相互协调以实现对学生模型的蒸馏。其中,计算节点集群可以包括多个串联连接的计算节点,多个串联连接的计算节点可以包括第一计算节点以及第二计算节点,第一计算节点和第二计算节点通信连接。
其中,学生模型可以为对老师模型进行压缩得到的,例如,学生模型可以为对老师模型进行剪枝得到的,例如,学生模型可以为对老师模型进行量化得到的。
本申请实施例中,老师模型可以包括第二子模型以及第三子模型,其中,第三子模型的输出用于作为第二子模型的输入,也就是说,第二子模型和第三子模型为老师模型的部分模型,且第三子模型是老师模型中连接在所述第二子模型之前的模型。
应理解,图11对应的实施例中的第四子模型可以为本申请实施例中的第三子模型。
在一种可能的实现中,学生模型和老师模型可以为transformer模型,第一子模型和所述第二子模型可以包括一个或多个transformer层,相应的,第三子模型可以包括一个或多个transformer层。具体的,可以将transformer模型划分为多个模块(数量可以基于计算节点集群中的节点数量或者训练速度要求确定),其中每个模块包含一个或多个transformer层,计算节点集群中的每个计算节点可以负责一个模块的压缩。
其中,在蒸馏时可以最小化每个模块中的所有transformer层,相比于以前的局部监督学习信号,这种分区允许更大的粒度,并考虑更多的内部逐层依赖性。其次,基于模块的划分可以允许设计一个新的模型并行策略来进一步加速训练。通过将每个模块分配在不同的计算节点上,所有模块可以并行进行训练,这比之前的顺序训练显著减少了训练时间。
其中,可以基于计算节点串联连接的顺序,将transformer模型(学生模型)划分的各个模块按照在transformer模型中的连接顺序进行部署;
例如transformer模型(学生模型,学生模型为对老师模型进行量化、在宽度上的剪枝得到的,即transformer层数量不变,其中宽度上的剪枝可以为注意力头head的数量的剪枝、中间层的神经元数量的剪枝等等)可以包括transformer层A1、transformer层A2、transformer层A3、transformer层A4、transformer层A5、transformer层A6、transformer层A7、transformer层A8、transformer层A9、transformer层A10、transformer层A11、transformer层A12,计算节点集群可以包括计算节点1、计算节点2、计算节点3,计算节点1和计算节点2连接,计算节点2和计算节点3连接,可以将transformer模型划分为三个模块,分别为模块A1(包括transformer层A1、transformer层A2、transformer层A3、transformer层A4)、模块A2(包括transformer层A5、transformer层A6、transformer层A7、transformer层A8)以及模块A3(包括transformer层A9、transformer层A10、transformer层A11、transformer层A12),计算节点1可以负责模块A1的知识蒸馏,计算节点2可以负责模块A2的知识蒸馏,计算节点3可以负责模块A3的知识蒸馏。
类似的,transformer模型(老师模型)可以包括transformer层B1、transformer层B2、transformer层B3、transformer层B4、transformer层B5、transformer层B6、transformer层B7、transformer层B8、transformer层B9、transformer层B10、transformer层B11、transformer层B12,计算节点集群可以包括计算节点1、计算节点2、计算节点3,计算节点1和计算节点2连接,计算节点2和计算节点3连接,可以将transformer模型划分为三个模块,分别为模块1(包括transformer层B1、transformer层B2、transformer层B3、transformer层B4)、模块2(包括transformer层B5、transformer层B6、transformer层B7、transformer层B8)以及模块3(包括transformer层B9、transformer层B10、transformer层B11、transformer层B12),计算节点1可以负责模块A1的知识蒸馏(基于模块A1和模块B1),计算节点2可以负责模块A2的知识蒸馏(基于模块A2和模块B2),计算节点3可以负责模块A3的知识蒸馏(基于模块A3和模块B3)。
例如transformer模型(学生模型,学生模型为对老师模型进行深度上的剪枝得到的,即transformer层数量变少)可以包括transformer层A1、transformer层A2、transformer层A3、transformer层A4、transformer层A5、transformer层A6,计算节点集群可以包括计算节点1、计算节点2、计算节点3,计算节点1和计算节点2连接,计算节点2和计算节点3连接,可以将transformer模型划分为三个模块,分别为模块A1(包括transformer层A1、transformer层A2)、模块A2(包括transformer层A3、transformer层A4)以及模块A3(包括transformer层A5、transformer层A6),计算节点1可以负责模块A1的知识蒸馏,计算节点2可以负责模块A2的知识蒸馏,计算节点3可以负责模块A3的知识蒸馏。
类似的,transformer模型(老师模型)可以包括transformer层B1、transformer层B2、transformer层B3、transformer层B4、transformer层B5、transformer层B6、transformer层B7、transformer层B8、transformer层B9、transformer层B10、transformer层B11、transformer层B12,计算节点集群可以包括计算节点1、计算节点2、计算节点3,计算节点1和计算节点2连接,计算节点2和计算节点3连接,可以将transformer模型划分为三个模块,分别为模块1(包括transformer层B1、transformer层B2、transformer层B3、transformer层B4)、模块2(包括transformer层B5、transformer层B6、transformer层B7、transformer层B8)以及模块3(包括transformer层B9、transformer层B10、transformer层B11、transformer层B12),计算节点1可以负责模块A1的知识蒸馏(基于模块A1和模块B1),计算节点2可以负责模块A2的知识蒸馏(基于模块A2和模块B2),计算节点3可以负责模块A3的知识蒸馏(基于模块A3和模块B3)。
在根据老师模型进行针对于学生模型的知识蒸馏时,每次迭代训练可以包括前馈过程和梯度回传过程,其中前馈过程是学生模型和老师模型处理训练样本的过程,由于每本申请实施例中的老师模型和学生模型被划分为多个模块并分别由不同的计算节点负责,因此每个计算节点可以获取到前一级连接的计算节点的计算结果(第一个计算节点可以获取到训练样本),并基于自身负责的模块对前一级连接的计算节点的计算结果进行运算,并将计算结果传递至下一级连接的计算节点。
在现有的知识蒸馏的梯度回传过程,是从输出层开始逐步向输入层更新,前一级网络层的更新依赖于后一级网络层的更新的完成,因此,当后一级或多级计算节点的网络层还未完成更新时,较多的计算节点都处于资源空闲状态,例如,计算节点1负责网络层1的蒸馏,计算节点2负责网络层2的蒸馏,网络层2连接在网络层1之后,在前馈过程中,网络层1的输出作为网络层2的输入,在梯度回传时,网络层2完成更新后,才进行网络层1的更新,也就是在计算节点2还没完成网络层2的更新时,计算节点1就无法对网络层1进行更新。在图11对应的实施例中,各个计算节点的梯度回传过程在内部进行,不依赖于后一级(或后N级,N大于1)计算节点完成所负责的网络层的蒸馏,且各个计算节点计算得到的梯度也不会回传至前一级计算节点(针对于第一计算节点得到的第一梯度来说,所述第一梯度仅用于更新所述第一子模型,可以不被回传至第二计算节点,即不会被第二计算节点蒸馏负责的网络层时所使用),以此实现更大的计算资源利用率,进而实现蒸馏过程的加速。
然而,在上述描述的异步并行训练过程中,学生模型产生的误差会逐层传播(前馈的时候传播)。并行训练时,当前面的分段没有训练完成,后面的分段会受到前面的影响。另一方面,虽然通过队列可以不需要让计算节点之间互相等待,非顺序计算也给模型带来了相比于普通流水并行训练更大的误差。因此,在一种实现中,可以采用了老师模型减缓因为学生模型带来的误差累积。具体的,在蒸馏训练开始的时候,计算节点获取的输入数据可以为上一级连接的计算节点的老师模型的输出(在蒸馏开始时,学生模型的误差极大,老师模型的输入更准确,由于本申请实施例中误差会逐层传播,使得学生模型的收敛速度很慢,在开始时采用老师模型的输出(第三子模型的输出)作为输入(作为第一子模型的输入)可以降低前馈时候的误差传播,提高学生模型的收敛速度)。随着训练的进行,再逐渐变化成使用学生模型的输出队列的样本作为输入,以保持和推理阶段(只用学生模型)一致。
本申请实施例中,每个计算节点用于基于自身负责的部分网络进行前馈(或者称之为前向传播),得到输出数据,各个计算节点可以基于串行的顺序进行输出数据的流动,以第一计算节点以及第二计算节点为例,在前馈过程中,第二计算节点可以通过所述第三子模型(老师模型)处理数据得到第一输入数据,第一输入数据可以作为第一子模型的输入,进而,第一计算节点可以获取到第一输入数据,类似的,第二计算节点可以通过所述第四子模型处理数据得到第二输入数据,第二输入数据可以作为第二子模型的输入,进而,第一计算节点可以获取到第二输入数据。
接下来描述第一输入数据的获取方式:
在实际应用中,各个计算节点执行各自负责的网络层的前馈过程的时间不统一,为了进一步减少不同计算节点之间的等待时间,在前向传播时,后一个计算节点并不会等前一个计算节点计算完成之后再开始计算。
在一种可能的实现中,可以在相邻的计算节点(例如第n个计算节点和第n+1个计算节点)之间部署一个输出队列I来收集第n个计算节点最近t0步的输出,该输入队列具有预先设置的内存大小并遵循先进先出(firstinput first output,FIFO)进行更新。第n+1个计算节点总是可以从队列中获取作为自己的输入而无需等待。这样的设计可以避免来自落后模块的负载不平衡问题,实现接近理论上的用N个训练设备就加速N倍的线性加速比。
以第n个计算节点为第二计算节点,第n+1个计算节点为第一计算节点为例,可以在第二计算节点和第一计算节点之间部署第一队列(针对于老师模型),第二计算节点可以将输出数据(包括第一输入数据)存储至第一队列,进而,第一计算节点可以从第一队列中获取所述第一输入数据,其中,所述第一队列用于存储来自所述第二计算节点的至少一个第一数据,每个所述第一数据为所述第二计算节点通过所述第三子模型处理数据得到的输出。
接下来描述第一输入数据的获取时机:
在现有的知识蒸馏的梯度回传过程,是从输出层开始逐步向输入层更新,前一级网络层的更新依赖于后一级网络层的更新的完成,因此,当后一级或多级计算节点的网络层还未完成更新时,较多的计算节点都处于资源空闲状态,例如,计算节点1负责网络层1的蒸馏,计算节点2负责网络层2的蒸馏,网络层2连接在网络层1之后,在前馈过程中,网络层1的输出作为网络层2的输入,在梯度回传时,网络层2完成更新后,才进行网络层1的更新,也就是在计算节点2还没完成网络层2的更新时,计算节点1就无法对网络层1进行更新。本申请实施例的发明思路在于,各个计算节点的梯度回传过程在内部进行,不依赖于后一级(或后N级,N大于1)计算节点完成所负责的网络层的蒸馏,且各个计算节点计算得到的梯度也不会回传至前一级计算节点,基于异步并行训练实现了更大的计算资源利用率,进而实现蒸馏过程的加速。
由于各个计算节点之间的蒸馏过程不存在依赖,因此计算节点在完成以一次梯度回传的更新过程之后,无需等待就可以直接获取下一个输入数据并进行前馈,且由于下一个输入数据已经存储在与前一级计算节点部署的队列中,也无需等待前一级计算节点的前馈过程完成,进一步提高了计算节点的计算资源利用率,实现了蒸馏过程的加速。
以第一计算节点为例,在前一次迭代时,第一计算节点可以对自身负责的学生网络的网络层进行蒸馏,以得到第一子模型,并基于得到了第一子模型就直接从第一队列中获取第一输入数据。而在完成对所述第一子模型进行蒸馏之后,可以基于得到所述更新后的所述第一子模型,从所述第一队列中获取所述第二输入数据(即下一个输入数据),进而可以基于第二输入数据进行对所述更新后的所述第一子模型进行模型蒸馏时前馈过程,或者,可以在第二计算节点和第一计算节点之间部署第二队列(针对于学生模型),在完成对所述第一子模型进行蒸馏之后,可以基于得到所述更新后的所述第一子模型,从所述第一队列中获取第五输入数据(即下一个输入数据),进而可以基于第五输入数据进行对所述更新后的所述第一子模型进行模型蒸馏时前馈过程。
类似的,针对于老师模型,也可以在各个计算节点之间部署队列,以第n个计算节点为第二计算节点,第n+1个计算节点为第一计算节点为例,第一计算节点可以从第一队列中获取所述第一输入数据,其中,所述第一队列用于存储来自所述第二计算节点的至少一个第二数据,每个所述第二数据为所述第二计算节点通过所述第三子模型处理数据得到的输出。
1802、通过所述第一子模型,处理所述第一输入数据,以得到第一中间输出;
1803、通过所述第二子模型,处理所述第一输入数据,以得到第二中间输出,所述第一中间输出和所述第二中间输出用于确定第一梯度;
其中,步骤1802和步骤1803描述了第一计算节点基于输入数据进行的前馈过程,针对于所负责的学生模型(第一子模型),可以通过第一子模型,处理所述第一输入数据,以得到第一中间输出,针对于所负责的老师模型(第二子模型),可以通过第二子模型,处理所述第一输入数据,以得到第二中间输出。
在一种可能的实现中,第一子模型和第二子模型可以包括多个网路层(例如多个transformer层),第一中间输出可以为第一子模型中最后一层(也就是最靠近学生模型的输出层的网络层)的输出,相应的,第二中间输出可以为第二子模型中最后一层(也就是最靠近老师模型的输出层的网络层)的输出。
对于第n个计算节点,假设其负责的小模型(所负责的学生模型的部分模型)中可学习的参数为wn,它的训练目标函数是最小化压缩之后的小模型的特征与未压缩的大模型(所负责的老师模型的部分模型)特征之间的距离L(n)。对于第n个计算节点,一种常用的构建损失函数的特征是该计算节点最后的输出,假设和分别是压缩前后模型的第n个计算节点的输出,那么第n个计算节点的训练目标函数可以表达为
在一种可能的实现中,第一中间输出也可以为第一子模型中各个层的输出,相应的,第二中间输出可以为第二子模型中各个层的输出。对于不改变网络层(例如transformer层)数的压缩方法(例如模型量化,宽度方向上的剪枝),一种常用的构建损失函数的特征是每个计算节点中每个网络层(例如transformer层)的输出。假设fl和分别是压缩前后第l个transformer层的输出,那么第n个计算节点的目标函数可以表示成:
本申请实施例中,在得到第一中间输出以及第二中间输出后,可以基于第一中间输出和第二中间输出构建损失,并基于损失确定第一梯度,第一梯度可用于更新第一子模型。
应理解,在一种可能的实现中,所述第一子模型不包括所述学生模型的输出层,相应的,第二子模型不包括老师模型的输出层。在第一子模型包括学生模型的输出层、第二子模型包括老师模型的输出层的情况下,第一计算节点本身就无需等待下一级计算节点的梯度回传(自身就是最后一级计算节点)。
1804、根据所述第一梯度,对所述第一子模型进行蒸馏,以得到更新后的所述第一子模型。
在现有的知识蒸馏的梯度回传过程,是从输出层开始逐步向输入层更新,前一级网络层的更新依赖于后一级网络层的更新的完成,因此,当后一级或多级计算节点的网络层还未完成更新时,较多的计算节点都处于资源空闲状态,例如,计算节点1负责网络层1的蒸馏,计算节点2负责网络层2的蒸馏,网络层2连接在网络层1之后,在前馈过程中,网络层1的输出作为网络层2的输入,在梯度回传时,网络层2完成更新后,才进行网络层1的更新,也就是在计算节点2还没完成网络层2的更新时,计算节点1就无法对网络层1进行更新。本申请实施例中,各个计算节点的梯度回传过程在内部进行,不依赖于后一级(或后N级,N大于1)计算节点完成所负责的网络层的蒸馏,且各个计算节点计算得到的梯度也不会回传至前一级计算节点(针对于第一计算节点得到的第一梯度来说,所述第一梯度仅用于更新所述第一子模型,可以不被回传至第二计算节点,即不会被第二计算节点蒸馏负责的网络层时所使用),以此实现更大的计算资源利用率,进而实现蒸馏过程的加速。
应理解,上述描述的异步并行训练过程中,学生模型产生的误差会逐层传播(前馈的时候传播)。并行训练时,当前面的分段没有训练完成,后面的分段会受到前面的影响。另一方面,虽然通过队列可以不需要让计算节点之间互相等待,非顺序计算也给模型带来了相比于普通流水并行训练更大的误差。因此,在一种实现中,可以采用了老师模型减缓因为学生模型带来的误差累积。具体的,在蒸馏训练开始的时候,计算节点获取的输入数据可以为上一级连接的计算节点的老师模型的输出(在蒸馏开始时,学生模型的误差极大,老师模型的输入更准确,由于本申请实施例中误差会逐层传播,使得学生模型的收敛速度很慢,在开始时采用老师模型的输出作为输入可以降低前馈时候的误差传播,提高学生模型的收敛速度)。随着训练的进行,再逐渐变化成使用学生模型的输出队列的样本作为输入,以保持和推理阶段(只用学生模型)一致。
有很多衰减函数都可以达到让λ在训练过程中从1变化到0。假设训练的总的迭代次数是T0,一种常用的线性衰减可以表示成:
λt=max(1-t/T0,0);
本申请实施例中提供了一种模型蒸馏方法,所述方法应用于第一计算节点,所述第一计算节点部署有第一子模型和第二子模型,其中,所述第一子模型为学生模型的部分模型,所述第二子模型为老师模型的部分模型,所述老师模型还包括与所述第二子模型连接的第三子模型,所述第一计算节点与第二计算节点通信连接,所述第二计算节点部署有所述第三子模型,所述方法包括:获取来自所述第二计算节点的第一输入数据,所述第一输入数据为所述第三子模型的输出数据;通过所述第一子模型,处理所述第一输入数据,以得到第一中间输出;通过所述第二子模型,处理所述第一输入数据,以得到第二中间输出,所述第一中间输出和所述第二中间输出用于确定第一梯度;根据所述第一梯度,对所述第一子模型进行蒸馏,以得到更新后的所述第一子模型。在蒸馏训练开始的时候,计算节点获取的输入数据可以为上一级连接的计算节点的老师模型的输出(在蒸馏开始时,学生模型的误差极大,老师模型的输入更准确,由于本申请实施例中误差会逐层传播,使得学生模型的收敛速度很慢,在开始时采用老师模型的输出作为输入可以降低前馈时候的误差传播,提高学生模型的收敛速度)。
参照图19,图19为本申请实施例提供的一种模型蒸馏方法的实施例示意图,如图19中示出的那样,本申请实施例提供的模型蒸馏方法包括:
1901、接收终端设备发送的性能要求信息。
本申请实施例中,终端设备可以向云侧设备发送性能要求信息,其中,性能要求信息可以至少包括如下的一种:精度要求、时延要求或模型压缩比要求。
在一些场景中,当终端设备需要从云侧设备获取用于推理的模型时,可以向云侧设备发送模型获取请求,其中,模型获取请求可以包括性能要求信息,相应的,云侧设备可以接收到终端设备发送的性能要求信息,并根据性能要求信息确定一个适合终端设备的学生模型,其中,当精度要求较高时,学生模型的尺寸大小可以较大(例如参数量较大或者所需存储空间较大),以此提供一个具有很高性能的模型,当时延要求较高时,学生模型的尺寸大小可以较小,以此提供一个可以快速推导的模型,当模型压缩比(伸缩前的模型与伸缩后的模型的大小比值)要求较高时,学生模型的尺寸大小可以较大,以此提供一个模型压缩比较高的模型。
1902、获取老师模型,并基于所述性能要求信息,确定学生模型,所述学生模型为对所述老师模型进行压缩得到的;
1903、基于多个计算节点执行针对于学生网络的知识蒸馏,以得到知识蒸馏后的学生网络,其中每个计算节点用于负责所述学生网络中部分网络的知识蒸馏;每个所述计算节点用于基于自身负责的部分网络进行前馈,得到输出数据;每个所述计算节点还用于基于自身负责的部分网络进行前馈得到的数据数据,确定梯度,并在每个所述计算节点内部进行梯度回传,以蒸馏所述自身负责的部分网络,且各个所述计算节点确定的梯度不被传递至连接的计算节点上。
在一种可能的实现中,所述学生模型为transformer模型,所述部分模型包括一个或多个transformer层。
在一种可能的实现中,所述串联连接的多个计算节点之间还部署有先入先出队列,将所述输出数据传递至连接的计算节点之间的先入先出队列,以便所述连接的计算节点从所述先入先出队列中获取所述输出数据。
步骤1303的描述可以参照上述图11及图18对应的实施例中提供的模型蒸馏方法,这里不再赘述。
1904、向所述终端设备发送所述知识蒸馏后的学生网络。
本申请实施例中,当云侧设备确定了知识蒸馏后的学生网络后,可以将确定的知识蒸馏后的学生网络发送至终端设备,终端设备可以根据接收到的学生模型进行推理。需要说明的是,终端设备还可以对接收到的知识蒸馏后的学生网络进行进一步的模型压缩处理,例如可以进行上述图11及图18对应的实施例中提供的模型蒸馏方法,这里并不限定。
通过上述方式,使得云侧设备可以基于终端设备的性能要求信息确定一个适合终端设备需求的学生模型。
在图1至图19所对应的实施例的基础上,为了更好的实施本申请实施例的上述方案,下面还提供用于实施上述方案的相关设备。具体参阅图20,图20为本申请实施例提供的模型蒸馏装置2000的一种结构示意图,模型蒸馏装置2000可以是终端设备或服务器,所述装置可以应用于第一计算节点,所述第一计算节点部署有第一子模型和第二子模型,其中,所述第一子模型为学生模型的部分模型,所述学生模型还包括与所述第一子模型连接的第三子模型,所述第二子模型为老师模型的部分模型,所述老师模型还包括与所述第二子模型连接的第四子模型,所述第一计算节点与第二计算节点通信连接,所述第二计算节点部署有所述第三子模型和所述第四子模型,所述装置包括:
获取模块2001,用于获取来自所述第二计算节点的第一输入数据和第二输入数据,所述第一输入数据为所述第三子模型的输出数据,所述第二输入数据为所述第四子模型处理的输出数据;
其中,关于获取模块2001的具体描述可以参照上述实施例中步骤1101的描述,这里不再赘述。
前馈模块2002,用于通过所述第一子模型,处理所述第一输入数据,以得到第一中间输出;
通过所述第二子模型,处理所述第二输入数据,以得到第二中间输出,所述第一中间输出和所述第二中间输出用于确定第一梯度;
其中,关于前馈模块2002的具体描述可以参照上述实施例中步骤1102以及1103的描述,这里不再赘述。
蒸馏模块2003,用于根据所述第一梯度,对所述第一子模型进行蒸馏,以得到更新后的所述第一子模型。
其中,关于蒸馏模块2003的具体描述可以参照上述实施例中步骤1104的描述,这里不再赘述。
在一种可能的实现中,所述学生模型和所述老师模型为transformer模型,所述第一子模型和所述第二子模型包括一个或多个transformer层。
在一种可能的实现中,所述第一子模型不包括所述学生模型的输出层。
在一种可能的实现中,存储所述第一子模型所需的存储资源小于存储所述第二子模型所需的存储资源。
在一种可能的实现中,所述第一梯度仅用于更新所述第一子模型。
在一种可能的实现中,所述获取模块2001,具体用于:
从第一队列中获取所述第一输入数据,其中,所述第一队列用于存储来自所述第二计算节点的至少一个第一数据,每个所述第一数据为所述第二计算节点通过所述第三子模型处理输入数据得到的输出,所述至少一个第一数据包括所述第一输入数据。
在一种可能的实现中,所述第一队列为先进先出队列。
在一种可能的实现中,在所述根据所述第一梯度,对所述第一子模型进行蒸馏之前,所述至少一个第一数据包括第三输入数据,所述第三输入数据为所述第三子模型的输出数据;所述获取模块2001,还用于:
响应于得到所述更新后的所述第一子模型,从所述第一队列中获取所述第三输入数据,所述第三输入数据用于作为对所述更新后的所述第一子模型进行模型蒸馏时前馈过程的输入数据。
在一种可能的实现中,所述获取模块2001,具体用于:
从第二队列中获取所述第二输入数据,其中,所述第二队列用于存储来自所述第二计算节点的至少一个第二数据,每个所述第二数据为所述第二计算节点通过所述第四子模型处理输入数据得到的输出,所述至少一个第二数据包括所述第二输入数据。
在一种可能的实现中,所述第一计算节点还与第三计算节点通信连接,所述学生模型还包括连接在所述第一子模型之后的第五子模型,所述第一中间输出用于被传递至第三队列,所述第三队列用于存储所述第一中间输出,以便所述第三计算节点从所述第三队列中获取所述第一中间输出,所述第一中间输出用于作为对所述第三子模型进行模型蒸馏时前馈过程的输入数据。
本申请提供了一种模型蒸馏装置,所述装置应用于第一计算节点,所述第一计算节点部署有第一子模型和第二子模型,其中,所述第一子模型为学生模型的部分模型,所述学生模型还包括与所述第一子模型连接的第三子模型,所述第二子模型为老师模型的部分模型,所述老师模型还包括与所述第二子模型连接的第四子模型,所述第一计算节点与第二计算节点通信连接,所述第二计算节点部署有所述第三子模型和所述第四子模型,所述装置包括:获取模块,用于获取来自所述第二计算节点的第一输入数据和第二输入数据,所述第一输入数据为所述第三子模型的输出数据,所述第二输入数据为所述第四子模型处理的输出数据;前馈模块,用于通过所述第一子模型,处理所述第一输入数据,以得到第一中间输出;通过所述第二子模型,处理所述第二输入数据,以得到第二中间输出,所述第一中间输出和所述第二中间输出用于确定第一梯度;蒸馏模块,用于根据所述第一梯度,对所述第一子模型进行蒸馏,以得到更新后的所述第一子模型。本申请实施例中,各个计算节点的梯度回传过程在内部进行,不依赖于后一级(或后N级,N大于1)计算节点完成所负责的网络层的蒸馏,且各个计算节点计算得到的梯度也不会回传至前一级计算节点(针对于第一计算节点得到的第一梯度来说,所述第一梯度仅用于更新所述第一子模型,可以不被回传至第二计算节点,即不会被第二计算节点蒸馏负责的网络层时所使用),以此实现更大的计算资源利用率,进而实现蒸馏过程的加速。
参阅图21,图21为本申请实施例提供的模型蒸馏装置2100的一种结构示意图,模型蒸馏装置2100可以是终端设备或服务器,所述装置可以应用于第一计算节点,所述第一计算节点部署有第一子模型和第二子模型,其中,所述第一子模型为学生模型的部分模型,所述第二子模型为老师模型的部分模型,所述老师模型还包括与所述第二子模型连接的第三子模型,所述第一计算节点与第二计算节点通信连接,所述第二计算节点部署有所述第三子模型,模型蒸馏装置2100包括:
获取模块2101,用于获取来自所述第二计算节点的第一输入数据,所述第一输入数据为所述第三子模型的输出数据;
其中,关于获取模块2101的具体描述可以参照上述实施例中步骤1804的描述,这里不再赘述。
前馈模块2102,用于通过所述第一子模型,处理所述第一输入数据,以得到第一中间输出;
通过所述第二子模型,处理所述第一输入数据,以得到第二中间输出,所述第一中间输出和所述第二中间输出用于确定第一梯度;
其中,关于前馈模块2102的具体描述可以参照上述实施例中步骤1802以及1803的描述,这里不再赘述。
蒸馏模块2103,用于根据所述第一梯度,对所述第一子模型进行蒸馏,以得到更新后的所述第一子模型。
其中,关于蒸馏模块2103的具体描述可以参照上述实施例中步骤1804的描述,这里不再赘述。
在一种可能的实现中,所述学生模型和所述老师模型为transformer模型,所述第一子模型和所述第二子模型包括一个或多个transformer层。
在一种可能的实现中,所述第一损失仅用于更新所述第一子模型。
在一种可能的实现中,所述获取模块2101,具体用于:
从第一队列中获取所述第一输入数据,其中,所述第一队列用于存储来自所述第二计算节点的至少一个第一数据,每个所述第一数据为所述第二计算节点通过所述第三子模型处理数据得到的输出,所述至少一个第一数据包括所述第一输入数据。
在一种可能的实现中,所述第一队列为先进先出队列。
在一种可能的实现中,在所述根据所述第一梯度,对所述第一子模型进行蒸馏之前,所述至少一个第一数据包括第二输入数据,所述第二输入数据为所述第三子模型的输出数据;所述获取模块2101,还用于:
响应于得到所述更新后的所述第一子模型,从所述第一队列中获取所述第二输入数据,所述第二输入数据用于作为对所述更新后的所述第一子模型进行模型蒸馏时前馈过程的输入数据。
在一种可能的实现中,存储所述第一子模型所需的存储资源小于存储所述第二子模型所需的存储资源。
本申请实施例提供了一种模型蒸馏装置,应用于第一计算节点,所述第一计算节点部署有第一子模型和第二子模型,其中,所述第一子模型为学生模型的部分模型,所述第二子模型为老师模型的部分模型,所述老师模型还包括与所述第二子模型连接的第三子模型,所述第一计算节点与第二计算节点通信连接,所述第二计算节点部署有所述第三子模型,所述装置包括:获取模块,用于获取来自所述第二计算节点的第一输入数据,所述第一输入数据为所述第三子模型的输出数据;前馈模块,用于通过所述第一子模型,处理所述第一输入数据,以得到第一中间输出;通过所述第二子模型,处理所述第一输入数据,以得到第二中间输出,所述第一中间输出和所述第二中间输出用于确定第一梯度;蒸馏模块,用于根据所述第一梯度,对所述第一子模型进行蒸馏,以得到更新后的所述第一子模型。在蒸馏训练开始的时候,计算节点获取的输入数据可以为上一级连接的计算节点的老师模型的输出(在蒸馏开始时,学生模型的误差极大,老师模型的输入更准确,由于本申请实施例中误差会逐层传播,使得学生模型的收敛速度很慢,在开始时采用老师模型的输出作为输入可以降低前馈时候的误差传播,提高学生模型的收敛速度)。
参照图22,图22为本申请实施例提供的一种模型蒸馏装置的实施例示意图,如图22中示出的那样,本申请实施例提供的模型蒸馏装置2200包括:
接收模块2201,用于接收终端设备发送的性能要求信息。
其中,关于接收模块2201的具体描述可以参照上述实施例中步骤1901的描述,这里不再赘述。
获取模块2202,用于获取老师模型,并基于所述性能要求信息,确定学生模型,所述学生模型为对所述老师模型进行压缩得到的;
其中,关于获取模块2202的具体描述可以参照上述实施例中步骤1902的描述,这里不再赘述。
知识蒸馏模块2203,用于基于多个计算节点执行针对于学生网络的知识蒸馏,以得到知识蒸馏后的学生网络,其中每个计算节点用于负责所述学生网络中部分网络的知识蒸馏;每个所述计算节点用于基于自身负责的部分网络进行前馈,得到输出数据;每个所述计算节点还用于基于自身负责的部分网络进行前馈得到的数据数据,确定梯度,并在每个所述计算节点内部进行梯度回传,以蒸馏所述自身负责的部分网络,且各个所述计算节点确定的梯度不被传递至连接的计算节点上。
其中,关于知识蒸馏模块2203的具体描述可以参照上述实施例中步骤1903的描述,这里不再赘述。
在一种可能的实现中,所述学生模型为transformer模型,所述部分模型包括一个或多个transformer层。
在一种可能的实现中,所述串联连接的多个计算节点之间还部署有先入先出队列,将所述输出数据传递至连接的计算节点之间的先入先出队列,以便所述连接的计算节点从所述先入先出队列中获取所述输出数据。
发送模块2204,用于向所述终端设备发送所述知识蒸馏后的学生网络。
其中,关于发送模块2204的具体描述可以参照上述实施例中步骤1904的描述,这里不再赘述。
通过上述方式,使得云侧设备可以基于终端设备的性能要求信息确定一个适合终端设备需求的学生模型。
接下来介绍本申请实施例提供的一种执行设备,请参阅图23,图23为本申请实施例提供的执行设备的一种结构示意图,执行设备2300具体可以表现为虚拟现实VR设备、手机、平板、笔记本电脑、智能穿戴设备、监控数据处理设备或服务器等,此处不做限定。具体的,执行设备2300包括:接收器2301、发射器2302、处理器2303和存储器2304(其中执行设备2300中的处理器2303的数量可以一个或多个,图23中以一个处理器为例),其中,处理器2303可以包括应用处理器23031和通信处理器23032。在本申请的一些实施例中,接收器2301、发射器2302、处理器2303和存储器2304可通过总线或其它方式连接。
存储器2304可以包括只读存储器和随机存取存储器,并向处理器2303提供指令和数据。存储器2304的一部分还可以包括非易失性随机存取存储器(non-volatile randomaccess memory,NVRAM)。存储器2304存储有处理器和操作指令、可执行模块或者数据结构,或者它们的子集,或者它们的扩展集,其中,操作指令可包括各种操作指令,用于实现各种操作。
处理器2303控制执行设备的操作。具体的应用中,执行设备的各个组件通过总线系统耦合在一起,其中总线系统除包括数据总线之外,还可以包括电源总线、控制总线和状态信号总线等。但是为了清楚说明起见,在图中将各种总线都称为总线系统。
上述本申请实施例揭示的方法可以应用于处理器2303中,或者由处理器2303实现。处理器2303可以是一种集成电路芯片,具有信号的处理能力。在实现过程中,上述方法的各步骤可以通过处理器2303中的硬件的集成逻辑电路或者软件形式的指令完成。上述的处理器2303可以是通用处理器、数字信号处理器(digital signal processing,DSP)、微处理器或微控制器,还可进一步包括专用集成电路(application specific integratedcircuit,ASIC)、现场可编程门阵列(field-programmable gate array,FPGA)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件。该处理器2303可以实现或者执行本申请实施例中的公开的各方法、步骤及逻辑框图。通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等。结合本申请实施例所公开的方法的步骤可以直接体现为硬件译码处理器执行完成,或者用译码处理器中的硬件及软件模块组合执行完成。软件模块可以位于随机存储器,闪存、只读存储器,可编程只读存储器或者电可擦写可编程存储器、寄存器等本领域成熟的存储介质中。该存储介质位于存储器2304,处理器2303读取存储器2304中的信息,结合其硬件完成上述方法的步骤。
接收器2301可用于接收输入的数字或字符信息,以及产生与执行设备的相关设置以及功能控制有关的信号输入。发射器2302可用于通过第一接口输出数字或字符信息;发射器2302还可用于通过第一接口向磁盘组发送指令,以修改磁盘组中的数据;发射器2302还可以包括显示屏等显示设备。
本申请实施例中,在一种情况下,处理器2303,用于执行通过上述图11至图19的模型蒸馏方法得到的知识蒸馏后的学生模型。
本申请实施例还提供了一种训练设备,请参阅图24,图24是本申请实施例提供的训练设备一种结构示意图,具体的,训练设备2400由一个或多个服务器实现,训练设备2400可因配置或性能不同而产生比较大的差异,可以包括一个或一个以上中央处理器(centralprocessing units,CPU)2424(例如,一个或一个以上处理器)和存储器2432,一个或一个以上存储应用程序2442或数据2444的存储介质2430(例如一个或一个以上海量存储设备)。其中,存储器2432和存储介质2430可以是短暂存储或持久存储。存储在存储介质2430的程序可以包括一个或一个以上模块(图示没标出),每个模块可以包括对训练设备中的一系列指令操作。更进一步地,中央处理器2424可以设置为与存储介质2430通信,在训练设备2400上执行存储介质2430中的一系列指令操作。
训练设备2400还可以包括一个或一个以上电源2426,一个或一个以上有线或无线网络接口2450,一个或一个以上输入输出接口2458;或,一个或一个以上操作系统2441,例如Windows ServerTM,Mac OS XTM,UnixTM,LinuxTM,FreeBSDTM等等。
本申请实施例中,中央处理器2424,用于执行通过上述图11至图19的模型蒸馏方法。
本申请实施例中还提供一种包括计算机程序产品,当其在计算机上运行时,使得计算机执行如前述执行设备所执行的步骤,或者,使得计算机执行如前述训练设备所执行的步骤。
本申请实施例中还提供一种计算机可读存储介质,该计算机可读存储介质中存储有用于进行信号处理的程序,当其在计算机上运行时,使得计算机执行如前述执行设备所执行的步骤,或者,使得计算机执行如前述训练设备所执行的步骤。
本申请实施例提供的执行设备、训练设备或终端设备具体可以为芯片,芯片包括:处理单元和通信单元,所述处理单元例如可以是处理器,所述通信单元例如可以是输入/输出接口、管脚或电路等。该处理单元可执行存储单元存储的计算机执行指令,以使执行设备内的芯片执行上述实施例描述的数据处理方法,或者,以使训练设备内的芯片执行上述实施例描述的数据处理方法。可选地,所述存储单元为所述芯片内的存储单元,如寄存器、缓存等,所述存储单元还可以是所述无线接入设备端内的位于所述芯片外部的存储单元,如只读存储器(read-only memory,ROM)或可存储静态信息和指令的其他类型的静态存储设备,随机存取存储器(random access memory,RAM)等。
具体的,请参阅图25,图25为本申请实施例提供的芯片的一种结构示意图,所述芯片可以表现为神经网络处理器NPU 2500,NPU 2500作为协处理器挂载到主CPU(Host CPU)上,由Host CPU分配任务。NPU的核心部分为运算电路2503,通过控制器2504控制运算电路2503提取存储器中的矩阵数据并进行乘法运算。
在一些实现中,运算电路2503内部包括多个处理单元(Process Engine,PE)。在一些实现中,运算电路2503是二维脉动阵列。运算电路2503还可以是一维脉动阵列或者能够执行例如乘法和加法这样的数学运算的其它电子线路。在一些实现中,运算电路2503是通用的矩阵处理器。
举例来说,假设有输入矩阵A,权重矩阵B,输出矩阵C。运算电路从权重存储器2502中取矩阵B相应的数据,并缓存在运算电路中每一个PE上。运算电路从输入存储器2501中取矩阵A数据与矩阵B进行矩阵运算,得到的矩阵的部分结果或最终结果,保存在累加器(accumulator)2508中。
统一存储器2506用于存放输入数据以及输出数据。权重数据直接通过存储单元访问控制器(Direct Memory Access Controller,DMAC)2505,DMAC被搬运到权重存储器2502中。输入数据也通过DMAC被搬运到统一存储器2506中。
BIU为Bus Interface Unit即,总线接口单元2510,用于AXI总线与DMAC和取指存储器(Instruction Fetch Buffer,IFB)2509的交互。
总线接口单元2510(Bus Interface Unit,简称BIU),用于取指存储器2509从外部存储器获取指令,还用于存储单元访问控制器2505从外部存储器获取输入矩阵A或者权重矩阵B的原数据。
DMAC主要用于将外部存储器DDR中的输入数据搬运到统一存储器2506或将权重数据搬运到权重存储器2502中或将输入数据数据搬运到输入存储器2501中。
向量计算单元2507包括多个运算处理单元,在需要的情况下,对运算电路的输出做进一步处理,如向量乘,向量加,指数运算,对数运算,大小比较等等。主要用于神经网络中非卷积/全连接层网络计算,如Batch Normalization(批归一化),像素级求和,对特征平面进行上采样等。
在一些实现中,向量计算单元2507能将经处理的输出的向量存储到统一存储器2506。例如,向量计算单元2507可以将线性函数;或,非线性函数应用到运算电路2503的输出,例如对卷积层提取的特征平面进行线性插值,再例如累加值的向量,用以生成激活值。在一些实现中,向量计算单元2507生成归一化的值、像素级求和的值,或二者均有。在一些实现中,处理过的输出的向量能够用作到运算电路2503的激活输入,例如用于在神经网络中的后续层中的使用。
控制器2504连接的取指存储器(instruction fetch buffer)2509,用于存储控制器2504使用的指令;
统一存储器2506,输入存储器2501,权重存储器2502以及取指存储器2509均为On-Chip存储器。外部存储器私有于该NPU硬件架构。
其中,上述任一处提到的处理器,可以是一个通用中央处理器,微处理器,ASIC,或一个或多个用于控制上述程序执行的集成电路。
另外需说明的是,以上所描述的装置实施例仅仅是示意性的,其中所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。另外,本申请提供的装置实施例附图中,模块之间的连接关系表示它们之间具有通信连接,具体可以实现为一条或多条通信总线或信号线。
通过以上的实施方式的描述,所属领域的技术人员可以清楚地了解到本申请可借助软件加必需的通用硬件的方式来实现,当然也可以通过专用硬件包括专用集成电路、专用CPU、专用存储器、专用元器件等来实现。一般情况下,凡由计算机程序完成的功能都可以很容易地用相应的硬件来实现,而且,用来实现同一功能的具体硬件结构也可以是多种多样的,例如模拟电路、数字电路或专用电路等。但是,对本申请而言更多情况下软件程序实现是更佳的实施方式。基于这样的理解,本申请的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品存储在可读取的存储介质中,如计算机的软盘、U盘、移动硬盘、ROM、RAM、磁碟或者光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,训练设备,或者网络设备等)执行本申请各个实施例所述的方法。
在上述实施例中,可以全部或部分地通过软件、硬件、固件或者其任意组合来实现。当使用软件实现时,可以全部或部分地以计算机程序产品的形式实现。
所述计算机程序产品包括一个或多个计算机指令。在计算机上加载和执行所述计算机程序指令时,全部或部分地产生按照本申请实施例所述的流程或功能。所述计算机可以是通用计算机、专用计算机、计算机网络、或者其他可编程装置。所述计算机指令可以存储在计算机可读存储介质中,或者从一个计算机可读存储介质向另一计算机可读存储介质传输,例如,所述计算机指令可以从一个网站站点、计算机、训练设备或数据中心通过有线(例如同轴电缆、光纤、数字用户线(DSL))或无线(例如红外、无线、微波等)方式向另一个网站站点、计算机、训练设备或数据中心进行传输。所述计算机可读存储介质可以是计算机能够存储的任何可用介质或者是包含一个或多个可用介质集成的训练设备、数据中心等数据存储设备。所述可用介质可以是磁性介质,(例如,软盘、硬盘、磁带)、光介质(例如,DVD)、或者半导体介质(例如固态硬盘(Solid State Disk,SSD))等。
Claims (26)
1.一种模型蒸馏方法,其特征在于,所述方法应用于第一计算节点,所述第一计算节点部署有第一子模型和第二子模型,其中,所述第一子模型为学生模型的部分模型,所述学生模型还包括与所述第一子模型连接的第三子模型,所述第二子模型为老师模型的部分模型,所述老师模型还包括与所述第二子模型连接的第四子模型,所述第一计算节点与第二计算节点通信连接,所述第二计算节点部署有所述第三子模型和所述第四子模型,所述方法包括:
获取来自所述第二计算节点的第一输入数据和第二输入数据,所述第一输入数据为所述第三子模型的输出数据,所述第二输入数据为所述第四子模型处理的输出数据;
通过所述第一子模型,处理所述第一输入数据,以得到第一中间输出;
通过所述第二子模型,处理所述第二输入数据,以得到第二中间输出,所述第一中间输出和所述第二中间输出用于确定第一梯度;
根据所述第一梯度,对所述第一子模型进行蒸馏,以得到更新后的所述第一子模型。
2.根据权利要求1所述的方法,其特征在于,所述学生模型和所述老师模型为transformer模型,所述第一子模型和所述第二子模型包括一个或多个transformer层。
3.根据权利要求1或2所述的方法,其特征在于,所述第一子模型不包括所述学生模型的输出层。
4.根据权利要求1至3任一所述的方法,其特征在于,所述获取来自所述第二计算节点的第一输入数据,包括:
从第一队列中获取所述第一输入数据,其中,所述第一队列用于存储来自所述第二计算节点的至少一个第一数据,每个所述第一数据为所述第二计算节点通过所述第三子模型处理输入数据得到的输出数据,所述至少一个第一数据包括所述第一输入数据。
5.根据权利要求4所述的方法,其特征在于,所述第一队列为先进先出队列。
6.根据权利要求4或5所述的方法,其特征在于,在所述根据所述第一梯度,对所述第一子模型进行蒸馏之前,所述至少一个第一数据包括第三输入数据,所述第三输入数据为所述第三子模型的输出数据;所述根据所述第一梯度,对所述第一子模型进行蒸馏之后,所述方法还包括:
响应于得到所述更新后的所述第一子模型,从所述第一队列中获取所述第三输入数据,所述第三输入数据用于作为对所述更新后的所述第一子模型进行模型蒸馏时前馈过程的输入数据。
7.根据权利要求1至6任一所述的方法,其特征在于,所述获取来自所述第二计算节点的第二输入数据,包括:
从第二队列中获取所述第二输入数据,其中,所述第二队列用于存储来自所述第二计算节点的至少一个第二数据,每个所述第二数据为所述第二计算节点通过所述第四子模型处理输入数据得到的输出,所述至少一个第二数据包括所述第二输入数据。
8.根据权利要求1至7任一所述的方法,其特征在于,所述第一计算节点还与第三计算节点通信连接,所述学生模型还包括连接在所述第一子模型之后的第五子模型,所述第一中间输出用于被传递至第三队列,所述第三队列用于存储所述第一中间输出,以便所述第三计算节点从所述第三队列中获取所述第一中间输出,所述第一中间输出用于作为对所述第三子模型进行模型蒸馏时前馈过程的输入数据。
9.一种模型蒸馏方法,其特征在于,所述方法应用于第一计算节点,所述第一计算节点部署有第一子模型和第二子模型,其中,所述第一子模型为学生模型的部分模型,所述第二子模型为老师模型的部分模型,所述老师模型还包括与所述第二子模型连接的第三子模型,所述第一计算节点与第二计算节点通信连接,所述第二计算节点部署有所述第三子模型,所述方法包括:
获取来自所述第二计算节点的第一输入数据,所述第一输入数据为所述第三子模型的输出数据;
通过所述第一子模型,处理所述第一输入数据,以得到第一中间输出;
通过所述第二子模型,处理所述第一输入数据,以得到第二中间输出,所述第一中间输出和所述第二中间输出用于确定第一梯度;
根据所述第一梯度,对所述第一子模型进行蒸馏,以得到更新后的所述第一子模型。
10.根据权利要求9所述的方法,其特征在于,所述学生模型和所述老师模型为transformer模型,所述第一子模型和所述第二子模型包括一个或多个transformer层。
11.根据权利要求9或10所述的方法,其特征在于,所述获取来自所述第二计算节点的第一输入数据,包括:
从第一队列中获取所述第一输入数据,其中,所述第一队列用于存储来自所述第二计算节点的至少一个第一数据,每个所述第一数据为所述第二计算节点通过所述第三子模型处理数据得到的输出,所述至少一个第一数据包括所述第一输入数据。
12.根据权利要求11所述的方法,其特征在于,在所述根据所述第一梯度,对所述第一子模型进行蒸馏之前,所述至少一个第一数据包括第二输入数据,所述第二输入数据为所述第三子模型的输出数据;所述根据所述第一梯度,对所述第一子模型进行蒸馏之后,所述方法还包括:
响应于得到所述更新后的所述第一子模型,从所述第一队列中获取所述第二输入数据,所述第二输入数据用于作为对所述更新后的所述第一子模型进行模型蒸馏时前馈过程的输入数据。
13.一种模型蒸馏装置,其特征在于,所述装置应用于第一计算节点,所述第一计算节点部署有第一子模型和第二子模型,其中,所述第一子模型为学生模型的部分模型,所述学生模型还包括与所述第一子模型连接的第三子模型,所述第二子模型为老师模型的部分模型,所述老师模型还包括与所述第二子模型连接的第四子模型,所述第一计算节点与第二计算节点通信连接,所述第二计算节点部署有所述第三子模型和所述第四子模型,所述装置包括:
获取模块,用于获取来自所述第二计算节点的第一输入数据和第二输入数据,所述第一输入数据为所述第三子模型的输出数据,所述第二输入数据为所述第四子模型处理的输出数据;
前馈模块,用于通过所述第一子模型,处理所述第一输入数据,以得到第一中间输出;
通过所述第二子模型,处理所述第二输入数据,以得到第二中间输出,所述第一中间输出和所述第二中间输出用于确定第一梯度;
蒸馏模块,用于根据所述第一梯度,对所述第一子模型进行蒸馏,以得到更新后的所述第一子模型。
14.根据权利要求13所述的装置,其特征在于,所述学生模型和所述老师模型为transformer模型,所述第一子模型和所述第二子模型包括一个或多个transformer层。
15.根据权利要求13或14所述的装置,其特征在于,所述第一子模型不包括所述学生模型的输出层。
16.根据权利要求13至15任一所述的装置,其特征在于,所述获取模块,具体用于:
从第一队列中获取所述第一输入数据,其中,所述第一队列用于存储来自所述第二计算节点的至少一个第一数据,每个所述第一数据为所述第二计算节点通过所述第三子模型处理输入数据得到的输出数据,所述至少一个第一数据包括所述第一输入数据。
17.根据权利要求16所述的装置,其特征在于,所述第一队列为先进先出队列。
18.根据权利要求16或17所述的装置,其特征在于,在所述根据所述第一梯度,对所述第一子模型进行蒸馏之前,所述至少一个第一数据包括第三输入数据,所述第三输入数据为所述第三子模型的输出数据;所述获取模块,还用于:
响应于得到所述更新后的所述第一子模型,从所述第一队列中获取所述第三输入数据,所述第三输入数据用于作为对所述更新后的所述第一子模型进行模型蒸馏时前馈过程的输入数据。
19.根据权利要求13至18任一所述的装置,其特征在于,所述获取模块,具体用于:
从第二队列中获取所述第二输入数据,其中,所述第二队列用于存储来自所述第二计算节点的至少一个第二数据,每个所述第二数据为所述第二计算节点通过所述第四子模型处理输入数据得到的输出,所述至少一个第二数据包括所述第二输入数据。
20.一种模型蒸馏装置,其特征在于,应用于第一计算节点,所述第一计算节点部署有第一子模型和第二子模型,其中,所述第一子模型为学生模型的部分模型,所述第二子模型为老师模型的部分模型,所述老师模型还包括与所述第二子模型连接的第三子模型,所述第一计算节点与第二计算节点通信连接,所述第二计算节点部署有所述第三子模型,所述装置包括:
获取模块,用于获取来自所述第二计算节点的第一输入数据,所述第一输入数据为所述第三子模型的输出数据;
前馈模块,用于通过所述第一子模型,处理所述第一输入数据,以得到第一中间输出;
通过所述第二子模型,处理所述第一输入数据,以得到第二中间输出,所述第一中间输出和所述第二中间输出用于确定第一梯度;
蒸馏模块,用于根据所述第一梯度,对所述第一子模型进行蒸馏,以得到更新后的所述第一子模型。
21.根据权利要求20所述的装置,其特征在于,所述学生模型和所述老师模型为transformer模型,所述第一子模型和所述第二子模型包括一个或多个transformer层。
22.根据权利要求20或21所述的装置,其特征在于,所述获取模块,具体用于:
从第一队列中获取所述第一输入数据,其中,所述第一队列用于存储来自所述第二计算节点的至少一个第一数据,每个所述第一数据为所述第二计算节点通过所述第三子模型处理数据得到的输出,所述至少一个第一数据包括所述第一输入数据。
23.根据权利要求22所述的装置,其特征在于,在所述根据所述第一梯度,对所述第一子模型进行蒸馏之前,所述至少一个第一数据包括第二输入数据,所述第二输入数据为所述第三子模型的输出数据;所述获取模块,还用于:
在所述根据所述第一梯度,对所述第一子模型进行蒸馏之后,响应于得到所述更新后的所述第一子模型,从所述第一队列中获取所述第二输入数据,所述第二输入数据用于作为对所述更新后的所述第一子模型进行模型蒸馏时前馈过程的输入数据。
24.一种模型蒸馏装置,其特征在于,所述装置包括存储器和处理器;所述存储器存储有代码,所述处理器被配置为获取所述代码,并执行如权利要求1至12任一所述的方法。
25.一种计算机存储介质,其特征在于,所述计算机存储介质存储有一个或多个指令,所述指令在由一个或多个计算机执行时使得所述一个或多个计算机实施权利要求1至12任一所述的方法。
26.一种包含指令的计算机程序产品,其特征在于,当所述计算机程序产品在计算机上运行时,使得所述计算机执行所述权利要求1至12任一所述的方法。
Priority Applications (4)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110962700.9A CN113850362A (zh) | 2021-08-20 | 2021-08-20 | 一种模型蒸馏方法及相关设备 |
PCT/CN2022/113602 WO2023020613A1 (zh) | 2021-08-20 | 2022-08-19 | 一种模型蒸馏方法及相关设备 |
EP22857922.3A EP4379603A1 (en) | 2021-08-20 | 2022-08-19 | Model distillation method and related device |
US18/443,052 US20240185086A1 (en) | 2021-08-20 | 2024-02-15 | Model distillation method and related device |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110962700.9A CN113850362A (zh) | 2021-08-20 | 2021-08-20 | 一种模型蒸馏方法及相关设备 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN113850362A true CN113850362A (zh) | 2021-12-28 |
Family
ID=78975854
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202110962700.9A Pending CN113850362A (zh) | 2021-08-20 | 2021-08-20 | 一种模型蒸馏方法及相关设备 |
Country Status (4)
Country | Link |
---|---|
US (1) | US20240185086A1 (zh) |
EP (1) | EP4379603A1 (zh) |
CN (1) | CN113850362A (zh) |
WO (1) | WO2023020613A1 (zh) |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN114610500A (zh) * | 2022-03-22 | 2022-06-10 | 重庆邮电大学 | 一种基于模型蒸馏的边缘缓存方法 |
CN115222600A (zh) * | 2022-07-29 | 2022-10-21 | 大连理工大学 | 对比学习的多光谱遥感图像超分辨重建方法 |
WO2023020613A1 (zh) * | 2021-08-20 | 2023-02-23 | 华为技术有限公司 | 一种模型蒸馏方法及相关设备 |
Family Cites Families (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN108921294A (zh) * | 2018-07-11 | 2018-11-30 | 浙江大学 | 一种用于神经网络加速的渐进式块知识蒸馏方法 |
CN111144574B (zh) * | 2018-11-06 | 2023-03-24 | 北京嘀嘀无限科技发展有限公司 | 使用指导者模型训练学习者模型的人工智能系统和方法 |
KR20200129639A (ko) * | 2019-05-09 | 2020-11-18 | 삼성전자주식회사 | 모델 학습 방법 및 장치 |
CN111553479B (zh) * | 2020-05-13 | 2023-11-03 | 鼎富智能科技有限公司 | 一种模型蒸馏方法、文本检索方法及装置 |
CN112257858B (zh) * | 2020-09-21 | 2024-06-14 | 华为技术有限公司 | 一种模型压缩方法及装置 |
CN113850362A (zh) * | 2021-08-20 | 2021-12-28 | 华为技术有限公司 | 一种模型蒸馏方法及相关设备 |
-
2021
- 2021-08-20 CN CN202110962700.9A patent/CN113850362A/zh active Pending
-
2022
- 2022-08-19 EP EP22857922.3A patent/EP4379603A1/en active Pending
- 2022-08-19 WO PCT/CN2022/113602 patent/WO2023020613A1/zh active Application Filing
-
2024
- 2024-02-15 US US18/443,052 patent/US20240185086A1/en active Pending
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2023020613A1 (zh) * | 2021-08-20 | 2023-02-23 | 华为技术有限公司 | 一种模型蒸馏方法及相关设备 |
CN114610500A (zh) * | 2022-03-22 | 2022-06-10 | 重庆邮电大学 | 一种基于模型蒸馏的边缘缓存方法 |
CN114610500B (zh) * | 2022-03-22 | 2024-04-30 | 重庆邮电大学 | 一种基于模型蒸馏的边缘缓存方法 |
CN115222600A (zh) * | 2022-07-29 | 2022-10-21 | 大连理工大学 | 对比学习的多光谱遥感图像超分辨重建方法 |
Also Published As
Publication number | Publication date |
---|---|
US20240185086A1 (en) | 2024-06-06 |
WO2023020613A1 (zh) | 2023-02-23 |
EP4379603A1 (en) | 2024-06-05 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN111368993B (zh) | 一种数据处理方法及相关设备 | |
WO2022057776A1 (zh) | 一种模型压缩方法及装置 | |
JP7440420B2 (ja) | 包括的機械学習サービスを提供するアプリケーション開発プラットフォームおよびソフトウェア開発キット | |
CN112288075B (zh) | 一种数据处理方法及相关设备 | |
US20200265301A1 (en) | Incremental training of machine learning tools | |
WO2023020613A1 (zh) | 一种模型蒸馏方法及相关设备 | |
CN111951805A (zh) | 一种文本数据处理方法及装置 | |
CN112070207A (zh) | 一种模型训练方法及装置 | |
WO2022253074A1 (zh) | 一种数据处理方法及相关设备 | |
WO2021057884A1 (zh) | 语句复述方法、训练语句复述模型的方法及其装置 | |
CN113449859A (zh) | 一种数据处理方法及其装置 | |
CN113656563B (zh) | 一种神经网络搜索方法及相关设备 | |
CN115221846A (zh) | 一种数据处理方法及相关设备 | |
CN113240079A (zh) | 一种模型训练方法及装置 | |
CN111898636A (zh) | 一种数据处理方法及装置 | |
US20240135174A1 (en) | Data processing method, and neural network model training method and apparatus | |
WO2022222854A1 (zh) | 一种数据处理方法及相关设备 | |
CN115238909A (zh) | 一种基于联邦学习的数据价值评估方法及其相关设备 | |
CN112529149A (zh) | 一种数据处理方法及相关装置 | |
CN116737895A (zh) | 一种数据处理方法及相关设备 | |
CN115795025A (zh) | 一种摘要生成方法及其相关设备 | |
CN117273074A (zh) | 一种数据处理方法及其装置 | |
CN115983362A (zh) | 一种量化方法、推荐方法以及装置 | |
CN113065638A (zh) | 一种神经网络压缩方法及其相关设备 | |
WO2023143262A1 (zh) | 一种数据处理方法及相关设备 |
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 |