大型语言模型(LLM)功能强大,但其庞大的规模和计算需求常带来实际难题。部署一个拥有数十亿参数的模型需要大量内存、处理能力和能耗,这限制了它们在移动设备或边缘硬件等资源受限环境中的应用,并增加了云部署的运营成本。模型压缩直接应对这些难题。它包含一系列旨在减小机器学习模型(包括LLM)的存储占用和计算成本的技术,同时尽量减少对其预测性能(如准确率或困惑度)的影响。可以将其看作是使模型更精简、更高效。模型压缩的主要目标是:内存占用减少: 更小的模型需要更少的内存和存储空间,使其在内存有限的设备上得以实现。推理速度提升: 压缩后的模型通常需要更少的计算或可以借助专用硬件操作,从而带来更快的预测。能耗降低: 计算和内存访问的减少直接转化为更低的功耗需求,这对于电池供电设备和大规模部署很重要。部署灵活性增强: 更小、更快的模型可以部署到更广泛的场景中,从嵌入式系统到网络浏览器。虽然本课程侧重于量化,它涉及使用低精度数字(如8位整数而非32位浮点数)表示模型参数和/或激活值,但这只是多种压缩策略中的一种方法。了解这些其他方法可提供有益的背景信息:剪枝: 这种技术涉及识别并移除模型中冗余或不那么重要的参数(权重)或结构(如整个神经元或通道)。非结构化剪枝:移除单个权重,常产生稀疏矩阵,需要专用硬件或库才能加速。结构化剪枝:移除更大、规则的权重块(例如,整个通道或滤波器),使在标准硬件上获得加速更容易。知识蒸馏: 在此,一个较小的“学生”模型被训练来模仿较大的预训练“教师”模型的行为。学生模型从教师模型的输出(例如,类别上的概率分布)或内部表示中学习,有效地将知识转移到更紧凑的形式。低秩分解: 此方法针对模型中的大型权重矩阵(如全连接层或注意力层中的矩阵)。它通过将这些矩阵分解为更小矩阵的乘积来近似它们,减少参数总数和相关计算。奇异值分解(SVD)等技术常在此处使用。digraph G { rankdir=LR; node [shape=box, style=rounded, fontname="sans-serif", color="#495057", fillcolor="#e9ecef", style="filled, rounded"]; edge [color="#868e96"]; ModelCompression [label="模型压缩\n技术"]; Quantization [label="量化\n(低精度数字)", fillcolor="#a5d8ff"]; Pruning [label="剪枝\n(移除参数)"]; Distillation [label="知识蒸馏\n(师生学习)"]; Factorization [label="低秩分解\n(分解矩阵)"]; ModelCompression -> Quantization [label=" 侧重点"]; ModelCompression -> Pruning; ModelCompression -> Distillation; ModelCompression -> Factorization; }一张图表,说明了常见的模型压缩技术,并突出显示量化是本课程的侧重点。这些方法各自有一系列权衡,涉及实现的压缩程度、对模型准确率的影响、实现的复杂性以及在不同硬件平台上产生的推理加速。量化显得突出,特别对于大型语言模型而言,因为降低数值精度直接转化为更低的内存带宽需求(通常是瓶颈),并且可以借助许多现代CPU和GPU上高度优化的整数算术运算。它通常在压缩比、性能提升和模型准确率保持之间提供一个良好的平衡。接下来的部分将特别侧重于量化,研究它为何对大型语言模型如此有效,用更少比特表示数字的基本原理,以及应用它的不同策略。