量化、蒸馏与GPU显存预算
- 区分量化压缩表示与蒸馏学习行为
- 列出显存预算中不止权重的组成部分
模型文件大小不是设备需求
积木工坊想把助手放到一台有图形处理器的设备上。图形处理器简称GPU,显存是它工作时使用的高速存储空间。如果下载文件只有几个吉字节,不代表运行只需要同样的显存。推理还可能需要保存中间计算、词元相关缓存和运行框架的额外空间;训练还要考虑梯度、优化器状态和反向计算所需信息。用户同时请求的数量以及每次输入输出长度也会改变占用。预算必须对应实际工作负载,而不是从模型参数量直接跳到某个设备名称,更不能根据旧印象编造当前硬件价格。
量化改变数值表示
模型权重原本可以用较高精度数值保存。量化是用更少位数或更紧凑的方式近似表示数值,例如把部分权重从十六位表示改为四位表示。在只算权重的简化例子中,十亿个参数以每个参数两字节保存约需二十亿字节,以半字节保存约需五亿字节;实际还存在缩放参数、分组信息、单位换算及框架开销,所以不能把简算当作运行保证。精度降低可能影响答案,是否更快还取决于硬件和软件是否支持高效运算。小文件不自动等于低延迟,更不意味着事实更可靠。
蒸馏改变学习对象
知识蒸馏是让较小的学生模型学习较大教师模型的输出或中间信号。工坊可以用经过审核的教师答复训练一个专门输出搭建步骤的学生,但教师的错误也可能被学生继承。蒸馏不等于把大模型参数原封不动压缩进小容器,而是重新学习一部分行为,通常需要数据、训练与评估。量化和蒸馏可以组合,前者侧重数值表示,后者侧重模型能力迁移。学生在常见工坊问题上表现接近教师,不代表在罕见问题和新的语言风格上也一样,因此评估需要同时包含正常样本与容易失败的边界样本。
用工作负载计算预算
工坊先写出服务目标:每次最多提供多少说明书段落,输出最多多少词元,同时处理多少请求。再把显存估算拆成权重、词元缓存、中间计算和安全余量。词元缓存通常随序列长度和并发增长,具体大小与模型结构、精度及推理实现有关,不能套用一个适合所有模型的固定比例。训练时还需单独列可训练参数的梯度和优化器状态。先用很小的输入与单请求试运行,记录峰值,再逐步增加到目标负载;如果资源不足,应调整长度、并发或模型方案,而不是盲目等待内存错误发生。
做压缩实验而不是猜结论
保持数据和评估问题不变,对原精度版本、量化版本或蒸馏学生分别记录正确性、澄清行为、首个词元等待、完整答复耗时和峰值显存。首次加载与缓存预热应和稳定运行分开统计,避免混淆启动成本与日常性能。把可接受退化写在实验前,例如关键步骤不能新增错误,而非实验后为了选中小模型临时放宽。最终报告写实际测量环境与条件,不声称某种位数必然适合所有设备。设备采购属于另一个需要核实的任务,本节只学习预算与比较方法,不提供价格或配置推荐。
本节要点
- 显存还包括缓存、中间计算和运行开销
- 量化与蒸馏解决不同的压缩问题
- 速度和质量必须在相同负载下实测
动手练习:为工坊建立资源预算表
- 用十亿参数、每参数两字节与半字节分别估算仅权重字节数
- 另列词元缓存、中间计算和余量,不填写未经测量的固定比例
- 设计单请求短输入与多请求长输入两种测试,并列质量检查项
自查清单
- 明确权重简算不等于总显存
- 压缩测试同时记录资源与任务质量
先自己做,再查看参考答案
简算得到较高精度权重约二十亿字节,四位紧凑表示约五亿字节,只能说明数值表示的理论差异。实际文件和显存还会加入缩放信息、缓存、中间计算以及框架开销,因此预算表应把这些项目独立列出,未知项标为需要测量。单请求短输入用来确认服务可以正常运行,多请求长输入用来观察目标负载下的峰值显存和等待变化。质量检查至少包含步骤正确、结构合格和资料不足时会澄清。若小模型资源更少但关键步骤错误变多,不能单凭压缩率决定发布,必须遵守预先设定的底线。