【学习记录】大模型微调之使用 LLaMA-Factory 微调 Qwen系列大模型,可以用自己的数据训练

一、LoRA微调的基本原理

1、基本概念
  • LoRA(Low-Rank Adaptation)是一种用于大模型微调的技术,通过引入低秩矩阵来减少微调时的参数量。在预训练的模型中,LoRA通过添加两个小矩阵B和A来近似原始的大矩阵ΔW,从而减少需要更新的参数数量。具体来说,LoRA通过将全参微调的增量参数矩阵ΔW表示为两个参数量更小的矩阵B和A的低秩近似来实现:
  • [ W_0 + \Delta W = W_0 + BA ]
  • 其中,B和A的秩远小于原始矩阵的秩,从而大大减少了需要更新的参数数量。
2、思想
  • 预训练模型中存在一个极小的内在维度,这个内在维度是发挥核心作用的地方。在继续训练的过程中,权重的更新依然也有如此特点,即也存在一个内在维度(内在秩)
  • 权重更新:W=W+^W
    • 因此,可以通过矩阵分解的方式,将原本要更新的大的矩阵变为两个小的矩阵
  • 权重更新:W=W+^W=W+BA
  • 具体做法,即在矩阵计算中增加一个旁系分支,旁系分支由两个低秩矩阵A和B组成
3、原理
  • 训练时,输入分别与原始权重和两个低秩矩阵进行计算,共同得到最终结果,优化则仅优化A和B
  • 训练完成后,可以将两个低秩矩阵与原始模型中的权重进行合并,合并后的模型与原始模型无异
    在这里插入图片描述
4、为什么GPU支持AI训练,且是最优选

CPU串行运算能力强(计算频率高,核心数少)
GPU并行运算能力强(计算频率低,核心数多(CUDA数量))

5、模型之间区别

1、模型预训练:从头开始训练一个全新的模型。(全新的模型是指模型的参数完全随机,不能处理任何问题。)

2、微调训练(迁移学习):基于之前训练好的模型,来继续学习新的任务。微调的目的往往是让模型具备新的或者特定的能力。

3、Lora微调属于局部微调。

二、LLaMA-Factory介绍

github官网地址:https://github.com/hiyouga/LLaMA-Factory/blob/main/README_zh.md

1、基本介绍

LLaMA Factory 是一个简单易用且高效的大型语言模型(Large Language Model)训练与微调平台。通过 LLaMA Factory,可以在无需编写任何代码的前提下,在本地完成上百种预训练模型的微调,框架特性包括:

  • 模型种类:LLaMA、LLaVA、Mistral、Mixtral-MoE、Qwen、Yi、Gemma、Baichuan、ChatGLM、Phi 等等。

  • 训练算法:(增量)预训练、(多模态)指令监督微调、奖励模型训练、PPO 训练、DPO 训练、KTO 训练、ORPO 训练等等。

  • 运算精度:16 比特全参数微调、冻结微调、LoRA 微调和基于 AQLM/AWQ/GPTQ/LLM.int8/HQQ/EETQ 的 2/3/4/5/6/8 比特 QLoRA 微调。

  • 优化算法:GaLore、BAdam、DoRA、LongLoRA、LLaMA Pro、Mixture-of-Depths、LoRA+、LoftQ 和 PiSSA。

  • 加速算子:FlashAttention-2 和 Unsloth。

  • 推理引擎:Transformers 和 vLLM。

  • 实验监控:LlamaBoard、TensorBoard(最好推荐)、Wandb、MLflow、SwanLab 等等。

2、安装 LLaMA Factory(基于windows)
git clone --depth 1 https://github.com/hiyouga/LLaMA-Factory.git
cd LLaMA-Factory
pip install -e ".[torch,metrics]"

1、创建一个conda环境

conda create -n llamaFactory python=3.12 -y
pip install -e .[torch,metrics]
或者pip install -e
上面的似乎没有安装cuda,所以训练时会提示
Warning
CUDA environment was not detected.

因此安一下:

 pip3 install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu121

2、启动

llamafactory-cli webui

在这里插入图片描述


