当前位置: 首页 > news >正文

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

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

一、硬件依赖

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

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

方法精度7B13B30B70B110B8x7B8x22B
FullAMP120GB240GB600GB1200GB2000GB900GB2400GB
Full1660GB120GB300GB600GB900GB400GB1200GB
Freeze1620GB40GB80GB200GB360GB160GB400GB
LoRA/GaLore/BAdam1616GB32GB64GB160GB240GB120GB320GB
QLoRA810GB20GB40GB80GB140GB60GB160GB
QLoRA46GB12GB24GB48GB72GB30GB96GB
QLoRA24GB8GB16GB24GB48GB18GB48GB

二、微调设置

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

方法全参数训练部分参数训练LoRAQLoRA
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博客icon-default.png?t=N7T8https://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)icon-default.png?t=N7T8https://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微调大模型——微调模型评估将对微调后的模型进行应用与评估,欢迎您持续关注,如果本文对您有所帮助,感谢您一键三连,多多支持。

相关文章:

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

上文【04】LLaMA-Factory微调大模型——数据准备介绍了如何准备指令监督微调数据,为后续的微调模型提供高质量、格式规范的数据支撑。本文将正式进入模型微调阶段,构建法律垂直应用大模型。 一、硬件依赖 LLaMA-Factory框架对硬件和软件的依赖可见以下…...

Training for Stable Diffusion

1.Training for Stable Diffusion 笔记来源: 1.Denoising Diffusion Probabilistic Models 2.最大似然估计(Maximum likelihood estimation) 3.Understanding Maximum Likelihood Estimation 4.How to Solve ‘CUDA out of memory’ in PyTorch 5.pytorch-stable-d…...

初学51单片机之指针基础与串口通信应用

开始之前推荐一个电路学习软件,这个软件笔者也刚接触。名字是Circuit有在线版本和不在线版本,这是笔者在B站看视频翻到的。 Paul Falstadhttps://www.falstad.com/这是地址。 离线版本在网站内点这个进去 根据你的系统下载你需要的版本红线的是windows…...

【启明智显分享】甲醛检测仪HMI方案:ESP32-S3方案4.3寸触摸串口屏,RS485、WIFI/蓝牙可选

今年,“串串房”一词频繁引发广大网友关注。“串串房”,也被称为“陷阱房”“贩子房”——炒房客以低价收购旧房子或者毛坯房,用极度节省成本的方式对房子进行装修,之后作为精修房高价租售,因甲醛等有害物质含量极高&a…...

Linux 驱动学习笔记

1、驱动程序分为几类? • 内核驱动程序(Kernel Drivers):这些是运行在操作系统内核空间的驱动程序,用于直接访问和控制硬件设备。它们提供了与硬件交互的底层功能,如处理中断、访问寄存器、数据传输等。 •…...

ip地址设置了重启又改变了怎么回事

在数字世界的浩瀚星海中,IP地址就如同每个设备的“身份证”,确保它们在网络中准确无误地定位与通信。然而,当我们精心为设备配置好IP地址后,却时常遭遇一个令人费解的现象:一旦设备重启,原本设定的IP地址竟…...

layui table 浮动操作内容收缩,展开

layui table 隐藏浮动操作内容 fixed: right, style:, title: 操作,align:left, minWidth: 450, toolbar:#id分析: 浮动一块新增一个class layui-table-fixed-r 可以隐藏整块内容进行,新增一个按钮点击时间,然后进行收缩和展开 $(‘.layui-…...

Ubuntu24.04 NFS 服务配置

1、NFS 介绍 NFS 是 Network FileSystem 的缩写,顾名思义就是网络文件存储系统,它允许网络中的计算机之间通过 TCP/IP 网络共享资源。通过 NFS,我们本地 NFS 的客户端应用可以透明地读写位于服务端 NFS 服务器上的文件,就像访问本…...

vue3使用html2canvas

安装 yarn add html2canvas 代码 <template><div class"container" ref"container"><div class"left"><img :src"logo" alt"" class"logo"><h2>Contractors pass/承包商通行证&l…...

OpenCV分水岭算法watershed函数的使用

