How to Shrink a Language Model Without Making it Too Dumb

TL;DR · AI 摘要
本文揭示了三种有效缩小语言模型规模而不显著影响性能的技术,包括参数量化、路径修剪和行为模仿,解决了大模型部署的硬件瓶颈问题。
核心要点
- 700亿参数模型需140GB显存,而消费级显卡仅支持24-48GB
- 模型压缩可通过量化参数精度(如16bit→8bit)、剪枝冗余路径、知识蒸馏实现
- Transformer架构的注意力机制是模型智能的核心组件
结构提纲
按章节快速跳转。
- §引言
揭示大模型参数规模与硬件存储能力的矛盾,提出压缩必要性
解释语言模型智能来源于参数矩阵与Transformer架构的协同作用
通过降低参数存储精度(如FP16→INT8)实现显存占用减少50%
移除低权重连接路径可减少30%参数量且保持90%性能
使用知识蒸馏让小模型模仿大模型输出,可压缩至1/10规模
思维导图
用一张图看清主题之间的关系。
查看大纲文本(无障碍 / 无 JS 友好)
- 大模型压缩技术
- 模型智能基础
- 参数矩阵
- Transformer架构
- 压缩方法
- 参数量化
- 路径剪枝
- 行为模仿
- 硬件限制
- 显存瓶颈
- 成本问题
金句 / Highlights
值得收藏与分享的关键句。
700亿参数模型需要140GB显存,而顶级消费级显卡仅支持48GB
参数量化可将存储需求降低50%,但可能损失2-3%推理精度
路径剪枝技术通过移除低权重连接,在保持90%性能时减少30%参数
如何在不降低智能的前提下压缩语言模型
2026年9月1日
实时捕捉AI成本激增(而非数月后)(赞助)
Datadog的免费指南展示了如何将AI支出、基础设施和模型性能整合到统一视图中,让您在成本增加出现在云账单之前,就能将成本增长与导致问题的架构变更相关联。
您将学到:
- 按照token、模型、供应商和团队分解AI成本
- 在推理量激增或API支出超出预算时立即收到警报
- 将成本增长直接关联到架构变更,使根本原因分析仅需数分钟
获取指南
一个拥有700亿参数的模型可能需要多达140GB的存储空间。一块好的显卡有24GB显存,非常优秀的显卡可能有48GB。
显然,两者之间的差距相当显著。磁盘空间相当便宜,但高速内存稀缺且昂贵。此外,模型规模在几年内增长了约100倍,而消费级显卡的显存仅增长了约两倍。这不仅仅是通过压缩来适应的问题。
那么如何运行这样的模型?
最简单的选择是购买能够运行该模型的硬件。但这成本高昂,且与消费级硬件兼容性不佳。
另一个选择是压缩模型。但我们不希望为此牺牲模型的智能性。这时某些技术可以帮助我们在不降低输出质量的前提下,从原则上减小模型体积。
本文将涵盖:
- 什么使语言模型具有智能性?
- 三种压缩模型的技术
- 如何通过减少细节来压缩模型?
- 如何通过修剪未使用路径来压缩模型?
- 如何通过模仿行为来压缩模型?
- 压缩是否会影响模型的智能性?
免责声明:本文基于来自多个来源的公开信息。文末有参考文献。如果您发现任何不准确之处,请在评论区指出。
什么使语言模型具有智能性?
像ChatGPT这样的大型语言模型与普通软件程序有很大不同。它们不依赖于典型的if-else语句来决定下一步该发生什么。
大型语言模型本质上是一堆被称为参数或权重的非常大的数字集合。这些权重是语言模型智能性的基础。作为参考,一个拥有700亿参数的模型意味着有700亿个数字或权重。每个权重通常以16位存储,即两个字节。两个字节乘以700亿得到140GB,这基本上就是模型的大小。
这些权重被排列成矩阵。单个权重矩阵是一个网格,通常是4096乘4096的规模。这相当于矩阵中约有1670万个数字。一个拥有700亿参数的模型在大约80层中堆叠了数百个这样的矩阵。
当然,权重本身并不是模型能力的全部故事。多个组件协同工作才能使模型具有智能性。例如,模型需要像Transformer这样的架构来路由数据并执行注意力机制。它还需要一个上下文窗口来保存提示和对话过程中生成的所有内容。
然而,该架构仅由数百行代码组成。提示信息可能只有几KB。相比之下,权重构成了语言模型的主体部分。没有合适的权重,语言模型无法按预期工作。权重执行以下任务:
- 它们存储诸如语法、事实和推理捷径等模式。
- 训练完成后,权重会冻结为一个不可更改的数值网络。
- 权重决定一个模拟神经元对下一个神经元的影响强度。
运行模型意味着将输入通过这些权重矩阵传递,直到输出下一个词。
需要记住的一点是,单个权重本身没有意义。如果你打开模型文件并查看第N个权重,可能会看到类似0.0293的数值。这个数值的两侧可能有其他数值,例如-0.0117、0.004、-0.0862。单独来看,这些数值本身几乎没有意义。模型的能力隐藏在各个权重之间的关系中。可以将其想象成一张照片,每个像素共同构成了可识别的图像。即使我们略微调整每个像素的亮度,仍然可以辨认出图像中的物体。这是因为信息并非存储在单一位置。
基于以上信息,我们可以很容易地得出结论:要缩小模型,必须设法处理这些权重。这正是技术发挥作用的地方。不过,以下两个要点可以帮助我们更好地理解模型压缩技术:
- 首先,并非所有权重具有同等重要性。大多数权重值接近于零,对最终输出影响微乎其微。然而,少数权重值较大,对结果影响更显著。
- 其次,我们只能根据模型的行为来评判它,而非其内部结构。
现在让我们来看这些技术。
构建和扩展成功的AI代理策略(赞助内容)
将代理部署到生产环境是容易的部分。保持其可靠性、可控性并随时间改进才是大多数企业AI项目遇到瓶颈的地方。
顶级团队是如何做到的?他们采用代理运营模型(Agentic Operating Model,AOM),这是一个分步框架,用于协调人员、流程和技术,使企业代理在扩展过程中持续改进。
在LangChain的最新指南中,你将学习到:
- 为什么AI代理不像传统软件那样容易崩溃
- 覆盖整个代理生命周期的工程架构
- 从"构建和部署"转向"运营和持续改进"
了解更多
缩小模型的三种技术
缩小模型的技术主要围绕两种方式:使用更少的位数存储权重,或使用更少的权重。主要有三种技术:
- 以更低精度存储每个权重(量化):在这种方法中,我们保留所有权重,但以更低的精度描述每个权重。例如,两个字节可能缩减为半个字节。
- 移除无关权重(剪枝):这种方法涉及找出对模型没有贡献的权重并将其删除。
- 构建更小模型模仿大模型(知识蒸馏):在这种方法中,我们不修改原始模型,而是训练一个更小的新模型,使其行为与原模型相似。
回到我们之前的摄影示例,可以将量化理解为使用一台分辨率稍低的廉价相机拍照。剪枝则更类似于去除照片中可能对画面没有价值的空白边缘。蒸馏可以被看作是请一位技艺高超的画家以四分之一的尺寸重新绘制这幅画。
这些技术的出色之处在于它们可以组合使用。例如,模型可以由研发实验室进行蒸馏,由研究团队进行剪枝,最后由用户在加载到特定设备前进行量化。换句话说,通过组合这些技术,可以在普通消费级硬件上运行高端大型语言模型。
现在让我们更详细地了解每种技术。
通过减少细节来压缩模型
缩小模型的第一种技术是为每个权重存储更少的细节。这种技术被称为量化。
假设某个特定权重可能以0.02934517的形式存储。这会占用大量空间,但在一个700亿参数的模型中,它只是一个单独的权重。无论它存储为0.02934517还是0.029,对模型输出的影响几乎可以忽略不计。换句话说,大量存储空间被用于可能并不重要的精度上。
量化技术正是通过去除这种冗余精度来实现压缩。
量化过程的第一步甚至在模型发布之前就已经发生。在训练过程中,模型权重通常以32位(4字节)浮点数形式存储,也称为FP32格式。由于训练过程需要对每个权重进行数百万次微调,因此需要高精度。但当模型被部署时,精度通常会降低到16位浮点格式,也称为FP16或BF16。
然而,我们还可以进一步降低精度。要理解如何实现,首先需要明确浮点数值的实际构成方式。
浮点数将比特分为三个部分:符号位、指数位和尾数位。FP32为符号位分配1位,指数位8位,尾数位23位。而BF16则保留所有指数位,将尾数位减少到7位。这基本上与FP32具有相同的数值范围,但细节更少。为清晰起见,BF16与FP16略有不同,FP16为指数位仅分配5位,而为尾数保留更多位。在实际应用中,BF16已基本取代FP16。
整数的差异则更为显著。8位整数的取值范围是-128到127,而4位整数的取值范围是-8到7。整数没有指数也没有比例因子。换句话说,将浮点数转换为整数不仅会导致精度损失,还会消除每个权重的比例信息。
现在让我们完整了解量化过程:
1 - 映射范围
第一步是确定数据集的最小值和最大值,并将总跨度划分为固定数量的步长。
需要明确的是,“数据集”并不是整个模型,而是指一组相邻权重的小型集合。我们可以将其称为一个块,理想情况下这个块应该足够小。
例如,考虑这八个权重:0.021、-0.017、0.004、-0.048、0.011、0.033、-0.006、0.070。它们的范围从-0.048到0.070。任一方向的最大值都是0.070。以4位作为目标精度时,我们可以表示从-7到7的整数。换句话说,每个方向有7个步长。因此,每个步长可以计算为0.070/7,结果为0.010。
2 - 四舍五入数值
与其保留长小数,每个原始数值都会被四舍五入到最接近的步长。为此,我们将每个权重除以步长大小,并将其四舍五入到最近的整数。
下表展示了新的权重:
从表中可以看出,右侧的数值最终会写入模型权重文件。此处的每个条目都是-7到7之间的整数。
原始权重是浮点数。由于浮点数自带自己的量纲,工程师在四舍五入时会同时丢失精度和量纲。这个量纲必须存储在某个地方。
3 - 使用缩放因子
我们需要记录缩放因子,以便在模型需要读取这些压缩数值时,能够大致还原原始值。
在我们的示例中,缩放因子就是步长大小(0.010)。它在整个块中只存储一次。要恢复一个权重,我们可以将存储的整数乘以缩放因子。
例如,存储的权重2乘以0.010后得到0.020。当然,它仍然与原始值0.021存在差异,但误差已经大幅减少。换句话说,模型本身几乎没有变化。我们仍然拥有相同的权重(存在一些误差)、相同的矩阵和相同的层。不过,存储空间消耗大幅减少。
通过移除未使用权重来减小模型体积
第二种技术采用了相反的思路。与其尝试用更少的空间存储每个权重,不如直接删除部分权重。这种方法被称为剪枝。
剪枝之所以有效,是因为并非所有权重都同等重要。大多数权重的值接近于零,例如0.00004、-0.0011等。这些值如此微小,以至于对输出没有实质性影响。然而,在训练过程中会产生数十亿个这样的权重。它们在模型形成初始结构的训练阶段是有用的。你可以将它们想象成城市地图中从未使用但仍然显示的车道和支路。即使删除它们,也不会影响使用这张地图通勤的人。
剪枝的关键决策在于选择删除哪些权重。最简单的方法是根据权重大小。我们按权重距离零的绝对值进行排序,删除最小的那些。例如,如果这种方法能剪掉20%的权重,对于一个700亿参数的模型来说,大约会移除140亿个权重。
然而,这种方法存在一个缺陷。权重的影响还取决于它所在的路径。更好的方法是先让模型运行几百个样本文本,然后监控每个权重的典型输入规模。基于此,每个权重会被分配一个最终评分。
在剪枝时还需要考虑另一个因素:权重删除的机制。主要有两种方法:
- 设为零:第一种方法是将选定的权重设为零。这种方法造成的损害最小。但最终我们会得到一个矩阵,其中零的分布没有特定模式。GPU 仍然需要处理这些零值的计算。
- 移除结构组件:第二种方法是移除结构组件,例如整个神经元、注意力头甚至完整的层。这有助于缩小矩阵规模。但这也是一种更粗粒度的方法。移除一个神经元可能意味着移除与之相关的所有权重。其中一些权重可能很重要,但也会被一并删除。换句话说,这种方法对模型造成的整体损害更大。
请参见下图,该图展示了这两种方法:
最终,剪枝很少能成为完整的解决方案。将剪枝与其他技术结合使用效果会更好。
通过模仿行为缩小模型
第三种缩小模型的技术会创建一个全新的小型模型。
在这种技术中,我们使用大型模型,称为教师模型。接下来,我们从零开始构建一个使用相同架构的新模型,但其层数更少,矩阵更小。例如,一个拥有 70 亿权重的模型可能会被缩小为拥有 7 亿权重的模型。我们将这个新模型称为学生模型。
学生模型最初拥有随机且无意义的权重。这个模型会经历训练过程,但我们不会使用互联网上其他来源的原始文本进行训练。相反,学生模型会根据教师模型的行为进行训练。这包括向学生模型和教师模型输入相同的内容,并推动学生模型生成更接近教师模型输出的结果。
这种技术被称为知识蒸馏。
这种方法可能看起来有些违反直觉,但之所以有效,是因为模型内部的工作方式。
当模型预测下一个词时,它不会只生成一个词。而是为词汇表中的每个词生成一个概率分数。例如,给定句子“the cat sat on the…”,教师模型可能会给出“mat 41%”、“floor 12%”、“couch 9%”等概率。在普通的训练方法中,学生模型只会接收到正确答案。但在蒸馏过程中,学生模型会接收到所有可能答案的概率分布。换句话说,学生模型会学到“couch”也是一个相当合理的猜测,而“purple”则可能非常荒谬。
请参见下图:
将知识蒸馏想象成老师批改论文,但老师不仅在卷面上打勾画叉,还会在空白处写下评语,帮助学生更清楚地了解自己可能犯的错误。第二种方法能让学生更快地学习。
当然,蒸馏过程需要大规模训练。一个巨大的教师模型需要处理海量数据,这需要数据中心级别的资源。对于开发者来说,这意味着可以下载一个更小的学生模型,它可以在硬件要求更低的设备上运行。
缩小模型会损害其智能性吗?
缩小模型确实会降低其整体智能性,但通常只会降低很小一部分。可以将其视为模型物理尺寸与智能敏锐度之间的权衡。
这些技术对模型智能性的影响如下:
- 量化:它会使权重的精度降低。模型可能会失去理解极端细微差别能力。它可能忘记一些非常具体的知识,或者语气听起来稍微不够自然。许多变化取决于量化刻度的调整程度。例如,从32位切换到8位几乎不会对智能产生明显影响。但进一步降低到4位甚至更低可能会产生巨大影响。
- 剪枝:它会降低模型处理复杂多步骤逻辑的能力。然而,仅修剪闲置路径对智能影响不大。只有在激进地剪除深层路径时,才会导致模型变"愚蠢"。
- 知识蒸馏:较小的学生模型可能缺乏原始的问题解决能力。它可以完美模仿大教师模型的风格,但如果教师模型没有明确教授过相同内容,遇到全新的逻辑谜题可能会出现偏差。
结论
在本文中,我们详细探讨了各种缩小大语言模型的技术。
没有计划地缩小语言模型可能导致智能损失。因此,各种技术采用不同方法,确保模型在占用更少空间的同时不严重损失原有能力。需要记住的关键点:
- 量化通过用更少的位数存储每个权重来实现
- 剪枝会删除贡献最小的权重和路径
- 蒸馏不修改原始模型,而是通过大教师模型训练小学生模型
最终,选择某种技术或技术组合取决于语言模型需要实现的整体目标。
References:
- QLoRA: Efficient Finetuning of Quantized LLMs
- GPTQ: Accurate Post-Training Quantization for Generative Pre-trained Transformers
- A Simple and Effective Pruning Approach for Large Language Models
- Distilling the Knowledge in a Neural Network