1 模型压缩进阶要回答什么
模型压缩把已经具备任务能力的模型变得更省资源,但“文件变小”只是起点。实际要回答的是:在指定设备、输入长度和并发量下,模型能否保持需要的判断能力,并降低延迟、内存或维护成本。把参数量削减 50%,不意味着响应时间也缩短 50%;读取数据、预处理、算子执行和结果解析都可能成为新的瓶颈。压缩目标应写成可测条件,例如在固定硬件上让图像分类服务的 P95 延迟不超过 40 毫秒,同时使少数类别的召回率下降不超过 1 个百分点。
本课围绕真实任务讨论压缩。主线使用公开的 Banking77 英文银行咨询短文本数据,输入是用户询问,输出是 77 个意图标签;例如识别银行卡被冻结、转账未到账等咨询。模型可先把文本转成向量,再经过分类层输出类别分数。另用 CIFAR-10 图像分类解释通道剪枝,用公开流失预测表格说明数据划分。文本长度、图像分辨率、表格缺失值都要进入实验记录,因为它们会改变算力消耗和错误分布。文中所有实验数值均为教学假设,不代表这些数据集的官方成绩。
为 Banking77 建立基线时,保留官方测试集,从训练部分按类别固定抽出 15% 作为验证集,其余用于训练。先查找完全重复和近似重复文本,避免同样的问法跨集合泄漏;若发现重复,按分组规则重新划分并记录,不能为提高成绩随意删除测试错误。训练集用于更新参数,验证集用于挑选压缩配置和阈值,测试集只在方案冻结后验收。需要频繁比较候选时,另外保留开发用关键集,避免把最终测试集变成隐形训练材料。
基线至少记录宏平均 F1、各类召回率、峰值内存、模型文件大小与 P50、P95 延迟。精确率回答“预测为某类的样本里有多少正确”,召回率回答“真实属于某类的样本里找回多少”,F1 综合这 2 者。宏平均 F1 先逐类计算再平均,能让小类别得到同等关注。若任务是二分类流失预测,可同时报告 PR 曲线、正类召回率和 ROC AUC;AUC 描述排序能力,不能替代实际阈值下的精确率。压缩验收必须同时看到任务指标和资源指标。
所谓“进阶”,是把问题从选择压缩算法推进到定义可接受的损失。学生模型指压缩后要部署的模型,教师模型指提供参考预测的较强模型;教师也会犯错。关键集则是对业务后果敏感、需要单独观察的样本集合。银行咨询中的账户被盗、卡片丢失、紧急冻结请求,应单独查看漏判。公开数据未必覆盖所有风险,可补充人工审核的任务内样本,但要标明来源与规模,不能把补充集的成绩冒充公开基准成绩。

