大模型剪枝概述
近年来,随着Transformer、MoE等架构的相继提出,深度学习模型的参数规模轻松突破了万亿大关。模型变得越来越大,部署成本和推理效率的问题也随之凸显——大模型压缩技术因此成了业界关注的焦点。目前主流的大模型压缩方法大致分为四类:模型剪枝、知识蒸馏、模型量化和低秩分解。本文主要聊聊当前大模型剪枝方向的一些代表性工作。
剪枝简介
模型剪枝,简单说就是去除神经网络中对最终性能影响较小的参数或连接,从而减少模型参数量和计算量。这就像给一棵大树修剪枝叶,去掉冗余的部分,让主干更健康。
从剪枝粒度来看,通常分为“结构化剪枝”和“非结构化剪枝”两种。前者按照特定规则(比如删除某些神经元、通道或整个层)来操作,保留整体网络骨架;后者则逐个权重进行判断,把低于阈值的参数归零,结果会产生不规则的稀疏结构。结构化剪枝对硬件更友好,但剪枝力度受限;非结构化剪枝压缩率更高,却需要专门的稀疏计算库来支持。
模型剪枝的典型流程包括四步:第一,训练一个性能足够好的初始大模型;第二,用某种方法(比如权重绝对值、梯度信息等)评估每个参数的重要性;第三,根据评估结果剪掉不重要的参数或连接;第四,对剪枝后的模型进行微调,弥补可能的性能损失。剪枝的好处显而易见——存储需求降低、推理速度加快、边缘设备上的资源消耗减少,但也要小心剪枝过度导致精度下滑,需要在压缩率和效果之间找到平衡。
下面,我们来看看针对大语言模型(LLM)的剪枝方法是如何应对其巨大尺寸和计算成本的。
非结构化剪枝方法
非结构化剪枝通过删除单个权重或神经元来简化LLM,通常的做法是把绝对值小于某个阈值的参数直接归零。这种方法能实现很高的稀疏度,但剪枝后的模型结构不规则,需要专门的压缩技术和稀疏矩阵运算库才能有效存储和计算。更棘手的是,非结构化剪枝往往需要大量的重新训练才能恢复精度,而LLM的重新训练成本极高。
针对这个难题,SparseGPT(论文:
SparseGPT: Massive Language Models Can be Accurately Pruned in One-Shot
当然,也有人坚持迭代的思路。Syed等人(2023)提出了一种迭代剪枝技术,在剪枝过程中用最少的训练步骤对模型进行微调,逐步剪掉不重要的权重。另一个方向是将参数高效微调(PEFT)与剪枝结合,比如LoRAPrune(论文:
LoRAPrune: Pruning Meets Low-Rank Parameter-Efficient Fine-Tuning
即便是SparseGPT这类一次性方法,也免不了对权重进行全局更新的高昂计算开销。Wanda(论文:
Simple and Effective Pruning Approach for Large Language Models
在实际推理时,LLM的内存和性能瓶颈常常来自四种“瘦矩阵乘法”(Skinny MatMul)。Flash-LLM基于“稀疏加载和密集计算”(LSCD)的思想,专门针对这四种MatMul进行优化。它提供了一套基于Tensor Core加速的、针对非结构化稀疏矩阵乘法的高效GPU代码,能让剪枝后的LLM以更少的内存部署到GPU上,推理效率也更高。
结构化剪枝方法
与非结构化剪枝不同,结构化剪枝一次性删除整个结构组件,比如神经元、通道甚至整个层。这样做的好处是剪枝后的模型仍然保持规则的网络结构,不需要特殊的稀疏库,硬件友好度更高,同时也能显著降低模型复杂度和内存使用。但挑战在于,如何精准地找出哪些结构是冗余的,并且不影响模型的多任务能力。
LLM-Pruner(论文:
LLM-Pruner: On the Structural Pruning of Large Language Models
另一个有趣的角度是:能不能利用现有预训练的大模型,直接生产出一个更小、更通用但同样有竞争力的模型,而且计算量远小于从头训练?LLM-Shearing给出了肯定答案。它提出了两种核心技术:
有针对性的结构化剪枝
动态批量加载
总的来说,大模型剪枝正在快速发展。随着模型参数规模持续膨胀,如何在压缩率、计算效率和性能之间找到最优解,仍然是值得持续探索的方向。本文梳理的几种方法,从一次性非结构化剪枝到结构化剪枝,再到结合动态数据加载的shearing策略,都展示了剪枝技术在降低模型大小和复杂性方面的巨大潜力。
-
- 关于宇宙的好的网名有哪些
- 角色扮演 | 1
- 网名