操作系统&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 编程语言&#xff1a;C11 描述 我们将学会使用基于标记的分水岭算法来进行图像分割。我们将看到&#xff1a;watershed()函数的用法。 任何灰度图像都可以被视为一个地形表…...

laravel为Model设置全局作用域

如果一个项目中存在这么一个sql条件在任何情况下或大多数情况都会被使用&#xff0c;同时很容易被开发者遗忘&#xff0c;那么就非常适用于今天要提到的这个功能&#xff0c;Eloquent\Model的全局作用域。 首先看一个示例&#xff0c;有个数据表&#xff0c;结构如下&#xff1…...

Leetcode之string

目录 前言1. 字符串相加2. 仅仅反转字母3. 字符串中的第一个唯一字符4. 字符串最后一个单词的长度5. 验证回文串6. 反转字符串Ⅱ7. 反转字符串的单词Ⅲ8. 字符串相乘9. 打印日期 前言 本篇整理了一些关于string类题目的练习, 希望能够学以巩固. 博客主页: 酷酷学!!! 点击关注…...

OS:处理机进程调度

1.BackGround&#xff1a;为什么要进行进程调度&#xff1f; 在多进程环境下&#xff0c;内存中存在着多个进程&#xff0c;其数目往往多于处理机核心数目。这就要求系统可以按照某种算法&#xff0c;动态的将处理机CPU资源分配给处于就绪状态的进程。调度算法的实质其实是一种…...

【车辆轨迹处理】python实现轨迹点的聚类(一)——DBSCAN算法

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、单辆车轨迹的聚类与分析1.引入库2.聚类3.聚类评价 二、整个数据集多辆车聚类1.聚类2.整体评价 前言 空间聚类是基于一定的相似性度量对空间大数据集进行分组…...

Apache Kylin

Apache Kylin 是一个开源的分布式分析引擎&#xff0c;提供 SQL 查询接口及多维分析&#xff08;OLAP&#xff09;能力以支持超大规模数据集。它能在亚秒级的时间内提供 PB 级数据的查询能力&#xff0c;非常适合大数据分析和报表系统。 ### 入门指南 #### 1. 环境准备 首先…...

为何Vue3比Vue2快

Proxy响应式 PatchFlag 编译模板时&#xff0c;动态节点做标记标记&#xff0c;分为不同的类型&#xff0c;如TEXT PROPSdiff算法时&#xff0c;可以区分静态节点&#xff0c;以及不同类型的动态节点 <div>Hello World</div> <span>{{ msg }}</span>…...

人工智能与社交变革:探索Facebook如何领导智能化社交平台

在过去十年中&#xff0c;人工智能&#xff08;AI&#xff09;技术迅猛发展&#xff0c;彻底改变了我们与数字世界互动的方式。Facebook作为全球最大的社交媒体平台之一&#xff0c;充分利用AI技术&#xff0c;不断推动社交平台的智能化&#xff0c;提升用户体验。本文将深入探…...

八股文之java基础

jdk9中对字符串进行了一个什么优化&#xff1f; jdk9之前 字符串的拼接通常都是使用进行拼接 但是的实现我们是基于stringbuilder进行的 这个过程通常比较低效 包含了创建stringbuilder对象 通过append方法去将stringbuilder对象进行拼接 最后使用tostring方法去转换成最终的…...

深度挖掘行情接口:股票市场中的关键金融数据API接口解析

在股票市场里&#xff0c;存在若干常见的股票行情数据接口&#xff0c;每一种接口皆具备独特的功能与用途。以下为一些常见的金融数据 API 接口&#xff0c;其涵盖了广泛的金融数据内容&#xff0c;其中就包含股票行情数据&#xff1a; 实时行情接口 实时行情接口&#xff1a…...

逆向破解 对汇编的 简单思考

逆向破解汇编非常之简单 只是一些反逆向技术非常让人难受 但网络里都有方法破解 申请变量 &#xff1a; int a 0; 00007FF645D617FB mov dword ptr [a],0 char b b; 00007FF645D61802 mov byte ptr [b],62h double c 0.345; 00007FF645D61…...

Java 语言特性(面试系列2)

