LLM-Pruner: On the Structural Pruning of Large Language Models 解读
一、论文基本信息论文题目LLM-Pruner: On the Structural Pruning of Large Language Models作者Xinyin Ma、Gongfan Fang、Xinchao Wang发表会议NeurIPS 2023官方代码horseee/LLM-Pruner。官方仓库标注这是 NeurIPS 2023 论文代码并说明方法目标是对 LLM 做 task-agnostic compression仓库也给出了 3 个阶段Discovery Stage、Estimation Stage、Recover Stage。(GitHub)一句话先概括LLM-Pruner 是一种面向大语言模型的结构化剪枝方法。它不是像 SparseGPT / Wanda 那样把单个权重置零而是删除一组相互依赖的结构单元例如 FFN hidden neurons、attention 相关通道或更大的结构组并通过 LoRA post-training 恢复性能。二、它和 SparseGPT / Wanda 最大区别是什么前面你问过 SparseGPT 和 Wanda它们主要属于非结构化权重剪枝。也就是把权重矩阵里的某些单个标量权重变成 0。LLM-Pruner 不一样。它的核心是结构化剪枝。它会真正改变模型结构删除某些神经元、通道、注意力相关维度或 layer/block 级结构。官方仓库也把 pruning strategy 分为block-wise、channel-wise、layer-wise等类型。(GitHub)所以分类上可以这样写方法剪枝对象是否改变模型结构是否需要恢复训练SparseGPT单个权重否否Wanda单个权重否否LLM-Pruner结构组 / 通道 / block / layer是通常需要 LoRA post-training因此LLM-Pruner 是结构化剪枝不是非结构化剪枝。三、这篇论文要解决什么问题大语言模型很大部署、推理和再训练成本都很高。传统剪枝如果要依赖完整原始训练语料或大规模 retraining对 LLM 来说非常困难。论文的目标是两个第一task-agnostic compression。压缩后的 LLM 不能只适配某一个分类任务而应尽量保留原模型作为多任务求解器的能力。论文摘要也明确说它希望在 task-agnostic 方式下压缩 LLM同时保留多任务求解和语言生成能力。(arXiv)第二减少对原始训练语料的依赖。官方仓库说明LLM-Pruner 只用50K Alpaca samples做 post-training并强调剪枝约 3 分钟、post-training 约 3 小时这个高效流程。(GitHub)所以它想解决的是能不能不用原始海量预训练语料也不用完整重训就把 LLM 的结构真正变小四、核心思想LLM-Pruner 的核心思想是先自动发现 LLM 中哪些结构是相互耦合、必须一起剪的然后用梯度信息估计每个结构组的重要性最后删除不重要结构组并用 LoRA 做少量恢复训练。它的流程不是简单“看哪个 neuron 小就删掉”。因为 LLM 中的结构存在很多依赖关系删 FFN 中间维度时up/gate/down projection 的对应行列必须一起处理。删 attention head 或 attention channel 时Q/K/V/O projection 之间也存在形状依赖。residual connection 要求主干 hidden dimension 对齐。某些结构不能单独删否则张量维度会不匹配。所以 LLM-Pruner 的重点是先找到“最小可删除结构组”再进行重要性排序。官方仓库把第一阶段称为Discovery Stage发现 LLM 中复杂的 inter-dependency并找到最小可删除单元 group。(GitHub)五、为什么需要 Dependency Graph结构化剪枝最麻烦的地方不是“删哪个”而是删了以后模型还能不能正常 forward。在 CNN 里剪一个 channel 通常要同步修改后续卷积层输入通道。Transformer / LLM 更复杂因为同一个 hidden dimension 或 FFN neuron 会经过多个矩阵、残差、reshape、concat、attention head 等操作。LLM-Pruner 使用类似 DepGraph 的思想来构建依赖关系。论文摘要中也提到它会逐个检查模型中的 neuron把它们作为 trigger 来识别 dependency groups从而构建 LLM 的 dependency graph。(arXiv)可以理解为Dependency Graph 告诉你如果删 A哪些 B、C、D 必须一起删。例如在 LLaMA 的 MLP 里gate_proj 的某个 hidden neuron、up_proj 的对应 hidden neuron、down_proj 的对应输入通道是一个耦合结构组。如果只删其中一个矩阵乘法维度就对不上。所以 LLM-Pruner 剪的不是孤立参数而是dependency group。六、Estimation Stage怎么判断结构组重要性发现可剪结构组之后下一步是判断哪个 group 不重要可以剪LLM-Pruner 使用基于梯度的 Taylor importance criterion。官方仓库里--pruner_type支持l1、l2、random、taylor并说明 Taylor pruner 可选择vectorize、param_second、param_first、param_mix默认param_mix会结合近似二阶 Hessian 和一阶梯度。(GitHub)直观理解如果删除某个结构组后loss 变化小说明这个结构组不重要。Taylor 方法就是用当前参数和梯度近似估计“删掉该结构会让 loss 变多少”。和 Wanda 相比Wanda 用权重 × 激活范数不需要反向梯度。LLM-Pruner 用梯度/Taylor 信息需要少量数据做前后向估计。和 SparseGPT 相比SparseGPT 是权重级二阶重构。LLM-Pruner 是结构组级重要性估计。七、Recover Stage为什么需要 LoRA 恢复结构化剪枝比非结构化剪枝更激进。非结构化剪枝只是把权重置零模型整体结构还在而 LLM-Pruner 会真正删除神经元、通道或 block模型容量明显减少。因此剪枝后通常需要恢复训练。LLM-Pruner 采用LoRA post-training来恢复性能。官方仓库示例中使用 Alpaca-cleaned 50K 数据、LoRA rank 8、训练 2 个 epoch并说明这是 Recover Stage。(GitHub)这说明 LLM-Pruner 不是完全 training-free。它的完整流程是结构剪枝很快。然后用少量指令数据 LoRA 做轻量恢复。这样做的好处是不用全参数微调。不用原始预训练语料。恢复成本比完整重训低很多。八、LLM-Pruner 剪的具体是什么它可以剪多种结构。根据官方代码说明pruning strategy 包括block-wise pruning。channel-wise pruning。layer-wise pruning。(GitHub)从原论文思想看重点是 structural pruning也就是删除耦合结构组。常见对象包括FFN intermediate neurons。attention projection 中的相关 channel。某些 block / layer 级结构。但它不是单纯 head pruning也不是单纯 FFN pruning而是通过 dependency group 自动确定可删除单元。所以它的剪枝粒度比 Wanda / SparseGPT 更粗但比直接删整层更细。九、LLM-Pruner 的三阶段流程1. Discovery Stage目标发现结构依赖。它会分析 LLM 计算图找到哪些参数、通道、neuron 必须一起删除构成最小可删除 group。官方仓库明确说这一步是发现 complicated inter-dependency 并找到 minimally-removable unit。(GitHub)2. Estimation Stage目标估计每个 group 的重要性。用 L1、L2、random 或 Taylor criterion 评估 group 对模型性能的贡献。Taylor 版本利用梯度和近似二阶信息是论文更核心的选择。(GitHub)3. Recover Stage目标恢复剪枝后性能。用 LoRA 和少量数据做 post-training。官方仓库说明使用 50K Alpaca samples并给出 LoRA post-training 命令。(GitHub)十、它为什么适合 LLMLLM-Pruner 适合 LLM 的原因有三个。第一它是结构化剪枝能真正减少模型尺寸。SparseGPT / Wanda 只是产生稀疏矩阵普通硬件不一定能加速。LLM-Pruner 删除结构后权重矩阵维度会变小理论上更容易在普通 dense kernel 上受益。第二它是 task-agnostic。LLM 不是单一任务模型不能只为了某个 benchmark 剪。论文明确强调压缩后模型应保留原始 LLM 的多任务求解能力。(arXiv)第三它不依赖原始训练语料。官方仓库强调只用 50K Alpaca samples 做 post-training而不是重新使用海量预训练语料。(GitHub)十一、实验模型论文在多个 LLM 上验证包括LLaMA。Vicuna。ChatGLM。arXiv 摘要明确写到作者在这三个 LLM 上验证 LLM-Pruner并展示压缩模型在 zero-shot classification 和 generation 中仍有较好的能力。(arXiv)官方仓库后续还支持了更多模型例如 Llama-2、Llama-3/3.1、BLOOM、Baichuan、TinyLlama 等这些属于仓库后续实现扩展不完全等同于原论文实验范围。(GitHub)十二、实验结果怎么理解LLM-Pruner 的实验重点不是追求“剪完完全不掉 perplexity”而是证明结构化剪枝后的 LLM 仍然可以保留较好的 zero-shot 和生成能力。这和 SparseGPT/Wanda 的实验重点不同。SparseGPT/Wanda 通常关注perplexity 在 50% unstructured sparsity 下掉多少。LLM-Pruner 更关注剪掉结构后模型是否仍能完成多任务推理和自然语言生成。官方仓库也说明剪枝和 post-training 之后会使用 lm-evaluation-harness 做评估。(GitHub)仓库更新中还给出一个后续结果通过较大规模语料 fine-tuningLLaMA-5.4B 平均准确率达到 62.36%接近原始 LLaMA-7B 的 63.25%。这个结果是仓库后续更新不一定是原始论文主表中的核心设置。(GitHub)十三、和 SparseGPT 的区别SparseGPT非结构化剪枝。剪单个权重。不改变模型 hidden size / layer / head。不需要恢复训练。真实加速依赖稀疏 kernel。LLM-Pruner结构化剪枝。剪 dependency group。改变模型结构。通常需要 LoRA post-training。更容易得到真实小模型。所以如果你关心快速 one-shot 压缩且不训练SparseGPT 更适合。如果你关心得到一个结构上更小的 LLMLLM-Pruner 更接近目标。十四、和 Wanda 的区别Wandascore 权重幅值 × 输入激活范数。剪单个权重。不更新权重。非常简单默认非结构化。LLM-Pruner基于 dependency graph 找结构组。用梯度/Taylor 估计 group 重要性。剪掉结构组。用 LoRA 恢复。所以 Wanda 是activation-aware unstructured pruning。LLM-Pruner 是gradient-aware structural pruning。两者压缩目标不同。十五、和传统结构化剪枝的区别传统结构化剪枝常常手工定义剪 FFN neuron。剪 attention head。剪 layer。然后根据某个指标排序。LLM-Pruner 更自动一些。它不是只手写某个结构而是先通过 dependency detection 自动构建 dependency groups再估计 group 重要性。官方仓库也强调 automatic structural pruning 是其目标之一。(GitHub)这对 LLM 很重要因为不同模型结构不同LLaMA 有 SwiGLU。ChatGLM 架构和 LLaMA 不同。Vicuna 基于 LLaMA但微调后行为不同。手工为每个模型写剪枝规则很麻烦。Dependency graph 的价值就在于减少人工结构分析成本。十六、它是不是结构化剪枝是的LLM-Pruner 是结构化剪枝。更准确地说它是task-agnostic structural pruning for LLMs。它不是非结构化权重剪枝。N:M 半结构化稀疏。token pruning。KV cache pruning。纯 layer dropping。它的核心是删除相互依赖的 structural groups并通过轻量 post-training 恢复能力。十七、方法优点第一剪枝后模型结构真的变小。它不是保留原矩阵形状再置零而是删除结构组因此更接近真实小模型。第二考虑结构依赖。Dependency discovery 可以避免剪完后张量维度不匹配。第三task-agnostic。论文目标不是针对单一任务而是尽量保留 LLM 的多任务能力和生成能力。(arXiv)第四数据需求较低。官方设置只用 50K Alpaca samples 做 post-training。(GitHub)第五恢复成本较低。官方仓库强调剪枝约 3 分钟、post-training 约 3 小时。(GitHub)十八、方法局限第一不是完全 training-free。结构化剪枝后通常需要 LoRA post-training。相比 Wanda / SparseGPT恢复阶段成本更高。第二剪枝后生成质量可能不稳定。官方仓库也在 limitations 中提到当前压缩模型仍可能出现重复 token 或无意义输出生成质量仍有提升空间。(GitHub)第三自动依赖识别并非对所有模型都完美。仓库 limitations 提到有些模型在 concat 和 view 操作后的 index mapping 仍不能自动识别需要额外人工处理。(GitHub)第四结构化剪枝粒度较粗。删除 neuron/channel/group 会直接减少容量精度恢复比非结构化剪枝更难。第五剪枝比例过高时容易伤生成能力。LLM 生成任务对模型容量和内部表征非常敏感结构删得过多会带来明显退化。十九、整体评价LLM-Pruner 是 LLM 结构化剪枝方向的代表性工作。它和 SparseGPT / Wanda 构成了 LLM 剪枝里的两条路线SparseGPT / Wanda保持结构不变把权重变稀疏。LLM-Pruner真正删除结构让模型变窄或变小。如果只看实现简单和无需训练Wanda 更轻如果只看 one-shot 精度SparseGPT 很强但如果目标是得到一个结构上缩小的 LLMLLM-Pruner 的意义更直接。它的核心贡献可以概括为三点第一用 dependency graph 解决 LLM 结构化剪枝中的耦合问题。第二用梯度/Taylor 信息评估结构组重要性。第三用少量数据和 LoRA post-training 快速恢复压缩模型能力。二十、一句话总结《LLM-Pruner: On the Structural Pruning of Large Language Models》提出一种面向 LLM 的结构化剪枝框架它先通过 dependency discovery 自动识别 LLM 中相互耦合、必须一起删除的最小结构组再用梯度/Taylor 重要性估计选择低贡献 group 进行物理删除最后通过少量 Alpaca 数据和 LoRA post-training 恢复模型能力。与 SparseGPT、Wanda 这类非结构化权重剪枝不同LLM-Pruner 会真正改变模型结构因此更接近真实小模型但它也更依赖结构依赖分析和恢复训练剪枝过重时生成质量更容易退化。