如果是linux,建议使用vscode做ssh连接,这样就方便外部访问web端。


在这里插入图片描述

在这里插入图片描述

3.使用 LLaMA-Factory 微调 Qwen
选择自己本地的大模型,记住路径改为自己的本地路径,否则会跑去huggingface去下载。
在这里插入图片描述
自己的本地路径
在这里插入图片描述
Checkpoint path检查点路径就是如果你中途断网了,比如你训练了500次了,那么就可以从五百次继续训练。如果没有训练过,那么此处就不要填。
在这里插入图片描述
继续
在这里插入图片描述
Dataset(数据集)
数据集必须放在LLaMA-Factory项目下的data文件夹里,记住是必须。

训练轮次 最少300
在这里插入图片描述
Cutoff length(截断长度)越大 越耗资源,根据自己的数据量给出相应的长度
在这里插入图片描述
Batch size(批次大小,根据自己的GPU决定)
在这里插入图片描述
用的啥选啥,我用的lora,所以选LoRA configurations
在这里插入图片描述
LoRA alpha设置为LoRA rank的2倍
在这里插入图片描述
priview command(预览命令)
可以复制到自己本地去跑,但是感觉有点多余。
在这里插入图片描述
设备数量(device count),当你有几台设备就填几
在这里插入图片描述

之前没有在conda安装cuda,运行提示Warning
CUDA environment was not detected.
安装以后不提示。
在这里插入图片描述
正常训练
在这里插入图片描述
可以看到一些正常输出了
在这里插入图片描述
在这里插入图片描述
如果你中断训练,后台会报错

raiseValueError("OutputdirectoryalreadyexistsandIsnotempty.Pleasesetovenarite_output_dir.")
ValueError: Output directory already exists and is not empty.
Please set overwrite_output_dir

如果要重新训练,把LLaMA-Factory文件下的saves目录下的之前的数据删除就可以了
在这里插入图片描述
这里设置日志打印,和保存批次
在这里插入图片描述
填入自己的训练数据point,就可以聊天了。
在这里插入图片描述

**那什么时候可以训练停止呢**?

loss损失,趋于平衡时。
在这里插入图片描述

三、LLaMA-Factory微调数据集制作方法

1、modelscope下载数据集,然后通过代码转换成自己想要的格式的数据
比如我用弱智吧数据训练:https://modelscope.cn/datasets/w10442005/ruozhiba_qa
数据下载下来以后
在这里插入图片描述
用如下代码转成如下格式的数据

{"instruction": "计算这些物品的总费用。 ","input": "输入:汽车 - $3000,衣服 - $100,书 - $20。","output": "汽车、衣服和书的总费用为 $3000 + $100 + $20 = $3120。"
}

代码

import json# 读取原始JSON文件
input_file = r"data\ruozhiba_qaswift.json"  # 你的JSON文件名
output_file = r"\data\ruozhiba_qaswift_train.json"  # 输出的JSON文件名with open(input_file, "r", encoding="utf-8") as f:data = json.load(f)# 转换后的数据
converted_data = []for item in data:converted_item = {"instruction": item["query"],"input": "","output": item["response"]}converted_data.append(converted_item)# 保存为JSON文件(最外层是列表)
with open(output_file, "w", encoding="utf-8") as f:json.dump(converted_data, f, ensure_ascii=False, indent=4)print(f"转换完成,数据已保存为 {output_file}")

然后将转换的数据放入LLaMA-Factory项目下的data下,同时更改dataset_info.json.
然后就可以训练了。
在这里插入图片描述

四、训练评估

箭头所指的地方为自己需要填的训练checkpoint最终的批次路径,和数据集
在这里插入图片描述
需要安装以下包,才可评估。

pip install jieba
pip install nltk
pip install rouge_chinese

五、量化导出

量化导出,默认为none,不用安装包。如果量化到4,或者8,需要安装一些包.不建议量化2和3,因为量化2和3,模型可能不好用或者不太能用。同时模型越小,越不建议量化,比如0.5B 不建议导出,因为0.5已经是最小的模型了,继续量化反而效果不理想,能不量化 尽量不量化
在这里插入图片描述

