直播回顾 | 模型压缩与高效神经网络

37 阅读13分钟

图片

由东北大学自然语言处理实验室主办、小牛翻译协办的小牛翻译直播间(NiuTrans Talk),于8月31日成功举办,我们荣幸地邀请到了来自东北大学自然语言处理实验室的单韦乔博士作为嘉宾,为广大关注大语言模型的朋友们带来了生成式大语言模型技术分享系列的第九期报告——《模型压缩与高效神经网络》。

图片

本次报告由单韦乔博士给大家带来了模型压缩与高效神经网络的相关分享,主要分为背景介绍、模型压缩和条件计算三个模块。首先介绍了在当前的研究背景下,模型压缩与高效的重要性。其次从剪枝、知识蒸馏、低秩分解、量化几个角度介绍了当下主流的模型压缩方法。最后介绍了条件计算——动态的高效加速方式,包含了混合专家网络和早退两种方法。

在分享结束后,单韦乔博士还与网友们就“哪些情况下适合使用硬件加速来提高模型推断的速度?”、“在模型剪枝的过程中,如何确定哪些参数或连接可以被减掉?”等问题进行了深入探讨交流,以下是本环节的问题和解答:

Q1:哪些情况下适合使用硬件加速来提高模型推断的速度?

A1:因为我本身不是做这方面的,但是我有一些自己的看法可以和大家去交流一下。因为我们现在的这种模型压缩,很多这类方法都属于算法上的压缩方法。我觉得这种方法其实也是比较好实现的,一般来说改起来是比较简单的,我们可能几行代码就可以完成了,当然它会有一些实质性的加速效果。硬件加速我觉得它是比较复杂的,因为它会和底层的很多东西相关。比如说信息的存储或者是算子上面的一些操作,比如要不要融合算子。所以我觉得这种操作,包括他代码上的工作量也是比较困难的,比较复杂的。但是它能够取得的加速效果也是比较明显的。同时对于一些特定的场景,比如从需求的角度来看。一种是如果需要一个非常便于实现的,然后对加速的效果要求也不是特别严格的场景,那用这种算法上的加速方法,我觉得是很合理的。因为它实现起来非常简单。那对于加速场景要求得非常严格的,比如一定要达到多少加速比的时候,或者是应用场景是需要长期使用的一个应用场景的话,我觉得用一些硬件加速方法是很有利的。因为即使它的投入会比较大,但是它能够产出的这个加速比例也是非常大的。这是我的一点看法。

Q2:在模型剪枝的过程中,如何确定哪些参数或连接可以被减掉?

A2:这个其实是我们之前提到过的一个方法,就是我们判断参数重要性其实是剪枝里面一个比较重要的问题。那么刚才也讲到了,其实最主要的或者是最简单的一种方式就是基于数值上的一些信息:就比如说参数的大小,或者像这个图里面所示的,经过训练之后值的改变量的大小。那么另一种比较常用的,起码从我看的这个文章里面,比较多的是用梯度或者是和梯度相关的一些信息。就比如说hessian 矩阵,或者是单纯的一阶梯度等等。我记得我以前也复现过一篇这种剪枝策略,它的那个缩写应该就是snip。snip就是说它也一次性的剪枝,它通过梯度的大小去来判断这个参数的重要性。如果它梯度是比较小的话,就认为这一部分这个参数是不重要的,如果我没记错的话,那他就会把它剪掉。那么主要的是这些。当然其实我们刚才也提到了,它还可以和其他的一些指标去做融合。那我觉得这一方面其实和条件计算现在所面临的这个方向是一样的。因为本质上样本里面是没有理想当中的模型的稀疏性,也就是说通过一个样本没法知道某个参数我应不应该保留它。那条件计算里面也是这样的,就是通过样本的信息,我没有办法知道它应该被输入到哪个expert,或者是应该从第几层退出来。所以我觉得这个问题是比较开放的,他可以去融合一些其他的其他研究方向的一些评价指标。

