趋近智
“量化等方法侧重于通过改变模型权重的精度来减少内存占用,而剪枝则采取另一种方法:它实际移除那些被认为不那么重要的参数,旨在创建更小且可能更快的模型。在投入大量资源微调大型语言模型后,你可能会发现,尽管得到的模型是专门化的,但对于你的部署限制来说仍然过大或过慢。剪枝提供了一种在微调后精简这些模型的途径,使它们在应用中更具实用性。”
剪枝的核心思想是,在一个大型、通常参数过多的神经网络中,并非所有参数都对性能有相同的作用。通过找出并去除冗余或不那么显著的参数,我们可以减小模型的大小和计算需求,理想情况下对目标任务的准确性影响很小。
剪枝技术主要分为两大类,它们在参数移除方式以及对硬件加速的影响上差异显著:
这是根据某些标准(通常是权重大小)移除模型层中单个权重的过程。其基本假设是,绝对值较小的权重对网络输出的贡献较小,可以在不导致显著性能下降的情况下被移除。
与移除单个权重不同,结构化剪枝以规则模式移除整组参数。这可能涉及移除:
神经元:权重矩阵中对应于特定神经元的整行/整列。
注意力头:Transformer层中完整的注意力头。
滤波器/通道:卷积层中的整个滤波器(在纯Transformer LLM中较不常见,但在多模态背景下有关联)或线性层中的等效结构。
层:整个层(一种非常粗粒度的结构化剪枝形式)。
方法:计算这些结构的重要性得分(例如,基于结构内权重的L2范数、平均激活幅度或梯度信息)。重要性得分最低的结构被完全移除。
优点:生成的模型架构保持密集(或变成更小的密集架构)。这意味着剪枝后的模型通常可以在标准硬件上高效执行,无需专用稀疏计算库,从而更可预测地减少内存使用和延迟。
缺点:移除整个结构对模型学到的表示可能比移除单个权重造成更大的干扰。因此,与非结构化剪枝相比,在移除相同数量参数的情况下,结构化剪枝可能导致准确性下降幅度更大,可能需要更广泛的再训练。
非结构化幅度剪枝(单个低幅度权重被置零)与结构化神经元剪枝(代表一个神经元连接的整列被移除)的比较。灰色单元格表示原始权重,红色表示被剪枝的元素。
如何以及何时进行剪枝很要紧:
为了确定剪枝什么,使用了各种重要性标准:
在对微调后的LLM应用剪枝时,请考虑以下几点:
torch.nn.utils.prune),但要将它们有效地应用于复杂的Transformer架构,特别是结构化剪枝,可能需要自定义实现或研究社区中出现的专用库(例如,专注于Transformer压缩的库)。务必查阅你所选框架及其可用扩展的文档和功能。以下是使用PyTorch类似语法的非结构化幅度剪枝示例:
import torch
import torch.nn.utils.prune as prune
# 假设 'model' 是你微调后的 Transformer 模型
# 假设 'module' 是一个特定层,例如 model.encoder.layer[0].attention.self.query
# 1. 定义剪枝方法(幅度剪枝)
pruning_method = prune.L1Unstructured # 或 prune.RandomUnstructured 等
# 2. 定义要剪枝的参数和稀疏度
parameters_to_prune = [(module, 'weight')]
sparsity_level = 0.5 # 目标稀疏度 50%
# 3. 应用剪枝(添加前向钩子和掩码参数)
prune.global_unstructured(
parameters_to_prune,
pruning_method=pruning_method,
amount=sparsity_level,
)
# 4. 使剪枝永久化(移除钩子,直接将权重置零)
# 在保存或部署剪枝后的模型之前,此步骤很重要
prune.remove(module, 'weight')
# 5. (推荐)对剪枝后的模型进行短暂微调
# optimizer = torch.optim.AdamW(model.parameters(), lr=1e-5)
# train_model(model, dataloader, optimizer, num_epochs=1) # 短期再训练阶段
应用全局非结构化幅度剪枝到层权重矩阵的PyTorch代码。需要后续的微调步骤以获得最佳结果。
剪枝是一种重要技术,用于减小微调后LLM的大小并可能降低推理延迟。通过移除不那么关键的参数,无论是单个(非结构化)还是成组(结构化),你可以创建更易于部署的模型。结构化剪枝通常在常规硬件上提供更实用的加速,而非结构化剪枝可能实现更高的稀疏度。方法选择、稀疏度目标以及再训练的必要性在很大程度上取决于具体模型、任务和部署环境。评估模型压缩、推理速度和任务性能之间的权衡,对于在微调后成功应用剪枝非常重要。
简洁的语法。内置调试功能。从第一天起就可投入生产。
为 ApX 背后的 AI 系统而构建
这部分内容有帮助吗?
torch.nn.utils.prune模块,提供了应用各种剪枝功能。© 2026 ApX Machine Learning用心打造