部署量化大型语言模型时,一个基本决定是关于激活的量化参数(缩放因子和零点)何时确定。这个选择引出两种主要方法:静态量化和动态量化。训练后量化(PTQ)等技术通常通过校准隐式使用静态量化。了解静态和动态方法之间的权衡对于处理部署难题很重要,尤其是在应对大型语言模型的独特特点时。
静态量化:预校准的效率
静态量化会提前确定权重以及激活的量化参数,这非常重要。此过程通常包括:
- 校准: 在一个小型、有代表性的数据集(校准数据集)上运行模型,以观察模型中各个点(例如,线性层的输入、注意力输出)的激活值分布。
- 参数计算: 根据校准期间观察到的范围,为每个激活张量计算固定的缩放因子和零点。
- 离线权重量化: 使用模型权重自身的分布来量化它们(通常按通道或按组进行)。
- 部署: 部署带有量化权重和预先计算的激活量化参数的模型。
推理时,激活使用这些固定的、预先确定的参数进行量化。
优点:
- 性能: 通常提供最高的推理速度。由于量化参数是固定的,运行时确定这些参数的计算开销被消除。这使得可以使用假定固定缩放因子的优化低位计算核心。
- 可预测性: 性能更一致,因为量化计算是常量。
- 硬件加速: 与硬件加速器(GPU、TPU、专用ASIC)良好匹配,这些加速器通常有针对固定缩放因子操作的优化指令。
缺点:
- 对校准的依赖: 效果完全取决于校准数据集的质量和代表性。如果校准数据不能准确反映实际推理中看到的激活分布,准确性会明显下降。为处理多样输入的LLM选择一个好的校准集可能很困难。
- 对异常值的敏感性: 校准期间遇到的极端异常值会使计算范围失真,导致大多数值的量化分辨率不良并影响准确性。前面讨论的处理异常值的技术在这里变得尤其适用。
- 前期工作量: 需要额外的校准步骤,这增加了模型准备流程的复杂性。
动态量化:即时调整
动态量化则在运行时逐实例确定激活的量化参数。此过程通常如下所示:
- 离线权重量化: 权重通常仍然像静态量化一样离线量化,以减小模型大小并可能加快权重加载速度。
- 运行时激活分析: 当每个输入通过网络传播时,会动态计算每个激活张量的范围(最小值和最大值)。
- 参数计算与量化: 根据该特定激活张量观察到的运行时范围计算缩放因子和零点,然后将其量化。
- 计算: 执行计算(例如,矩阵乘法),如果底层硬件不能高效地原生支持动态缩放的低位操作,则可能涉及反量化回更高精度格式。
优点:
- 简单性(无需校准): 消除了对校准数据集和相关校准过程的需求,简化了初始量化流程。
- 适应性: 可以比静态量化更好地处理意料之外的激活范围,因为参数是根据当前输入调整的。这对于处理各种提示的LLM可能显得有益。
缺点:
- 性能开销: 实时计算激活的量化参数会引入显著的计算开销,通常导致比静态量化更高的延迟。
- 有限的硬件优化: 许多硬件加速器都针对预定义缩放的操作进行了优化。动态量化可能无法充分从这些优化中受益,甚至可能涉及代价较高的数据类型转换(例如,量化 -> 反量化 -> 计算 -> 量化)。
- 潜在的运行时内存增加: 需要动态存储或重新计算缩放因子/零点,与使用预先计算的静态值相比,这会增加运行时内存使用。
- 准确性差异: 尽管具有适应性,但实时计算本身是一种近似,可能不总是比经过良好校准的静态模型产生更好的准确性。开销也可能抵消对延迟敏感应用的益处。
静态量化与动态量化的选择
此决定取决于您LLM部署的特定要求:
| 特性 |
静态量化 |
动态量化 |
对LLM的考量 |
| 主要目标 |
最高性能(延迟/吞吐量) |
实现简易性 |
LLM推理通常受延迟限制;静态量化通常因性能而被选择。 |
| 性能 |
更高(延迟更低) |
更低(因开销导致延迟更高) |
动态缩放的开销对于大型LLM层来说可能很大。 |
| 准确性 |
很大程度上取决于校准质量 |
对校准依赖较少,适应性强 |
静态量化若校准得好可获得优异准确性。动态量化不保证更好。 |
| 实现工作量 |
更高(需要校准) |
更低(无校准步骤) |
校准增加了流程复杂度,但通常是每个模型版本的一次性成本。 |
| 内存(模型大小) |
更小(量化权重) |
更小(通常使用量化权重) |
权重存储减少方面有类似好处。 |
| 内存(运行时) |
更低(固定参数) |
潜在更高(实时参数) |
静态量化通常更利于运行时内存效率。 |
| 硬件支持 |
与优化核心更匹配 |
可能退回到较慢的执行路径 |
对于低位类型(INT8、INT4)充分发挥GPU/TPU加速的优势很重要。 |
| 使用场景 |
延迟敏感应用、边缘设备、生产环境 |
快速原型开发、校准困难 |
大多数生产环境的LLM部署倾向于静态量化以获得性能。 |
何时优先选择LLM的静态量化:
- 生产部署: 当推理速度(延迟、吞吐量)和资源效率是主要考量时。
- 面向硬件加速器: 为了充分发挥GPU、TPU或定制芯片上可用的优化低位计算核心的优势。
- 稳定输入分布: 当输入数据的性质和由此产生的激活分布得到合理地理解,并且可以通过校准集捕捉时。
何时考量LLM的动态量化:
- 快速实验: 当需要快速评估量化的可行性而无需投入校准过程时。
- 校准困难场景: 如果获取具有代表性的校准数据集非常困难或计算成本过高。
- 性能要求不严格: 在动态计算的运行时开销可接受的应用中。
实际上,对于部署高性能量化LLM,静态量化是主流方法。源于预计算参数和硬件加速兼容性的性能优势,通常会超过校准步骤增加的复杂度。前面讨论的改进型PTQ技术(如GPTQ、AWQ)本质上依赖校准并生成静态量化模型,正是因为性能对于这些大型模型非常重要。动态量化仍然是一个选项,但在生产环境中优化最先进的LLM推理时较不常见。了解这种权衡有助于调试性能瓶颈,并在面临部署限制或意外准确性问题时做出明智选择。