0.5B 不建议导出,因为0.5已经是最小的模型了,继续量化反而效果不理想,如图
在这里插入图片描述

模型路径为合并后的路径,保存路径自己定义
在这里插入图片描述
量化安装包

pip install optimum
pip install outo_gptq
pip install rouge_chinese

安装out_gptq会报错,它会与cuda环境不兼容,因此需要新建一个环境安装
在这里插入图片描述

根据您的CUDA 12.1环境,安装AutoGPTQ(可能您指的outo_gptq是该工具的旧称或笔误)需要特殊处理。以下是详细步骤:

方法:创建一个conda,建议3.10虚拟环境

1. 源码安装(兼容CUDA 12.1)

直接通过pip安装可能无法获取兼容版本,需从源码安装:

conda create -n llama python==3.10 -y

然后安装

# 克隆仓库
git clone https://github.com/PanQiWei/AutoGPTQ.git
cd AutoGPTQ
pip install outo_gptq
pip install auto-gptq -i https://pypi.tuna.tsinghua.edu.cn/simple
pip install optimum -i https://pypi.tuna.tsinghua.edu.cn/simple
pip install scipy -i https://pypi.tuna.tsinghua.edu.cn/simplecd LLaMA-Factory
pip install -e .
或者
pip install -e 
llamafactory-cli webui

2. 验证安装

安装后运行以下Python代码测试:

from autogptq import AutoGPTQ# 初始化量化器(无需实际量化,仅验证加载)
quantizer = AutoGPTQ(model_path="your_model_path", device="cuda")
print("AutoGPTQ初始化成功!")

3. 常见问题处理
  • 依赖冲突:在虚拟环境中重新安装numpytransformers
    pip uninstall numpy transformers -y
    pip install numpy==1.24.3 transformers==4.32.0
    
  • CUDA驱动问题:确保NVIDIA驱动版本 ≥ 530.30(CUDA 12.1最低要求)。

4. 备选方案

如果仍报错,尝试指定旧版AutoGPTQ

pip install git+https://github.com/PanQiWei/AutoGPTQ.git@v1.0.0

请按步骤操作后观察是否解决兼容性问题。若遇到其他错误,请提供完整报错日志以便进一步排查。


训练图分析

在这里插入图片描述
y轴 loss为损失率
step为步数
original”(原始)和“smoothed”(平滑)
“original”(原始)和“smoothed”(平滑)。这种选项通常用于图像处理或数据可视化中,允许用户在原始数据或经过平滑处理的数据之间进行选择。

  • Original(原始):选择这个选项将显示未经过任何处理的原始数据或图像。
  • Smoothed(平滑):选择这个选项将显示经过平滑处理的数据或图像,平滑处理通常用于减少噪声或使数据更易于分析。
    两者趋于重合且在一条线时,训练可停止。Smoothed越高噪声越大,通常需要增加训练轮次来减少噪声。
    通常情况下,平滑处理是为了减少噪声,而不是增加噪声。以下是一些可能的解释:
  1. 平滑处理的目的

    • 平滑处理通常用于减少数据中的噪声,使数据更加平滑和易于分析。
    • 在图像处理和信号处理中,平滑处理可以帮助去除高频噪声,保留重要的低频信息。
  2. 增加训练轮次

    • 增加训练轮次(epochs)通常是为了让模型更好地学习数据中的模式,从而提高模型的性能。
    • 如果模型在训练过程中表现出过拟合或欠拟合,增加训练轮次可能有助于改善这些问题。
  3. 噪声与平滑处理的关系

    • 如果平滑处理后噪声反而增加,可能是因为平滑处理的方法或参数选择不当。
    • 在某些情况下,过度的平滑处理可能会导致重要信息的丢失,反而使数据看起来更加嘈杂。
  4. 实际应用中的建议

    • 在进行平滑处理时,应选择合适的平滑方法和参数,以确保既能有效减少噪声,又能保留数据中的重要信息。
    • 如果增加训练轮次是为了降低噪声,可能需要同时调整其他超参数,如学习率、正则化参数等,以达到最佳效果。

