LLaMa3微调
LoRA
基本概念
LoRA(Low-Rank Adaptation)是一种用于大模型微调的技术,通过引入低秩矩阵来减少微调时的参数量。在预训练的模型中,LoRA通过添加两个小矩阵B和A来近似原始的大矩阵ΔW,从而减少需要更新的参数数量。具体来说,LoRA通过将全参微调的增量 参数矩阵ΔW表示为两个参数量更小的矩阵B和A的低秩近似来实现:
[ W_0 + \Delta W = W_0 + BA ]
其中,B和A的秩远小于原始矩阵的秩,从而大大减少了需要更新的参数数量。
LoRA思想
预训练模型中存在一个极小的内在维度,这个内在维度是发挥核心作用的地方。在继续训练的过程中,权重的更新依然也有如此特点,即也存在一个内在维度(内在秩)
权重更新:W=W+^W
因此,可以通过矩阵分解的方式,将原本要更新的大的矩阵变为两个小的矩阵
权重更新:W=W+^W=W+BA
具体做法,即在矩阵计算中增加一个旁系分支,旁系分支由两个 低秩矩阵A和B组成
LoRA原理
训练时,输入分别与原始权重和两个低秩矩阵进行计算,共同得 到最终结果,优化则仅优化A和B。
训练完成后,可以将两个低秩矩阵与原始模型中的权重进行合并, 合并后的模型与原始模型无异
模型下载
可以通过Hugging Face平台和国内魔塔社区进行下载,下面以Llama-3.2-1B-Instruct
模型为示例:
魔塔社区下载模型,
# 模型下载
from modelscope import snapshot_download
model_dir = snapshot_download('LLM-Research/Llama-3.2-1B-Instruct',cache_dir="/teacher_data/llm/")
LLaMA-Factory
1.安装
git clone https://github.com/hiyouga/LLaMA-Factory.git
cd LLaMA-Factory
pip install -e .
2.准备训练数据
例:
训练数据:
- fintech.json
- identity.json
将训练数据放在目录 LLaMA-Factory/data/fintech.json
并且修改数据注册文件:LLaMA-Factory/data/dataset_info.json ,内容如下:
"fintech": {
"file_name": "fintech.json",
"columns": {
"prompt": "instruction",
"query": "input",
"response": "output",
"history": "history"
}
}
通过界面进行训练
启动Web UI
cd LLaMA-Factory
llamafactory-cli webui
模型微调
- 使用 Web UI 训练
- 使用命令行执行
启动webui后界面如下:
设置训练模型路径
将界面修改为中文,设置需要训练的模型名字,填入模型路径
其他参数:
- 微调方法选择 lora
- 检查点路径:训练模型保存路径,训练好的模型权重路径,一般默认
- 最下面一排参数先默认
配置训练参数
参数配置:
- 训练阶段:一般默认supervised Fine-Tuning
- 数据路径:我们要训练的数据集路径
- 数据集:我们要训练的数据集,可以多选
- 学习率:一般默认
- 训练轮数:一般设置大一点,因为可以随时中止
- 最大梯度范畴:一般默认
- 最大样本数:默认,可以根据数据集的大小来定
- 计算类型:bf16效果最好,但要看设备支不支持
- 截断长度:一般根据数据集来定
- 批处理大小:根据显卡配置来看
- 梯度积累:默认
- 验证集比例:验证集所占样本的大小
- 学习率调节器:默认
LoRA参数设置
参数:一般默认
配置好所有参数后,准备开始训练
测试模型
将训练好的模型权重进行测试测试
点击加载模型,会加载模型对话框界面
和模型对话看给出的回答准确度高不高
合并LoAR和原模型
选择效果最好的训练权重和原模型,点击Export模式,设置好参数后就准备开始导出。
评估模型
准备训练用的数据集,配置 dataset_info
,参数配置一般和训练时数据保持一致
评估模型前还需要装几个包
pip install jieba
pip install nltk
pip install rouge_chinese
通过配置文件开始训练
配置文件位于:[cust/train_llama3_lora_sft.yaml]
构建 cust/train_llama3_lora_sft.yaml
cutoff_len: 1024
dataset: fintech,identity
dataset_dir: data
do_train: true
finetuning_type: lora
flash_attn: auto
fp16: true
gradient_accumulation_steps: 8
learning_rate: 0.0002
logging_steps: 5
lora_alpha: 16
lora_dropout: 0
lora_rank: 8
lora_target: q_proj,v_proj
lr_scheduler_type: cosine
max_grad_norm: 1.0
max_samples: 1000
model_name_or_path: /root/autodl-tmp/models/Llama3-8B-Chinese-Chat
num_train_epochs: 10.0
optim: adamw_torch
output_dir: saves/LLaMA3-8B-Chinese-Chat/lora/train_2024-05-25-20-27-47
packing: false
per_device_train_batch_size: 2
plot_loss: true
preprocessing_num_workers: 16
report_to: none
save_steps: 100
stage: sft
template: llama3
use_unsloth: true
warmup_steps: 0
命令行执行:
llamafactory-cli train cust/train_llama3_lora_sft.yaml
问题记录:
我在实际安装过程中由于懒得租服务器和安装Linux双系统,所以就直接使用Windows11系统来安装配置LLaMA-Factory,按照上面步骤配置好后,成功启动了webui界面,但是在配置好训练参数后,点击开始训练,结果报错:未找到cuda环境,随后程序报错中断服务了
原因推测是没有在使用的python环境中安装 CUDA + pytorch 环境导致的,或者安装的环境版本不对,安装 CUDA + pytorch 包
conda install pytorch==2.1.0 torchvision==0.16.0 torchaudio==2.1.0 pytorch-cuda=12.1 -c pytorch -c nvidia
后续没有解决,准备还是在服务器上进行测试。
文本生成模型评估方法
OpenCompass采取客观评测与主观评测相结合的方法。针对具有确定性答案的能力维度和场景,通过构造丰富完善的评测集,对模型能力进行综合评价。针对体现模型能力的开放式或半开放式的问题、模型安全问题等,采用主客观相结合的评测方式。
更多实用文章和AI大模型应用开发文章欢迎到我个人博客来观看:墨宇Logic