嘘~ 正在从服务器偷取页面 . . .

【AI大模型应用学习笔记】LLaMa3微调


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 .
这里执行安装包命令前,先执行 pip install auto-gptq 以及 pip install -e .["vllm"] 安装量化框架

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后界面如下:

LLaMa3_00

设置训练模型路径

将界面修改为中文,设置需要训练的模型名字,填入模型路径

LLaMa3_01

其他参数:

  • 微调方法选择 lora
  • 检查点路径:训练模型保存路径,训练好的模型权重路径,一般默认
  • 最下面一排参数先默认

配置训练参数

LLaMa3_02

参数配置:

  • 训练阶段:一般默认supervised Fine-Tuning
  • 数据路径:我们要训练的数据集路径
  • 数据集:我们要训练的数据集,可以多选
  • 学习率:一般默认
  • 训练轮数:一般设置大一点,因为可以随时中止
  • 最大梯度范畴:一般默认
  • 最大样本数:默认,可以根据数据集的大小来定
  • 计算类型:bf16效果最好,但要看设备支不支持
  • 截断长度:一般根据数据集来定
  • 批处理大小:根据显卡配置来看
  • 梯度积累:默认
  • 验证集比例:验证集所占样本的大小
  • 学习率调节器:默认

LoRA参数设置

LLaMa3_04

参数:一般默认

配置好所有参数后,准备开始训练

测试模型

将训练好的模型权重进行测试测试

LLaMa3_05

点击加载模型,会加载模型对话框界面

LLaMa3_06

和模型对话看给出的回答准确度高不高

合并LoAR和原模型

选择效果最好的训练权重和原模型,点击Export模式,设置好参数后就准备开始导出。

LLaMa3_07

评估模型

准备训练用的数据集,配置 dataset_info ,参数配置一般和训练时数据保持一致

评估模型前还需要装几个包

pip install jieba
pip install nltk
pip install rouge_chinese

LLaMa3_08

通过配置文件开始训练

配置文件位于:[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环境,随后程序报错中断服务了

LLaMa3_09

原因推测是没有在使用的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


文章作者: 墨宇Logic
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 墨宇Logic !