概述
层删除是最激进的版本,删除完整的变压器块以缩小深度。
深入探讨
非结构化修剪将各个权重归零,但充满分散零的矩阵仍然在 GPU 上全速运行,因为硬件不会跳过它们。相反,结构化剪枝会删除相干块、整个注意力头、前馈神经元、通道或整个层,这实际上会缩小张量并产生真正的加速,而无需特殊的稀疏内核。层丢弃将这一点推向了最远:像 LayerDrop 这样的研究和后来的深度修剪工作表明,许多变压器层,特别是在中层和上层堆栈中,是令人惊讶的冗余。您通常可以删除 20% 到 40% 的图层,并通过短轮微调或知识提炼来恢复大部分丢失的精度。重要性是通过层的输入和输出之间的角距离(它改变表示的程度)等指标来判断的。
现实世界的实施
通过修剪图层,然后微调以恢复准确性,从大型教师那里提炼出小型、快速的学生模型
删除翻译模型中的冗余注意力头以减少边缘设备上的延迟
放弃 LLM 的上部变压器模块以达到严格的移动推理延迟目标
通过修剪到不同的深度和宽度,从一个预训练的检查点创建一系列模型大小
结构化剪枝和层丢弃的未来
结构化和深度剪枝正在成为从一个大型预训练网络生成高效模型变体的标准,如宽度和深度剪枝以及从大模型派生小模型的蒸馏管道中所见。预计与量化和路由、针对特定加速器的硬件感知修剪以及决定每个部署针对给定延迟预算削减多少深度或宽度的自动搜索进行更紧密的集成。
付诸实践
为什么这很重要
- 成本与预算. 多年来,架构决策决定着性能和运营成本。
- 更清晰的判决. 技术教育帮助团队选择正确的堆栈,而不仅仅是最新的堆栈。
- 质量控制. 更好的工程选择可以减少生产中的可靠性事故。
留意
- 优化一项基准测试可以隐藏更广泛的系统弱点。
- 基础设施和维护成本常常被低估。
- 随着系统变得更加复杂,安全性和可观察性差距可能会扩大。
后续步骤
- 在实施之前定义延迟、质量和成本目标。
- 在实际负载和数据条件下进行基准测试。
- 仪器监控错误、漂移和用户影响。
- 在扩展之前准备回滚和事件响应路径。
不断探索
常见问题
什么是结构化剪枝和层丢弃?
结构化剪枝删除了神经网络的整个组件,例如注意力头、神经元或整个层,因此更精简的模型在普通硬件上运行得更快。层删除是最激进的版本,删除完整的变压器块以缩小深度。
为什么结构化剪枝能够产生真正的加速,而非结构化剪枝却常常不能?
删除整个头、神经元或层会缩小张量维度,因此标准密集硬件运行的工作量较少,而仍然计算分散的零。
在 Transformer 中什么是“层丢弃”?
层丢弃会删除整个变压器块,从而削减网络的深度,这是结构化修剪的最激进的形式。
哪个信号通常表明变压器层可以安全掉落?
如果某个层几乎不改变残差流(输入输出相似度高),则它贡献很小,并且是删除的候选层。
结构化剪枝后通常什么步骤可以恢复准确性?
简短的微调或蒸馏可以让剩余的重量重新吸收修剪单元的功能并恢复大部分损失的质量。
修剪时个人注意力头通常如何排名?
头部的重要性是通过它被掩盖时损失增加的程度来估计的;首先修剪低敏感度的头部。