2 结构化剪枝与低秩
剪枝是删除部分参数或计算结构。把单个权重置零称为非结构化剪枝,它能制造很多零,却不一定让普通推理程序更快:程序仍可能执行原来的稠密矩阵运算。结构化剪枝删除完整通道、神经元组或其他受支持的结构,使张量维度真正缩小。对于 CIFAR-10 分类模型,某卷积层原有 64 个输出通道,删除其中 16 个后剩下 48 个,后续层对应的输入通道也要一起调整,否则形状无法连接。
可以先按通道权重大小或验证数据上的影响给候选结构排序,再小幅删除,随后微调恢复能力。排序只是启发式证据:权重小的通道也可能对罕见类别很重要,单独看似可删的通道同时删除后可能造成明显损失。因此每轮都要把资源收益与任务损失放在一起检查。初学实验可先尝试删除 10% 或 20% 的候选通道,观察变化,再决定是否扩大范围;这些比例不是保证安全的通用推荐值。
低秩分解则用较小的矩阵组合近似较大的矩阵。假设全连接层的权重矩阵是 768×768,原有 589824 个权重;把它近似为 768×192 与 192×768 的乘积,共有 294912 个权重,不计偏置时减少 50%。这里的 192 称为选定的秩。读者只需理解:中间表示被限制在较窄空间,保存和计算可能更省,但无法保留全部变化方向。如何求解分解以及不同层的秩分配,留到后续专题。
减少理论乘法次数仍需实测。原来的 1 次矩阵运算变成 2 次后,会增加中间张量与调用开销;在某些批大小下,低秩层反而更慢。结构化剪枝也可能产生硬件不擅长处理的形状。比较时要固定推理运行时、线程数、批大小、输入长度与精度,先预热,再重复测量,记录延迟分布。不要拿桌面电脑上的压缩模型和另一台设备上的原模型比较后宣称提速。
剪枝和低秩改变结构,量化则降低权重或激活的数值精度,例如从 32 位浮点表示转换为 8 位整数表示。本课只把量化当作会涉及校准的邻近方法,不展开数值格式和底层内核。可以分别做剪枝、低秩或量化实验,等单项证据清楚再尝试组合;同时改结构、训练数据和精度,会让失败时难以确定原因。无论采用哪种方式,必须确认部署程序真的加载了压缩后的结构和权重。

3 蒸馏数据与校准
知识蒸馏让学生学习教师输出中的信息。普通训练只告诉模型正确类别,蒸馏还可以告诉它哪些错误类别更接近。例如“转账已经发出但尚未到达”可能与转账状态、到账时间都有关;教师给出的类别分数能提供额外线索。训练学生时常把真实标签损失与教师分布损失结合,验证集用于选择它们的权重。温度等参数会影响分布平滑程度,本课先把它们视为固定并记录的训练配置,不深入推导。
教师输出不能当作新的事实。若教师把账户被盗咨询误判为普通登录问题,学生可能学会相同错误,甚至因容量更小而扩大错误范围。蒸馏数据需要真实标签与抽样复核,关键类别尤其如此。无标签数据可提供更多输入表达,但其来源、许可、隐私处理与领域匹配都要明确。不能用测试样本生成教师答案再训练学生,即使没有直接使用测试标签,这也改变了评估条件,容易高估泛化能力。
蒸馏数据应覆盖部署输入的变化。Banking77 的公开文本偏向特定表达方式,实际咨询可能有拼写错误、缩写、较长叙述或混合语言。可在训练范围内加入合理扰动,并保留独立的扰动验证切片;不能仅把同义句数量堆高,让最常见类别占满训练预算。对每类样本数、长度区间、教师错误率和学生错误率作记录,能看出学生是在学习任务边界,还是记住高频句式。超出已有语言能力的输入应进入拒识或转人工设计,而不能靠压缩实验宣称已经解决。
“校准”需要区分 2 种含义。量化校准使用有代表性的输入,估计激活范围等数值信息,通常不更新任务权重;若选取的文本全是很短、很容易的样本,长文本的激活范围可能覆盖不足。置信度校准则检查模型说出的概率是否与实际正确率相符,例如标为 0.8 置信度的预测是否大致有 80% 正确。它可帮助设置转人工阈值,但无法凭空修复错误分类。报告里应写清使用的是哪种校准。
校准数据必须独立于最终测试,且采样规则要可重复。可从训练部分预留量化校准子集,覆盖各类别与长度区间;用验证部分的独立子集做置信度校准或阈值选择,样本不足时应明确取舍。量化范围的选择、温度拟合和拒识阈值都不能在最终测试上反复调到满意。若部署后来出现新的语言、输入长度或缺失值模式,应先检查分布变化,再决定补充校准、重新微调还是恢复原模型。
4 动手:验收一次压缩后关键集
动手的目标是完成可复核的验收记录。先为 Banking77 固定数据划分、类别映射与文本预处理,训练并保存基线。把分词器版本、最大输入长度、随机种子和训练配置写入实验清单。若只保存权重而遗漏类别顺序,程序可能把正确的类别编号解释成另一个意图;若压缩版把最大长度从 128 改为 64,长文本性能下降就不能全部归因于参数压缩。比较前先保证输入和输出的含义一致。
准备 3 类开发切片:普通咨询、易混淆意图、风险敏感意图,并给每条样本保存稳定编号。切片可重叠,例如“卡片丢失后出现陌生消费”既属于风险敏感输入,也涉及多个意图。标注规则要说明采用哪个主标签,以及哪些输出需要转人工。为检查截断影响,再按文本长度分组;为检查鲁棒性,可另建含拼写扰动的小集。真实标签有歧义的样本先复核,不能把所有分歧都算成模型压缩错误。
随后只改变 1 个主要因素,例如用教师蒸馏训练更小的学生,其余评估配置保持固定。在验证集上选择候选,锁定后对基线与候选执行同批测试,保存逐样本预测、置信度与错误类别。除整体宏平均 F1 外,输出风险敏感切片的召回率、各类精确率、转人工比例,以及基线正确而候选错误的样本清单。最后这份清单能够揭示新增损害,避免被“候选修复了别处的错误”掩盖。
假设基线宏平均 F1 为 0.910,候选为 0.905,下降 0.5 个百分点;模型文件从 120 MB 降到 60 MB,P95 延迟从 50 毫秒降到 34 毫秒。整体看起来可接受,但账户风险切片的召回率从 0.960 降到 0.900,就应触发门禁。若该切片只有 50 条,漏掉 2 条就会改变 4 个百分点,因此必须同时给出命中数、总数和不确定性。扩大独立样本或复核错误能补充证据,不能用多跑几次相同样本冒充新增证据。
资源验收也要可复现。在同设备、同运行时、同批大小下先预热,再对固定请求序列重复测量;峰值内存包含加载、预处理和推理阶段,文件大小则单独列出。统计真实长度分布下的延迟,也报告长文本切片。记录是否包含分词和结果解析,避免用纯模型耗时代表端到端响应时间。最后给出“通过”“未通过”或“证据不足”的结论;样本太少、硬件不一致或关键类别未覆盖时,应选择证据不足。

