量化的视觉指南 - 解密大型语言模型的压缩
翻译 - 韩语 - 中文 - 法语 如其名称所示,大型语言模型(LLMs)通常太大,无法在消费级硬件上运行。这些模型可能超过数十亿个参数,并且通常需要具有大量显存的GPU以加速推理。因此,越来越多的研究集中在通过改进训练、使用适配器等方式使这些模型变得更小。在这个领域的一项主要技术称为量化。在这篇文章中,我将介绍量化在语言建模中的应用,并逐步探索概念,以便对该领域形成直观认识。我们将探索各种方法、用例以及量化背后的原理。在这个视觉指南中,有超过50个自定义视觉图像,帮助你对量化形成直观认识!要查看更多与LLMs相关的可视化内容,并支持本通讯,请查看我写的关于大型语言模型的书!附言:如果您阅读了这本书,快速的评论将对我意义重大——这真的对我们作者有所帮助!LLMs因其所含参数数量而得名。如今,这些模型通常有数十亿个参数(主要是权重),而存储这些参数可能相当昂贵。在推理期间,激活值作为输入和权重的乘积被创建,这同样可能很大。因此,我们希望以尽可能高效的方式表示数十亿个值,最小化存储特定值所需的空间。让我们从头开始探索数值是如何被表示的,然后再进行优化。给定的值通常表示为浮点数(或计算机科学中的浮点数):一个带小数点的正数或负数。这些值由“位”或二进制数字表示。IEEE-754标准描述了如何表示这三种功能以表示值:符号、指数或分数(或尾数)。这三个方面可以用来根据特定的位值集合计算一个值:使用的位数越多,表示的值通常越精确。可用的位数越多,可以表示的值的范围就越大。给定表示可以取到的可表示数字的区间称为动态范围,而两个相邻值之间的距离称为精度。这些位的一个巧妙特性是我们可以计算设备存储给定值所需的内存量。由于一个字节内有8位,我们可以为大多数浮点数表示创建一个基本公式。 注意:在实践中,推理期间需要的(V)RAM量与上下文大小和架构等更多因素相关。现在,让我们假设我们有一个具有700亿个参数的模型。大多数模型采用32位浮点数(通常称为全精度)表示,这仅加载模型就需要280GB的内存。因此,最小化表示模型参数所需的位数(在训练期间也是如此)是非常有说服力的。然而,随着精度的降低,模型的准确性通常也会降低。我们希望减少表示值所需的位数,同时保持准确性……这就是量化的作用!量化的目标是将模型参数的精度从更高的位宽(如32位浮点数)减少到更低的位宽(如8位整数)。在减少位数以表示原始参数时,通常会有一定的精度(粒度)损失。为了说明这种效果,我们可以取任何图像,只用8种颜色来表示:请注意,放大部分似乎比原始图像更“颗粒化”,因为我们使用更少的颜色来表示它。量化的主要目标是减少表示原始参数所需的位数(颜色),同时尽可能保持原始参数的精度。首先,我们来看一下常见的数据类型及其使用这些数据类型(而非32位(称为全精度或FP32)表示)的影响。让我们看一个从32位到16位(称为半精度或FP16)浮点数的例子:请注意,FP16可以取的值范围比FP32小得多。为了获得与原始FP32相似的值范围,引入了bfloat16作为一种“截断的FP32”类型:BF16使用与FP16相同数量的位,但可以取更广泛的值范围,通常在深度学习应用中使用。当我们进一步减少位数时,我们接近基于整数的表示形式,而不是浮点数表示形式。为了说明,从FP32转换到只有8位的INT8,结果是原始位数的四分之一:根据硬件的不同,基于整数的计算可能比浮点计算更快,但这并不总是如此。然而,计算通常是一般的。
本站免费、广告极少。如果觉得有帮助,可以请我们喝杯咖啡 —— 任何金额都对持续运营有实际帮助。
☕请我喝杯咖啡