当前位置:AIGC资讯 > AIGC > 正文

【05】LLaMA-Factory微调大模型——初尝微调模型

上文【04】LLaMA-Factory微调大模型——数据准备介绍了如何准备指令监督微调数据,为后续的微调模型提供高质量、格式规范的数据支撑。本文将正式进入模型微调阶段,构建法律垂直应用大模型。

一、硬件依赖

LLaMA-Factory框架对硬件和软件的依赖可见以下链接的说明文档。

LLaMA-Factory/README_zh.md at main · hiyouga/LLaMA-Factory · GitHubhttps://github.com/hiyouga/LLaMA-Factory/blob/main/README_zh.md可根据该表格中方法和模型参数体量对应的硬件需求来评估自身硬件能否满足。

方法 精度 7B 13B 30B 70B 110B 8x7B 8x22B Full AMP 120GB 240GB 600GB 1200GB 2000GB 900GB 2400GB Full 16 60GB 120GB 300GB 600GB 900GB 400GB 1200GB Freeze 16 20GB 40GB 80GB 200GB 360GB 160GB 400GB LoRA/GaLore/BAdam 16 16GB 32GB 64GB 160GB 240GB 120GB 320GB QLoRA 8 10GB 20GB 40GB 80GB 140GB 60GB 160GB QLoRA 4 6GB 12GB 24GB 48GB 72GB 30GB 96GB QLoRA 2 4GB 8GB 16GB 24GB 48GB 18GB 48GB

二、微调设置

训练方法方面,LLaMA-Factory框架不仅支持预训练(Pre-Training)、指令监督微调训练(Supervised Fine-Tuning),还是支持奖励模型训练(Reward Modeling)、PPO、DPO、ORPO等强化学习训练,可使用各种方法完成全参数训练、部分参数训练、LoRA以及QLoRA。

方法 全参数训练 部分参数训练 LoRA QLoRA Pre-Training ✅ ✅ ✅ ✅ Supervised Fine-Tuning ✅ ✅ ✅ ✅ Reward Modeling ✅ ✅ ✅ ✅ PPO Training ✅ ✅ ✅ ✅ DPO Training ✅ ✅ ✅ ✅ KTO Training ✅ ✅ ✅ ✅ ORPO Training ✅ ✅ ✅ ✅ SimPO Training ✅ ✅ ✅ ✅

(1)首先进入虚拟环境,启动LLaMA-Factory框架的web网页

选择训练阶段,当前即 指令监督微调训练(SFT),载入数据集

可根据实际需求设置相应的学习率、训练轮数、验证集比例、日志间隔、保存间隔等信息。之后点击预览命令,可查看对应配置的命令行,命令可以本地保存,此后以命令行方式运行也是可行的,点击开始进行训练(需选择基础模型)。命令的具体说明如下(LoRA示例)

CUDA_VISIBLE_DEVICES=1 llamafactory-cli train \
    --stage sft \      #指定sft微调训练,可选rm,dpo等
    --do_train True \  #训练是do_train,预测是do_predict
    --model_name_or_path /hXXXXX \  #模型目录
    --finetuning_type lora \    #训练类型为lora,也可以进行full和freeze训练
    --quantization_bit 4 \      #量化精度,4bit,可选8bit和none不量化
    --template XXXX \      #模版,每个模型要选对应的模版,对应关系见上文
    --flash_attn auto \          #flash attention,闪光注意力机制,一种加速注意力计算的方法
    --dataset_dir data \        #数据目录
    --dataset oaast_sft_zh \    #数据集,可以通过更改dataset_info.json文件配置自己的数据集
    --cutoff_len 1024 \         #截断长度
    --learning_rate 5e-05 \     #学习率,AdamW优化器的初始学习率
    --num_train_epochs 20.0 \   #训练轮数,需要执行的训练总轮数
    --max_samples 100000 \      #最大样本数,每个数据集的最大样本数
    --per_device_train_batch_size 1 \    #批处理大小,每个GPU处理的样本数量,推荐为1
    --gradient_accumulation_steps 1 \    #梯度累积,梯度累积的步数,推荐为1
    --lr_scheduler_type cosine \         #学习率调节器,可选line,constant等多种
    --max_grad_norm 1.0 \                #最大梯度范数,用于梯度裁剪的范数
    --logging_steps 100 \                #日志间隔,每两次日志输出间的更新步数
    --save_steps 5000 \                  #保存间隔,每两次断点保存间的更新步数。
    --warmup_steps 0.1 \                 #预热步数,学习率预热采用的步数。
    --optim adamw_torch \                #优化器,使用的优化器:adamw_torch、adamw_8bit 或 adafactor
    --packing False \                    
    --report_to none \
    --output_dir savesXXXXXX   \    #数据目录
    --fp16 True \                        #计算类型,可以fp16、bf16等
    --lora_rank 32 \                     #LoRA秩,LoRA矩阵的秩大小,越大精度越高,推荐32
    --lora_alpha 16 \                    #LoRA 缩放系数
    --lora_dropout 0 \
    --lora_target W_pack \               #模型对应的模块,具体对应关系见上文
    --val_size 0.1 \
    --evaluation_strategy steps \
    --eval_steps 5000 \
    --per_device_eval_batch_size 1 \
    --load_best_model_at_end True \
    --plot_loss True