5 压缩率与可维护取舍
压缩率首先要写清定义。若原模型文件为 120 MB,候选为 60 MB,可说文件缩小 50%,也可说大小比为 2∶1;不要只写“压缩率 2”,让读者猜分母。参数数量、磁盘文件、加载后内存、峰值内存是不同指标。低精度权重可能减少文件,却因运行时临时转换而未降低峰值内存;结构较小的模型也可能携带额外词表和配置文件。发布包应按完整可运行产物计量。
选择候选时,把大小、延迟、质量与维护负担放到同张表中。候选甲文件 60 MB、P95 为 34 毫秒;候选乙文件 45 MB、P95 为 38 毫秒,且需要特殊运行时。如果目标设备只有 50 MB 的模型存储预算,乙可能有价值;若主要目标是响应速度且甲满足容量约束,甲可能更合适。没有脱离约束的最优压缩比例。质量门禁必须先通过,之后才讨论在合格候选中怎样节省资源。
维护成本包括重新训练时间、校准数据准备、部署支持与回滚难度。每次类别调整都要重跑复杂剪枝流程,会增加维护工作;蒸馏则依赖教师版本及生成软标签的流程。只保留最终权重,未来就很难解释为什么某类突然退化。应保存基线和候选的版本关系、压缩配置、数据清单与评估报告。若压缩结果需要特定算子支持,还应记录运行时与目标设备的兼容范围,避免模型在开发机通过、在生产设备无法加载。
压缩也会改变系统瓶颈。模型推理从 30 毫秒变为 15 毫秒,但预处理仍占 20 毫秒,端到端时间便从 50 毫秒变为 35 毫秒,而不是减半。并发增加后,排队时间可能超过推理时间;模型变小带来的内存余量也可能允许更多并发。由此产生的服务调优属于 A49,本课先要求测量边界清楚。模型实验中的收益不能直接换算成线上容量承诺,必须在对应服务条件下重新测量。
下方滑块用教学数据演示压缩力度增加后,大小、延迟和关键集表现可能不一致。它不负责预测真实模型的成绩,也没有“拉到某个比例必然安全”的结论。观察重点是:当关键集越过门禁时,即使整体 F1 仍然接近基线,该候选也不再进入合格集合。真正做决策时,应把滑块上的演示点替换为已完成实验的候选记录。
6 常见坑:只看平均分忽视安全集
安全集是围绕高后果错误整理的关键评估集,需有明确标签、来源与使用边界。对于银行咨询分类,它可以包含卡片被盗、账户异常和冻结请求,检查是否被错误路由到普通咨询。安全集并不等于模型已经具备完整金融安全能力,也不代表可以直接接入真实账户操作。它的作用是把特定风险变成可测条件,让上线讨论能指向具体错误,而不是只有“整体效果还行”的印象。
类别不平衡会让平均指标显得乐观。假设流失预测数据中只有 5% 用户最终流失,始终预测“不流失”也有 95% 准确率,却完全找不到目标用户。应查看正类召回率、精确率与 PR 曲线,并说明误报和漏报的代价。压缩后 ROC AUC 接近基线,也可能在当前业务阈值下漏掉更多正例。阈值必须在验证数据上确定,测试时同时报告阈值与混淆矩阵,不能只报最有利的单项数字。
数据泄漏也会伪装成“压缩几乎无损”。表格流失预测若把用户退订后的状态、最终账单或人工处理结果作为特征,模型其实在读取答案线索。应只使用预测时刻可获得的特征,例如此前 30 天登录次数、历史使用时长、当前套餐和预测前已存在的客服记录。对同用户多条记录按用户分组,对未来预测按时间切分,并让验证、测试发生在训练之后;编码、缺失值填补和标准化只在训练部分拟合。
分布偏移则可能在没有代码错误时导致退化。CIFAR-10 的小图像实验不能证明模型能处理夜间摄像头画面;公开英文咨询也不能证明能处理中文混合缩写。压缩可能优先保留常见模式,削弱对边缘输入的区分能力。应把部署中可预见的光照、语言、长度与设备来源作为切片,并说明哪些尚无证据。遇到新分布时先增加观察和回退措施,不要仅提高置信度阈值就宣称风险已经消除。
安全集长期反复使用,也会被间接“记住”。研究者不断对它挑模型、改参数后,即使没有直接训练,成绩也可能过于乐观。可把它分成开发关键集与锁定验收集,前者用于定位,后者在候选冻结后使用;样本数量和维护成本不足以支持分离时,就坦诚报告该限制。新增线上失败案例要去重、脱敏、审核再加入后续回归集,并保留历史版本,防止通过替换难例人为抬高结果。