Q3:为什么模型压缩后进行高效微调是重要的?

A3:其实刚才也提到了,就是在传统的这种尤其是模型剪枝的这个方法里面,当然也可能包括一些量化的方法,蒸馏的方法呀,其实是依赖于训练过程的。

我认为量化后或者是剪枝之后再去做一次训练的目标是是想恢复它的一些能力。因为我们剪掉了一些参数,它肯定会对模型的输出是有影响的,肯定会干扰它的精度,让模型精度有所降低,此时再通过一个训练的过程,可以一定程度重新恢复它的能力。但是这种恢复的方法,我们认为它是建立在一个非常好的初始化的一个前提下,我再去对它做一个训练,或者对它做一个微调。那么其实我们在以前的这种迭代式的剪枝里面,他也有另外的一个观点,就是说我们在大模型里面,在一个原始的模型里面,把一部分参数剪掉了。那这部分参数减掉了之后,我们为什么还需要再去重新去训练呢?是因为在新的这个小模型里,我们剪掉参数后的这个小模型里面,可能也有一些新的参数是重要的(对大模型不重要的参数,但是对小模型重要),有一些参数重要,有一些参数不重要。那只有经过训练阶段之后,才会在数值上或者是在一些指标上有所反映。

Q4:为什么会有静态类型/动态类型的概念?

A4:这个也是我PPT里面的,当然我在其他的一些综述上也看过类似的说法,我觉得这种分类,也是比较有道理的。

静态类型我认为它指的是模型结构是不是固定的。也就是说我们模型压缩的这些方法,无论是剪枝还是蒸馏,还是低精度,我们最后得到的压缩过的模型,或者是我们在部署的时候使用的这些模型,它的结构都是固定的,也就是它是一个静态的模型。那么在用条件计算的时候,条件计算的这些模型在实际的部署的时候,或者实际地去计算的时候,实际上是动态的,也就是说每一个token激活的,或者是他所运算的这一部分的参数或者使用的这一部分参数都是不同的。

我觉得这个是静态类型和动态类型的一个区别。

Q5:神经网络模型剪枝、压缩、量化加速前景如何?

A5:我认为其实在这个现在的大模型的时代里面,我们做的这些比如说:模型压缩,或者是条件计算也是在很久以前也就有了。那么我们做的这些研究工作依然还是有意义的,尤其是在这种大模型的这个场景下面,只不过我们现在可能面临的一个比较困难的问题是大模型是一个黑盒的模型,我们没有办法把它里面的参数应用在实际的研究或者操作上,因此会可能有一些困难。但是因为大模型毕竟参数量这么高,然后他的推理代价、计算代价、训练代价这么大,其实并不是每一个结构在每一个场景下都需要的。所以说我认为这类的压缩方法在未来还是有很大的一个应用场景。

Q6:模型剪枝算法是如何实现的?

A6:这个我也提到过,我们可以看中间这一列蓝色的这一个这一部分。我们上面描述的就是这种非结构化剪枝。它的做法一般都是它乘一个mask矩阵。结构化剪枝一般是直接剪掉某些行或者某些列。那这种方式其实会导致非结构化剪枝在执行的过程当中参数矩阵没有实质上的变小。但是结构化剪枝是实际上它会变小了,我觉得这个是它执行上的区别。

图片

Q7:强化学习如何在资源有限的环境中优化神经网络的计算分配?

A7:我理解的这个强化学习是指的是可能我有一个比较开放的问题,或者是比如说像游戏这这种的,或者现在像现在大模型所使用的这种强化学习的这种人类反馈的对齐。我觉得他其实主要强调的是这个效果上的问题。就是说通过一些强化学习的方式,然后去探索更大的一个空间(或面对监督信号不能立刻获得的场景),在这个空间里面找到一个相比于传统监督学习方法更好的一个解。但是我不太理解,我之前可能也没有接触过怎么用强化学习的方法来优化计算神经网络的这个计算分配,这个是我不太了解的点。