总之,平滑处理通常是为了减少噪声,而不是增加噪声。如果在实际应用中遇到噪声增加的问题,建议检查平滑处理的方法和参数,或者考虑其他可能的因素。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/39718.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

绿盟CSSP靶场-将已有虚拟机创建为新镜像作为新虚拟机模板

将部署了自定义软件的虚拟机,【保持镜像】将这个在运的虚拟机存为一个新的镜像。 为了保证上传的镜像是完整的,勾选【全量镜像】。 等待镜像上传完成,可以看到刚刚上传的镜像,状态也为已上传。 将镜像从私有改为共享,…

VMWare Ubuntu 详细安装教程

VMWare Ubuntu 详细安装教程 一、下载安装VMware二、下载 Ubuntu 镜像文件三、安装 Ubuntu四、开启虚拟机 一、下载安装VMware 官网下载地址https://www.vmware.com/products/desktop-hypervisor/workstation-and-fusion知乎大佬的博客原文,含下载地址https://zhua…

嵌入式c学习八

练习 一、指针数组与数组指针 #include <stdio.h>int main() {//c是一个指针数组&#xff0c;里面有4个元素每个元素都是指针 char *c[] {"hello", "world", "homed", "gotogo"}; //cp是指针数组&#xff0c;有4个元素&#…

LLaMA-Factory微调大模型

LLaMA-Factory安装 github 下载 LLaMA-Factory项目 创建虚拟环境 conda create -n llama_factory python3.10 激活 activate llama_factorytorch 安装 conda install pytorch2.3.1 torchvision0.18.1 torchaudio2.3.1 pytorch-cuda12.1 -c pytorch -c nvidia依赖安装 …

第一讲 | 解锁C++编程能力:基础语法解析

C入门基础 一、C的第一个程序二、命名空间三、C输入&输出四、缺省参数/默认参数五、函数重载六、引用1.引用的特性2.引用的使用引用做返回值场景 3.const引用只有指针和引用涉及权限放大、缩小的问题&#xff0c;普通变量没有 4.指针和引用的关系 七、inline八、nullptr 一…

【颠覆性缓存架构】Caffeine双引擎缓存实战:CPU和内存双优化,命中率提升到92%,内存减少75%

千万级QPS验证&#xff01;Caffeine智能双缓存实现 92%命中率&#xff0c;内存减少75% 摘要&#xff1a; 本文揭秘千万级流量场景下的缓存革命性方案&#xff01;基于Caffeine打造智能双模式缓存系统&#xff0c;通过冷热数据分离存储与精准资源分配策略&#xff0c;实现CPU利…

JVM 03

今天是2025/03/24 15:21 day 11 总路线请移步主页Java大纲相关文章 今天进行JVM 5,6 个模块的归纳 首先是JVM的相关内容概括的思维导图 5. 优化技术 JVM通过多种优化技术提升程序执行效率&#xff0c;核心围绕热点代码检测和编译优化实现动态性能提升。 热点代码检测 JVM…

wordpress-网站百宝箱插件

含置顶,网页宠物, 哀悼, 禁止复制, 禁止查看源码, 弹幕, WP优化,媒体分类,预加载,定时发布,在线客服, 留言板, 手机客服, 网站背景, 公告, 跑马灯, 水印, 分享, 打赏, 海报图, 广告,数据库管理,图片加载特效。等综合功能插件

Git 钩子:特定操作脚本

Git 钩子 在特定 Git 操作发生时自动触发的脚本&#xff1b; 可以从提交规范、代码质量、自动化流程、分支管理、安全性检查等多个方面进行配置&#xff0c;帮助团队提高开发效率和代码质量&#xff1b; 本地 记录提交检验 commit-msg 修改&#xff1a;\test\.git\hooks\c…

职坐标:互联网行业职业发展路径解析

内容概要 当前&#xff0c;互联网行业正以指数级速度重塑全球产业格局。数据显示&#xff0c;我国互联网市场规模在2019年上半年实现17.9%的同比增速&#xff0c;而随着工业互联网、5G等前沿技术的加速落地&#xff0c;这一增长趋势仍在强化。工信部近期发布的《新型信息基础设…