7 案例:压缩破坏工具调用格式
短文本分类可以只输出类别,也可以由小型语言模型输出工具调用。本节构造任务内的离线案例:模型把咨询转换为只读的支持工单路由调用,例如工具名为 route_support,参数包含 intent 与 priority。工具仅返回模拟路由结果。格式协议要求输出 JSON 对象,intent 必须来自固定枚举,priority 只能为 normal 或 urgent,且不得额外添加字段。公开数据只提供意图标签,优先级与工具协议属于另外定义并审核的教学规则。
压缩前,教师可能输出合法对象;蒸馏后的学生却在对象前添加解释文字,把 urgent 写成 high,或把工具名改成 route_help。这些输出在自然语言上看似合理,却无法被调用程序接受。若评测仅提取文本中的意图关键词,模型仍可能得到较高分类分数。真实执行链却会解析失败、拒绝未知枚举或进入默认分支。因此格式有效率、参数符合率与任务正确率必须分别测量,不能把它们合并为模糊的“回答质量”。
假设基线在 200 条离线调用中有 198 条通过完整格式与字段检查,压缩版只有 184 条;其中部分失败样本的意图判断其实正确。应保留原始输出,先用 JSON 解析器检查语法,再用固定协议检查工具名、字段类型、必填项与枚举,最后核对意图及优先级。完整格式通过率的分母是全部 200 条;在合法输出内计算语义正确率时,需同时给出该子集大小,避免排除失败输出后夸大总体可用性。
排查时先确认提示词、分词器、停止条件和最大输出长度一致。若输出总在结尾被截断,先修复生成上限;若只有压缩候选频繁换字段名,再检查蒸馏数据是否包含解释性回答、旧版协议或教师的非法输出。协议版本混杂会让学生学到不一致格式。修复可以包括清理并补充训练样本、降低压缩力度,或使用运行时支持的约束解码;约束解码能限制部分格式错误,仍需验证字段语义是否正确。
工具接收层应把不合法调用明确拒绝并记录,不得静默猜测字段后继续执行。失败可转人工或返回可控错误,重试次数必须有限,且统计重试后的总延迟。此案例中的风险来自模型输出与程序协议的连接处,不是压缩必然导致某种格式问题。只有在相同生成配置、同批样本和独立验收下比较,才能判断压缩是否引入了新增失败,并确定修复后是否足以恢复发布。
8 把压缩门禁写进发布方案
发布门禁应在看到候选成绩前确定。示例条件可以是:宏平均 F1 相对基线下降不超过 1 个百分点;风险切片召回率下降不超过 1 个百分点且不低于事先设定的绝对下限;工具协议验收集不出现非法输出;目标设备上 P95 延迟不超过 40 毫秒,峰值内存不超过 300 MB。这些是教学示例,真实阈值必须来自任务后果、样本规模和设备预算。相对门槛与绝对底线同时存在,能避免较弱基线把要求一起拉低。
对“不得出现非法输出”要写清证据范围:它表示本次固定验收样本中观察到 0 次,不保证未来永远为 0。样本稀少的类别即使全对,也不足以证明错误率很低。报告应列出各切片样本数、错误数、与基线的配对差异,必要时估计不确定区间;结果靠近门槛且不确定性较大时,补充独立样本或保留更稳妥的候选。不要通过四舍五入把越界数字显示成刚好达标。
每次发布都应能回答“部署的究竟是哪份模型”。产物清单需要关联权重校验值、结构配置、分词器、类别映射、工具协议、运行时以及校准资料版本。实验报告还应包含硬件条件、预热方法、测量边界与数据划分标识。这样线上发生错误时,才能复现同样输入,而不是在不同程序和不同模型之间来回猜测。无需一开始建设复杂平台,结构清楚的清单和固定评估入口已能避免很多混乱。
离线通过后,以受控流量观察线上表现。影子比较可以让候选只产生预测而不决定实际路由,但仍需符合数据使用和资源限制。实际灰度则应限制影响范围,监控解析失败率、转人工率、端到端延迟,以及有可靠反馈后才能计算的任务指标。没有即时真实标签时,不能把置信度平均值当成准确率。若发生新增高后果错误或格式失败越界,应恢复已验证版本,同时保存失败输入的合规记录供复核。
回滚也要覆盖完整产物。只恢复权重却保留新的类别映射或工具协议,可能造成更隐蔽的错误;恢复后还应执行固定冒烟样本,检查加载、预测与解析链路。失败候选可以继续作为研究记录,但不能凭“延迟节省很多”绕过关键集门禁。发布方案最后要有明确负责人、观察窗口与处置动作,让资源收益和质量责任都有承接,压缩实验才能成为可维护的交付过程。
9 从模型压缩走向推理服务平台(A49)
压缩完成后,模型仍只是服务中的组成部分。请求进入系统后,需要经过输入校验、预处理、排队、推理、结果解析与返回。小模型降低了其中部分成本,无法消除排队拥堵、超长输入或解析重试。A49 将把这些环节连接起来,讨论服务如何在不同负载下维持延迟和可用性。本课移交的重点是可信的模型边界:允许的输入范围、质量门禁、资源实测和失败处置。
例如,离线以批大小 1 测得的 34 毫秒 P95 延迟,不能直接当作多用户并发时的承诺。服务可能把多个请求合批以提高吞吐,也可能因等待凑批增加单请求延迟;多个模型版本同时驻留还会改变内存压力。压缩后释放的内存究竟用来增加并发、保留回退模型还是降低设备成本,需要服务层结合负载决定。先记录模型单独运行的条件,再在服务层验证,才能知道收益来自哪里。
模型压缩记录也应成为平台可读取的发布资料。模型版本关联输入协议、标签顺序、最大长度、支持设备、评估结果和回退目标,使不同候选能在同等条件下比较。资源测量要带运行时与硬件标识,质量测量要带数据版本;把它们只写成孤立的“快 30%”或“F1 为 0.90”,后续平台便难以使用。平台不应替研究者自动解释缺失的前提。
最后保留任务视角:图像模型关注不同类别和成像条件,流失模型关注时间泄漏、正类召回与阈值,咨询模型关注意图混淆、拒识和工具协议。它们共享发布流程,却有不同关键集。进入 A49 前,应能拿出可加载产物、可重复评估入口、逐样本错误证据与明确回退规则。后续服务平台会放大这些规则的执行效率,也会放大没有被发现的模型问题,因此压缩阶段的证据不能省略。
放进方案里
在方案中先写预测任务与使用边界:本次以 Banking77 公开短文本意图分类为基准,保留官方测试集,从训练部分划出 15% 验证数据,固定去重规则、类别映射、分词器和最大长度。部署咨询与公开数据存在表达差异,另建经审核的风险切片与长文本切片,明确其来源和规模。测试资料不参与蒸馏、量化校准或阈值选择,所有教学假设与真实测量分开标注。
写明基线、候选和资源约束:候选通过蒸馏或结构调整降低文件大小,在指定设备、运行时、批大小和输入分布下测量端到端 P95 延迟与峰值内存。宏平均 F1 的允许下降、风险切片召回率的相对损失与绝对下限均在试验前确定。每项结果保留样本数、错误数和逐样本差异;证据不足时追加独立评估,不以较好的平均分替代关键集通过。
若输出连接工具,再列出工具名、字段、类型和枚举协议,分别验收解析成功、字段合法与语义正确。非法输出进入拒绝或转人工流程,重试设定上限并计入总延迟。格式通过率的分母包含全部请求,任何子集指标都注明范围,避免把失败样本从报告中消失。
发布包关联权重、结构、预处理、协议和运行时版本,附数据划分标识、校准来源、评估报告与回退产物。离线通过后开展受控观察,负责人按预设窗口检查格式失败、转人工和服务延迟,并在可靠标签到达后复核质量。关键错误越界时恢复完整旧版本,执行冒烟检查并归档失败证据。把候选结论连同兼容范围交给 A49,使服务平台能执行已经定义清楚的门禁。
10 小结:下一步推理服务平台(A49)
模型压缩的交付物包括更小的模型,也包括证明它适用的证据。结构化剪枝与低秩改变计算结构,蒸馏依赖数据与教师质量,校准需要代表性输入;文件变小、延迟下降和关键能力保留必须分别验收。
自测时尝试解释:为什么参数减少 50% 未必提速 50%?为什么整体 F1 接近基线仍可能禁止发布?为什么工具意图正确而 JSON 非法也算调用失败?如果能给出对应的测量条件、关键切片与失败处置,就已准备好进入 A49,把合格模型接入可观察、可回退的推理服务。