Q8:自适应计算方法如何根据输入数据的特性来调整模型计算的程度?

A8:我认为这个自适应计算方法,这里就是指条件计算。当然自适应这个词是一个比较广泛的词,可能它不只是涉及到条件计算,比如涉及到自适应的学习率,或者是其他的自适应方法。(在这里)我理解这个问题就是条件计算怎么去改变计算程度,其实就是函数的输出怎么去根据模型的计算去做调整。在这里面,我觉得一个比较恰当的例子是混合专家这一部分,它的门函数输出是一个比较稠密的分布,也就是说不用top-k的这种方式(或者说是使用top-k函数前的门函数输出)。那么现在怎么调整这个东西,取决于我们想要什么。如果想要一个比较稀疏的,或者是想要一个加速效果非常明显的模型,那就可以在门函数的输出上面再套一个top-k,或者是用类似的方法,我们选择一个(输出)非常少(稀疏)的一个激活(函数)。那如果说我们不需要这种加速效果非常明显的输出的话,就直接用门函数的输出就可以了。我觉得这也是一个比较开放的问题,就是我们的(门)函数怎么去设计,我觉得主要还是跟我想要什么样的模型,也就是模型的稀疏程度相关。如果说对模型稀疏程度要求比较高的话,那么就采用现在的这种top-k 的方法就可以了。但是因为现在top-k 的方法其实是比较常用的,要么用top-k 要么就不加top-k 。那么除了top-k以外的,怎么去做一些稀疏化,或者是选一些比较稀疏的k,或者选择比较稀疏的这个结构出来。我也不太了解,可能以后还会有沿着这个角度去做的工作吧,但是我觉得现在的这个top-k 已经可以解决现在的需求了。

Q9:对比模型蒸馏和参数量化,他们在将大模型的知识传递给小模型方面有什么异同?

A9:我觉得本质上就是量化和蒸馏之间的区别。那么蒸馏想要学习的是大模型的输出,然后把大模型的输出给到小模型,让小模型去学习。不管这个学习的东西是一个大模型的输出概率,还是大模型输出的一个序列,本质上其实是它的输出。我觉得蒸馏得到的结果和量化得到的结果有一个非常明显的区别:量化直接对这个大模型的参数去做量化,也就是说实际上类似于直接copy一个大模型,但是这个copy的副本是用低精度去表示的。那么这就有一个问题是,实际上我量化得到的一个小模型,它跟大模型从参数上还有它的输出上面应该都是比较相似的。(而)蒸馏知识得到的小模型实际上只能保证它的输出是比较像的,它里面的参数是不固定的。我也不知道它里面参数是怎么样构成的,但是我能保证它的输出是一致的。我觉得这个是两个方法的区别吧。

以上就是直播问答环节的全部内容,下期报告 《分布式训练技术》 将于9月14日18:30与您相见。更多关于报告的详细内容以及观看直播回放可于小牛翻译云平台视频号或机器翻译学堂获取。NiuTrans Talk,是由小牛翻译主办的,每期将邀请到不同领域的机器翻译专家进行讲解,分享行业干货知识,带你走进机器翻译的世界。更多精彩内容尽在小牛翻译直播间 ,想了解更多有关机器翻译的内容请关注机器翻译学堂或小牛翻译官方微博号,与小牛翻译一起探讨机器翻译技术。

**关于我们**

专注于机器翻译技术基础研究50年,拥有百余人的机器翻译产学研团队,自主研发以中文为核心的NiuTrans机器翻译系统,支持400+种语言随心互译。通过丰富的应用与功能,为用户提供机器翻译服务全栈式解决方案,致力于为机器翻译产业化应用提供基础平台,帮助企业级用户在国际业务中消除语言障碍。