大模型的量化
https://developer.baidu.com/article/details/3211764
一、大模型量化的基本概念
大模型量化,简单来说,就是将深度学习模型的浮点运算转换为整型运算的过程。在默认情况下,模型使用32位浮点数进行所有预测计算,这使得模型变得非常大。通过量化技术,我们可以将这些浮点数转换为更低精度的整数,从而显著减少模型的存储空间和计算时间。需要注意的是,量化过程中可能会损失一定的精度,但通常这种损失在可接受范围内。
二、大模型量化的技术原理
大模型量化的核心思想是利用数学变换和编码技术,将浮点数的存储和运算转换为整数的存储和运算。具体来说,量化过程包括两个主要步骤:前向量化和反向量化。
前向量化是将浮点数转换为整数的过程。在这个过程中,我们将浮点数的范围映射到一个整数范围内,并将浮点数转换为对应的整数。这个映射过程通常是通过一个缩放因子和一个偏移量来实现的。缩放因子用于调整整数的范围,使其能够覆盖浮点数的范围;偏移量则用于将浮点数的零点映射到整数的零点。
反向量化是将整数转换回浮点数的过程。这个过程是前向量化的逆操作,用于在推理过程中将整数还原为浮点数,以便进行后续的运算。
三、大模型量化的实际应用
大模型量化技术在实际应用中具有广泛的用途。首先,它可以显著减少模型的存储需求,使得在资源有限的设备上部署大型模型成为可能。例如,在手机、嵌入式设备等资源受限的环境中,通过量化技术可以使得深度学习模型的应用变得更加容易和高效。
其次,大模型量化技术还可以加快模型的推理速度。由于整型运算比浮点运算更快,因此量化后的模型在推理过程中可以获得更高的运行速度。这对于实时性要求较高的应用来说非常重要,如语音识别、图像识别等。
https://github.com/yuanzhoulvpi2017/zero_nlp/wiki/%E5%A4%A7%E6%A8%A1%E5%9E%8B%E7%9A%84%E9%87%8F%E5%8C%96%E4%B9%8B%E8%B7%AF%E2%80%94%E2%80%94transformers%E6%98%AF%E5%A6%82%E4%BD%95%E7%BB%99%E6%A8%A1%E5%9E%8B%E6%B7%BB%E5%8A%A0%E4%B8%8A%E9%87%8F%E5%8C%96%E5%8A%9F%E8%83%BD%E7%9A%84%E3%80%90transformers%E6%BA%90%E7%A0%81%E9%98%85%E8%AF%BB%E3%80%91
背景
- 现在 nlp 模型,动不动就 7b、13b 的,有的甚至更大,如果直接使用 bfloat16 加载推理、训练,需要太大的显存了。
- 于是现在大家都在用 int4、int8 对这种 100b 以上的模型、对 60b 以上的模型做量化。量化之后的模型,虽然效果会变差,但是好像效果还不错。
- 有的人,甚至结合 lora,做了 qlora。比如这个项目https://github.com/artidoro/qlora,现在很火~
- 现在,在最新的 transformers 包里面,已经集成了相关的方法,你可以使用 int4、int8 对任何 transformers 家族的模型做量化。而且就传递几个参数即可。很简单。
- 现在的 int4、int8 方法实现,包括 transformers 集成的量化方法,基本上都是基于 bitsandbytes 包的。
问题
- 我就是很好奇,transformers 包,到底怎么做的,就加个参数,就可以量化模型了。
- 这个量化,到底是怎么量化的。懒得看论文了,就看代码吧。
标签:E5%,模型,E6%,整数,量化,浮点数 From: https://www.cnblogs.com/lightsong/p/18306263