一、SQL 基础 1. 复杂查询 &#xff08;1&#xff09;连接查询&#xff08;JOIN&#xff09; 内连接&#xff08;INNER JOIN&#xff09;&#xff1a;返回两表匹配的记录。 SELECT e.name, d.dept_name FROM employees e INNER JOIN departments d ON e.dept_id d.dept_id; 左…...

iOS 26 携众系统重磅更新,但“苹果智能”仍与国行无缘

美国西海岸的夏天&#xff0c;再次被苹果点燃。一年一度的全球开发者大会 WWDC25 如期而至&#xff0c;这不仅是开发者的盛宴&#xff0c;更是全球数亿苹果用户翘首以盼的科技春晚。今年&#xff0c;苹果依旧为我们带来了全家桶式的系统更新&#xff0c;包括 iOS 26、iPadOS 26…...

以下是对华为 HarmonyOS NETX 5属性动画(ArkTS)文档的结构化整理,通过层级标题、表格和代码块提升可读性:

一、属性动画概述NETX 作用&#xff1a;实现组件通用属性的渐变过渡效果&#xff0c;提升用户体验。支持属性&#xff1a;width、height、backgroundColor、opacity、scale、rotate、translate等。注意事项&#xff1a; 布局类属性&#xff08;如宽高&#xff09;变化时&#…...

PPT|230页| 制造集团企业供应链端到端的数字化解决方案:从需求到结算的全链路业务闭环构建

制造业采购供应链管理是企业运营的核心环节&#xff0c;供应链协同管理在供应链上下游企业之间建立紧密的合作关系&#xff0c;通过信息共享、资源整合、业务协同等方式&#xff0c;实现供应链的全面管理和优化&#xff0c;提高供应链的效率和透明度&#xff0c;降低供应链的成…...

渲染学进阶内容——模型

最近在写模组的时候发现渲染器里面离不开模型的定义,在渲染的第二篇文章中简单的讲解了一下关于模型部分的内容,其实不管是方块还是方块实体,都离不开模型的内容 🧱 一、CubeListBuilder 功能解析 CubeListBuilder 是 Minecraft Java 版模型系统的核心构建器,用于动态创…...

《基于Apache Flink的流处理》笔记

思维导图 1-3 章 4-7章 8-11 章 参考资料 源码&#xff1a; https://github.com/streaming-with-flink 博客 https://flink.apache.org/bloghttps://www.ververica.com/blog 聚会及会议 https://flink-forward.orghttps://www.meetup.com/topics/apache-flink https://n…...

NLP学习路线图(二十三):长短期记忆网络(LSTM)

在自然语言处理(NLP)领域,我们时刻面临着处理序列数据的核心挑战。无论是理解句子的结构、分析文本的情感,还是实现语言的翻译,都需要模型能够捕捉词语之间依时序产生的复杂依赖关系。传统的神经网络结构在处理这种序列依赖时显得力不从心,而循环神经网络(RNN) 曾被视为…...

Element Plus 表单(el-form)中关于正整数输入的校验规则

目录 1 单个正整数输入1.1 模板1.2 校验规则 2 两个正整数输入&#xff08;联动&#xff09;2.1 模板2.2 校验规则2.3 CSS 1 单个正整数输入 1.1 模板 <el-formref"formRef":model"formData":rules"formRules"label-width"150px"…...

Pinocchio 库详解及其在足式机器人上的应用

Pinocchio 库详解及其在足式机器人上的应用 Pinocchio (Pinocchio is not only a nose) 是一个开源的 C 库&#xff0c;专门用于快速计算机器人模型的正向运动学、逆向运动学、雅可比矩阵、动力学和动力学导数。它主要关注效率和准确性&#xff0c;并提供了一个通用的框架&…...

云原生玩法三问:构建自定义开发环境

云原生玩法三问&#xff1a;构建自定义开发环境 引言 临时运维一个古董项目&#xff0c;无文档&#xff0c;无环境&#xff0c;无交接人&#xff0c;俗称三无。 运行设备的环境老&#xff0c;本地环境版本高&#xff0c;ssh不过去。正好最近对 腾讯出品的云原生 cnb 感兴趣&…...