大模型微调
大模型微调的三种方法:
- 全量微调
采用自定义的数据集,训练模型的完整参数(GPT2古诗词生成)
优点: 理论上效果最好的微调方法
缺点: 对数据和设备要求较高,训练难度大,风险较高(有可能微调后的效果不如微调前的效果) - 局部微调
在自定义数据集中,参与训练的仅仅是模型的部分参数。
优点: 相比较于全量微调,更加节约内存,门槛(数据、设备)更低。比全量微调更安全,而且局部微调一定有效。
缺点: 理论上的效果,不如全量微调,但优于增量微调。应该如何选择参与训练的参数是个问题。目前有效的解决方案就是Lora。
- Lora的设计核心思想来源于之前的"瓶颈结构" 代表作为mobileNet。
- 数据本身是包含杂质的。(噪声)。瓶颈结构的设计,使得模型在特征提取过程中,具备了对"杂质"的过滤能力。这种设计,使得模型在提取特征的过程中,会更加偏向于跟目标相关性更高的特征,排除了干扰。
- 增量微调
模型本身并未参与到新数据集的训练中,参与训练的仅仅是模型的新增部分(下游任务)。
优点: 对于设备和数据量几乎没有要求。
缺点: 对模型的任务有要求。选择的预训练模型已经具备了对当前数据集的处理能力了。否则,不能使用增量微调。
LoRA微调
LoRA是一种用于大模型微调的技术,通过引入低秩矩阵来减少微调时的参数量。在与训练的模型中,LoRA通过添加两个小矩阵B和A来近似原始的大矩阵ΔW,从而减少需要更新的参数数量。 具体来说,LoRA通过将全参微调的增量参数矩阵ΔW表示为两个参数量更小的矩阵B和A的低秩近似来实现:
[W_0 + \Delta W = W_0 + BA]
其中,B和A的维度远小于原始矩阵ΔW的维度,从而实现参数量的减少。在微调过程中,只需要更新B和A这两个小矩阵即可,从而减少了计算资源和内存的需求。
模型训练你需要优化的地方
- 能否在硬件不变的情况下,减少模型训练的时长。
模型加速训练的思想: 模型在训练过程中,批次越大,训练速度越快。
训练越快: 模型在达到预取目标时,所花费的时间会缩短,而不是单次训练所花费的时长。 增大训练批次后,单次训练的时长一定会增加,但是达到同样预期所花费的训练总轮次会缩短。
模型训练的本质就是学习整个数据集的特征分布
实战
LoRA微调
1. 创建环境
# 创建环境
conda create -n llama_factory python=3.10
# 激活环境
conda activate llama_factory2. 拉取源码并安装依赖
git clone https://github.com/hiyouga/LLaMA-Factory.git
cd LLaMA-Factory
pip install -e . -i https://mirrors.aliyun.com/pypi/simple/ --trusted-host mirrors.aliyun.com3.启动web服务
cd LLaMA-Factory
llamafactory-cli webui
4. 下载qwen2.5-7B-Instruct版本
在魔塔社区的官网进行选择合适的方式进行下载模型
#模型下载
from modelscope import snapshot_download
model_dir = snapshot_download('Qwen/Qwen2.5-7B-Instruct',cache_dir="D:\python\model")5. LLama Factory自定义多轮对话数据集
6. 微调模型踩坑
- 将人设数据与医疗数据一起训练,会导致模型训练失败。
人设的数据量与医疗数据量相差太大,导致模型忘记人设。
解决方案: 先将基座模型与人设数据单独训练,训练完人设之后再与医疗数据一起训练。 (可能会忘记人设)
所以先训练医疗数据,之后再训练人设。
总结:
多的先训,少的后训;知识先训,人设后训。
7. 生成式模型微调的结果判断
- 主观评价
问题: 症状
回答的标准: 可能的病症,每个病症对应的用药建议
线上客服
关注一少部分核心问题,在测试时,将该部分问题的回复交由给甲方进行判断。
2. 客观评价
医疗,法律等有明确依据、强制性要求的行业中。
问: 你吃饭了吗?
AI回复: 我刚刚吃了一碗面
标准答案: 吃了
2. LoRA与QLoRA
如果在硬件不变的前提下,增大批次,那么只能从其他地方节约显存。
具体的方法,就是QLora。
QLora在训练时所花费的显存,比Lora更低。通过量化来实现
量化就是将大模型原有的参数由16bit,压缩到8bit或4bit。
QLora微调,在节约显存的同时,并不会降低模型的精度。因为当前处于训练过程中。量化压缩,压缩的是当前未参与训练的权重,正在参与训练的部分权重依然是16bit。并且,模型最终保存的参数,也是16bit。
LoRA: LoRA是一种用于微调大型语言模型的技术,通过低秩近似方法降低适应数
ollama打包部署
1. 需要用llama.cpp仓库的convert_hf_to_gguf.pu脚本转换
LLamaFactory模型导出量化
量化在AI中的应用
量化是用来优化模型性能的技术之一。
在大模型中,量化的应用方向主要有两点: 一、应用在模型微调、训练中,用来降低显存占用、加速模型训练
二、应用在大模型部署中。降低模型对部署设备(硬件性能)的依赖性。(如: ollama)
量化的本质是牺牲精度(精度的损失是在可控范围内的),换取性能。
但是在QLora中,量化是发生在训练过程中的,所以量化牺牲的精度,可通过训练弥补回来。因此,QLora目前是比较推荐的做法。
但是,量化如果应用在模型部署时,一定是以牺牲精度为代价,获取模型的推理性能,或者降低模型推理时,对硬件的依赖性。
大模型在处理复杂问题时的表现远远优于之前的小模型。
大模型的目前的地位得益于他的高精度、高智能表现。
目前来看,市面上大多数的大模型项目需求,都是偏向于大模型的能力,而不是考虑如何将大模型进行“边缘端部署”(牺牲精度,换取性能)。
大模型在部署时,不到万不得已,不要考虑量化部署。,因为部署量化模型,精度表现一般都会比原模型差。
但是,归根结底,大模型目前的主流发展方向,是朝着"模型精度更高、速度更快、体积更小、对硬件算力依赖度更低"的方向发展的。
