大模型的压缩/微调方法

本文探讨了多种减小模型大小和提升预测速度的方法,包括数字精度降低(如float32到float16)、LadderSide-Tuning(在大模型上构建轻量级旁支)、P-tuning裁剪、Adapter技术、模型蒸馏(如Response-Based、Feature-Based、Relation-Based知识转移)、动态预测加速(如DeeBERT和Early Exit策略)、矩阵分解、操作融合和模块替换。这些策略旨在应对日益庞大的模型,提高计算效率和运行速度。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

主要讲讲有哪些方法可以减少模型大小,提升预测推理速度。尤其是现在的模型越来越大。

1.数字精度降低

主要是float32变成float16,这样内存使用变小,增加处理的数据量,提高了运行效率和速度。

在这里插入图片描述

2.Ladder Side-Tuning(LST)

LST,它是在原有大模型的基础上搭建了一个“旁支”(梯子),将大模型的部分层输出作为旁枝模型的输入,所有的训练参数尽在旁枝模型中,由于大模型仅提供输入,因此反向传播的复杂度取决于旁枝模型的规模,并不需要直接在原始大模型上执行反向传播,因此是可以明显提升训练效率的。
在这里插入图片描述

3.P-tuning 裁剪

识别和去掉模型中不必要的部分

4.Adapter

基于预训练模型,adapter 给出了一个新的思路,即能否在模型中插入一些少量的参数,在下游某个任务微调时只对这些参数进行训练,而保持预训练模型原有的参数不变

5.蒸馏

训练一个小的学生模型来模拟大的老师模型。
1)蒸馏的知识类型:
包括三种,一种是Response-Based Knowledge,主要利用老师模型的最后一层;第二种是Feature-Based Knowledge,除了利用老师模型的最后一层,还利用中间层;第三种是Relation-Based Knowledge,进一步探索不同层或数据样本间的关系。

2)蒸馏的策略:
offline distillation:先训练老师,再训练学生
online distillation :老师和学生一起训练
selfdistillation:也可以说online distillation一个特例
在这里插入图片描述
3)模型的架构:
老师和学生的架构可以类似,也可以不一样,如BERT来蒸馏LSTM。
在这里插入图片描述

6.动态预测加速(Dynamic Inference Acceleration)

利用一些技巧减少在预测时花的时间。
DeeBERT: Dynamic Early Exiting for Accelerating BERT Inference
BERT Loses Patience: Fast and Robust Inference with Early Exit
Accelerating BERT Inference for Sequence Labeling via Early-Exit
FastBERT: a Self-distilling BERT with Adaptive Inference Time

7.矩阵分解

将大的矩阵分解成两个小的矩阵相乘,如AB变成AC、C*B,其中C远小于A、B。

8.操作融合Operation Fusion

一些数字技巧来合并计算图中的节点

9.模块替换

通过替代模块减少模型复杂度或者深度。

参考:
1.苏剑林. (Jun. 20, 2022). 《Ladder Side-Tuning:预训练模型的“过墙梯” 》[Blog post]. Retrieved from https://kexue.fm/archives/9138
2. All The Ways You Can Compress Transformers
https://www.kaggle.com/code/rhtsingh/all-the-ways-you-can-compress-transformers

### 大模型微调方法和理论总结 大模型微调是一种通过调整预训练模型的部分参数或结构,使其适应特定任务需求的技术。这种方法能够显著提升模型性能并减少资源消耗。以下是关于大模型微调的主要方法及其理论基础: #### 1. 指令微调 (Instruction Fine-Tuning) 指令微调是一种针对具体应用场景优化模型的有效策略。它涉及使用一组精心设计的输入-输出示例来指导模型的行为模式。这些数据集应与目标应用高度相关,从而帮助模型更好地理解用户的意图[^3]。 #### 2. 参数高效微调 (Parameter-Efficient Fine-Tuning, PEFT) PEFT 是近年来兴起的一类微调技术,旨在仅更新少量新增模块中的可训练参数,而保持原生大模型权重不变。这类方法包括但不限于 LoRA 和 P-Tuning v2: - **LoRA**: Low-Rank Adaptation 的缩写,该方法通过对矩阵分解的方式引入低秩近似层,在不改变原有网络架构的情况下实现高效的自定义适配。 - **P-Tuning v2**: 提出了基于连续提示的学习框架,允许动态生成软提示向量以增强下游任务的表现力[^4]。 #### 3. 权重量化 (Weight Quantization) 为了进一步压缩模型体积以便部署到边缘设备上运行,可以采用权重量化的手段降低存储开销而不明显牺牲预测质量。例如 QLoRA 就是在 LoRA 基础之上增加了量化支持;而对于难以直接处理的激活值,则可能需要用到像 SmoothQuant 这样的高级算法来进行精细化管理。 #### 4. 数据增强与正则化 除了上述几种主流途径外,合理利用外部知识源扩充训练语料库同样重要。此外适当加入噪声干扰项有助于防止过拟合现象发生,确保泛化能力更强健持久[^2]。 ```python import torch from peft import LoraConfig, get_peft_model # 加载预训练的大规模语言模型 model = ... # 配置LoRA超参 lora_config = LoraConfig( r=8, lora_alpha=32, target_modules=["q_proj", "v_proj"], lora_dropout=0.05, ) # 获取带有LoRA修改后的版本 peft_model = get_peft_model(model, lora_config) ``` 以上代码片段展示了如何借助 Hugging Face 的 `transformers` 库快速搭建一个具备 LoRA 功能的基础实例。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

AI强仔

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值