该参数的分析说明参考以下这篇博文

AI智能体研发之路-模型篇(一):大模型训练框架LLaMA-Factory在国内网络环境下的安装、部署及使用-CSDN博客https://blog.csdn.net/weixin_48007632/article/details/138819599本文采用LoRA方法对模型进行微调。

LoRA的基本原理是利用模型参数的稀疏性,通过学习模型参数的局部关系来高效地微调模型。具体来说,LoRA通过随机选择一部分模型参数进行微调,而不是对所有参数进行微调。这种方法可以大大减少模型的训练时间和计算资源,同时提高模型的性能。在实现上,LoRA可以分为两个阶段。在第一阶段,LoRA随机选择一部分模型参数进行训练,得到一个初步的微调模型。在第二阶段,LoRA对初步微调模型进行优化,进一步调整模型参数。这个过程可以重复多次,以得到更好的性能。
LoRA的优点在于它能够有效地利用模型参数的稀疏性,减少训练时间和计算资源。同时,由于LoRA只对部分参数进行微调,可以避免过拟合和泛化能力下降的问题。此外,LoRA还可以扩展到大规模深度学习模型中,具有广泛的应用前景。
在实际应用中,LoRA已经被应用于各种深度学习模型和任务中,取得了显著的效果。例如,在自然语言处理领域中,LoRA被用于文本分类、情感分析、机器翻译等任务中,取得了优秀的性能表现。在计算机视觉领域中,LoRA被用于图像分类、目标检测、人脸识别等任务中,也取得了很好的效果。

LoRA中具体每一参数的含义可参考这篇博客。

PEFT LoraConfig参数详解_深度学习_新缸中之脑-GitCode 开源社区 (csdn.net)https://gitcode.csdn.net/662763f09c80ea0d2271339f.html?dp_token=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpZCI6NjUwMjE2LCJleHAiOjE3MjE4MDY0NjAsImlhdCI6MTcyMTIwMTY2MCwidXNlcm5hbWUiOiJINjY3Nzg4OTkifQ.GLkvRn5166k33ax3BiMR9H8KJLE8wV2JTOa4TGpZjbE

三、微调llama3-8b-chinese-chat模型

选择已经配置好路径的llama-9b-chinese模型

设置对应的输出目录和配置路径,开启训练 

整个指令微调过程耗时约8个小时,需要耐心等待

检查显卡的运行情况

nvidia-smi

在训练的过程中也可随时保存参数,中断训练

之后,可选择相应的配置进行恢复

此后,可接着中断点继续训练模型

模型训练完成后会显示训练情况

导出损失率和训练轮数的折线图

随着训练epoch的增加,损失值总体呈下降趋势。这通常表明模型在学习和改进,对数据的拟合逐渐变得更好。

四、微调Qwen-2模型

模型选择与训练开启的方法与llama3-8b-chinese-chat相同

训练开启后,命令行如图所示

通过网页端可观察训练过程中损失率的变化以及进度

模型微调的耗时约为7个小时

训练结果如下:

【注意】两个模型微调时不是一致的参数,Qwen-2的训练在LoRA的秩为32,日志间隔50,保存间隔200。 

 小结

本文介绍了如何对模型进行微调。下文【06】LLaMA-Factory微调大模型——微调模型评估将对微调后的模型进行应用与评估,欢迎您持续关注,如果本文对您有所帮助,感谢您一键三连,多多支持。

总结

**文章总结**:
本文详细介绍了使用LLaMA-Factory框架进行法律垂直应用大模型的微调过程。首先讲解了硬件和软件环境的需求,并通过提供具体的表格来说明不同参数体量下所需的硬件资源。接着,文章深入讲解了微调设置,包括全参数训练、部分参数训练以及LoRA和QLoRA等不同的微调方法,它们均支持预训练、监督微调训练以及多种强化学习训练方法。
文章通过实例详细说明了如何通过网页界面进行选择和设置,包括训练阶段选定、学习率、训练轮数、验证集比例以及保存间隔等关键参数的设定,同时提供了LoRA微调方法的原理及其优势,强调了它能够通过利用模型参数的稀疏性来高效地微调模型。
文章还通过具体事例展示了两个模型(llama3-8b-chinese-chat和Qwen-2)的微调过程,包括训练的高级配置、显卡监控、保存和恢复训练状态等步骤,并展示了训练损失率的变化趋势及训练完成情况。最后,文章预告了将进行后续工作,即微调后的模型应用与评估。整体而言,本文为希望使用LLaMA-Factory框架进行大模型微调的人员提供了一份详尽的参考指南。

更新时间 2024-07-23