红数码影视(RED Digital Cinema)存储卡格式化后的恢复方法

红数码影视(RED Digital Cinema)的摄像机可以生成两种RAW级高清视频文件&#xff0c;一种是R3D&#xff0c;一种是MOV。其中MOV属于苹果(apple)公司的QT视频封装结构&#xff0c;使用的视频编码是Apple ProRes;而R3D则是RED公司自创的RAW视频文件&#xff0c;这种文件解码需要使…

Gitee上库常用git命令

Gitee上库常用git命令 1、Fork 项目2、个人仓库修改3、追加提交4、创建PR5、多笔commit合一 1、Fork 项目 2、个人仓库修改 git add . // -s 表示自动添加邮箱签名信息&#xff0c;-m表示其后跟随commit描述 git commit -sm “add transition freeze” git push origin [目标…

阿里开源的免费数据集成工具——DataX

企业里真实的数据流转是什么样子的呢&#xff1f; 左侧描述了一个企业真实的样子&#xff0c;我们总是需要把数据从一个地方搬到另一个地方&#xff0c;最后就是搬来搬去搬成了一张张解不开的网。 右侧则表达了使用DataX为中心实现数据的同步。 什么是DataX DataX是一个异构…

SpringBoot学习笔记(主)

文章目录 SpringBoot概述自动装配&#xff08;部分&#xff09;概述原理简述相关解释源码位置EnableAutoConfigurationAutoConfigurationImportSelector 配置文件yaml语法单双引号列表多行字符串 配置文件的位置和加载顺序配置文件取值运行jar包 Springboot整合springmvc自动管…

python多线程和多进程的区别有哪些

python多线程和多进程的区别有七种&#xff1a; 1、多线程可以共享全局变量&#xff0c;多进程不能。 2、多线程中&#xff0c;所有子线程的进程号相同&#xff1b;多进程中&#xff0c;不同的子进程进程号不同。 3、线程共享内存空间&#xff1b;进程的内存是独立的。 4、同一…

docker 安装部署 canal

1 mysql 安装 1.1 拉取镜像 docker pull mysql:8.4.41.2 创建挂载目录 mkdir -p /user/lzl/tool/docker/mysql/mysql_8.4.4/home/confmkdir -p /user/lzl/tool/docker/mysql/mysql_8.4.4/home/datamkdir -p /user/lzl/tool/docker/mysql/mysql_8.4.4/home/log1.3 编辑配置文…

基于SpringBoot的图书借阅小程序+LW参考示例

系列文章目录 1.基于SSM的洗衣房管理系统原生微信小程序LW参考示例 2.基于SpringBoot的宠物摄影网站管理系统LW参考示例 3.基于SpringBootVue的企业人事管理系统LW参考示例 4.基于SSM的高校实验室管理系统LW参考示例 5.基于SpringBoot的二手数码回收系统原生微信小程序LW参考示…

ElasticSearch快速入门--实现分词搜索

分词题目搜索 使用Elasticsearch实现题目数据的存储和分词搜索&#xff0c;需要将数据库的数据同步到 Elasticsearch。 ElasticSearch入门 ElasticSearch&#xff08;简称ES&#xff09;是一个开源的分布式搜索和数据分析引擎&#xff0c;用Java开发并且是当前最流行的开源的…

debug - 安装.msi时,为所有用户安装程序

文章目录 debug - 安装.msi时&#xff0c;为所有用户安装程序概述笔记试试在目标.msi后面直接加参数的测试 备注备注END debug - 安装.msi时&#xff0c;为所有用户安装程序 概述 为了测试&#xff0c;装了一个test.msi. 安装时&#xff0c;只有安装路径的选择&#xff0c;没…

Skyeye 云智能制造办公系统 VUE 版本 v3.15.14 发布

Skyeye 云智能制造&#xff0c;采用 Springboot winUI 的低代码平台、移动端采用 UNI-APP。包含 30 多个应用模块、50 多种电子流程&#xff0c;CRM、PM、ERP、MES、ADM、EHR、笔记、知识库、项目、门店、商城、财务、多班次考勤、薪资、招聘、云售后、论坛、公告、问卷、报表…