趋近智
为了明白量化 (quantization)如何实现模型压缩与加速,我们首先需要了解数值在计算机中如何以数字形式表示。大型语言模型,像多数深度学习 (deep learning)模型一样,通常使用浮点数进行计算。量化包含将这些数值转换为需要更少内存的格式,通常是定点数或整数表示。
浮点数是计算机表示实数(带小数部分的数值)的标准方式。它们提供宽广的动态范围,这意味着它们能表示极小和极大的数值,并且具有不错的精度。机器学习 (machine learning)中常见的格式包含:
深度学习 (deep learning)中常见浮点格式的结构。
虽然浮点数提供了灵活性,但其存储和计算需求可能相当可观,特别是对于拥有数十亿参数 (parameter)的大型语言模型。对32位浮点数的操作通常比对较小整数类型的操作更慢且更耗能。
定点数表示是表示实数的一种替代方法。与浮点数不同,浮点数中小数点(或二进制小数点)的位置可以“浮动”,而在定点数表示中,二进制小数点的位置是固定的。
一个定点数本质上是一个由预设因子隐式缩放的整数。例如,您可能决定使用一个8位带符号整数(范围从-128到127)来表示-1.0到+1.0之间的数值。为此,您需要定义一个缩放因子。如果您选择缩放因子为 ,那么:
分配给整数部分和分数部分的位数,决定了范围和精度。
与浮点数相比:
许多量化技术会将FP32权重 (weight)和/或激活值直接转换为低精度整数类型,例如:
这些整数类型可大幅节省内存(例如,INT8的内存用量是FP32的四分之一),并能让配备专用整数算术单元的硬件(常存在于现代CPU和GPU/TPU中)进行快得多的计算。
当我们在量化中使用INT8或INT4时,我们实际上是在使用定点数表示。从浮点数转换的过程涉及确定一个比例因子(类似于上述定点数示例)以及通常一个零点(或偏移量)。这些参数 (parameter)将原始浮点数范围映射到目标整数范围。
举例而言,要将浮点数范围 映射到8位整数范围 ,映射方式可能如下:
其中:
将浮点数值映射到整数格式时,被量化的数值通常在一个特定范围之内。例如,如果考虑一个浮点数值0.5和比例因子(S)0.1,对应的量化整数将是5(0.5 / 0.1 = 5)。其中 S 是比例因子(浮点数),Z 是零点(整数)。S和Z的选择很重要,因为它们定义了从原始浮点数范围到整数范围的映射,影响着精度和准确性。
此映射使我们能够使用高效的整数算术进行计算,仅在必要时才转换回浮点数。浮点数与定点数/整数表示之间的选择涉及数值范围/精度与计算效率/内存使用之间的权衡。量化旨在利用低精度格式的效率,同时尽量减少对模型准确性的影响。后续章节将介绍此映射在实践中如何实现。
这部分内容有帮助吗?
© 2026 ApX Machine LearningAI伦理与透明度•