从零安装 LLaMA-Factory 微调 Qwen 大模型成功及所有的坑

文章目录

  • 从零安装 LLaMA-Factory 微调 Qwen 大模型成功及所有的坑
    • 一 参考
    • 二 安装
    • 三 启动
      • 准备大模型文件
    • 四 数据集(关键)!
      • 4.1 Alapaca格式
      • 4.2 sharegpt
      • 4.3 在 dataset_info.json 中注册
      • 4.4 官方 alpaca_zh_demo 例子 999条数据, 本机微调 5分钟
      • 4.5 我的数据(关键)
        • 4.6 微调成功但是新模块问答都失败(巨坑)
        • 小数据微调参数!!!
        • 巨坑 数据集的内容,要差异够大!!!
        • TODO 扩展阅读,
    • 五 TODO LLaMaFactory 参数详解

从零安装 LLaMA-Factory 微调 Qwen 大模型成功及所有的坑

2025-1-22

老规矩,感谢所有参考文章的作者。少走很多弯路。

一 参考

【1】llama-factory使用教程

这里有各种依赖的版本。 似乎不用。直接安装,一键成功。

【2】学大模型必看!手把手带你从零微调大模型

微调 零一 大模型。

【3】【Qwen2微调实战】LLaMA-Factory框架对Qwen2-7B模型的微调实践

流程主参考文章

【4】LLaMA-Factory QuickStart
【5】官网 gitcode 镜像

【6】LLaMa-Factory部署及llamafactory-cli webui命令无法打开ui界面问题解决记录

私链转公链

二 安装

  • 前置条件

N卡 在 WSL2 Ubuntu22.04 环境下装 cuda toolkit 见这篇文章
WSL2 Ubuntu22.04 部署配置Xinference和所有的坑

  • 安装

git clone --depth 1 https://github.com/hiyouga/LLaMA-Factory.git
> 参数‘--depth 1’, 只clone 最近一次 commit后的所有仓库。就是不需要之前的 commit 历史记录。或者下载代码zip 包,解压到本地。
unzip archive.zip -d /path/to/destinationconda create -n llama_factory python=3.10
conda activate llama_factory
cd LLaMA-Factory
pip install -e '.[torch,metrics]'Attempting uninstall: datasets
Found existing installation: datasets 3.2.0
Uninstalling datasets-3.2.0:
Successfully uninstalled datasets-3.2.0
Successfully installed accelerate-1.0.1 contourpy-1.3.1 cycler-0.12.1 datasets-3.1.0 docstring-parser-0.16 fire-0.7.0 fonttools-4.55.3 jieba-0.42.1 joblib-1.4.2 kiwisolver-1.4.8 llamafactory-0.9.2.dev0 matplotlib-3.10.0 nltk-3.9.1 peft-0.12.0 pyparsing-3.2.1 rouge-chinese-1.0.3 shtab-1.7.1 tokenizers-0.20.3 transformers-4.46.1 trl-0.9.6 tyro-0.8.14

一次成功。

  • 验证
import torch
torch.cuda.current_device()
torch.cuda.get_device_name(0)
torch.__version__>>> torch.cuda.get_device_name(0)
'NVIDIA GeForce RTX 4070 SUPER'
>>> torch.__version__
'2.5.1+cu124'
llamafactory-cli train -h(mypy310) rainbow@zy-pc-01:~/LLaMA-Factory-main$ llamafactory-cli train -h
usage: llamafactory-cli [-h] [--ray_run_name RAY_RUN_NAME] [--ray_num_workers RAY_NUM_WORKERS][--resources_per_worker RESOURCES_PER_WORKER][--placement_strategy {SPREAD,PACK,STRICT_SPREAD,STRICT_PACK}]options:-h, --help            show this help message and exit

三 启动

cd /home/***/LLaMA-Factory-main
llamafactory-cli webui

注意:在刚才安装的conda环境下启动

切换到 LLaMA-Factory-main 目录,因为需要识别数据集文件夹

准备大模型文件

下载略
因为我通过 Xinference 已经下载了, 只需要提供路径即可。

Qwen1.5-1.8B
/home/xinference/modelscope/hub/qwen/Qwen1___5-1___8B-Chat/

大模型路径, 设置ok。 就可以 chat。

  • 坑 wsl 下 Ubuntu 浏览器中文乱码
sudo apt-get remove firefox
sudo apt-get remove --purge firefox

卸载 Ubuntu的浏览器, 用 windows 的浏览器就ok。

LLama Factory 运行界面报错问题解决方法-DJT
export GRADIO_ROOT_PATH=xxx

这是解决云端部署中文乱码的。

  • 坑 Failed to create DBus proxy for org.a11y.Bus: Could not connect: No such file or directory

没解决, 是个warning, 貌似没有任何影响。后续微调成功,chat也成功。

四 数据集(关键)!

官网文档

llama_factory/data
这里默认是llama-factory中的data文件夹中的数据,在使用自己的数据集的时候,可以把数据集文件直接放到data文件夹下。
注意,无论是否放到data文件夹下,记得在dataset_info.json 中添加你要用的数据集信息,包括名称和路径,否则在页面中是加载不出来的。

必须! 如果有自定义数据, 必须在dataset_info.json中注册。

【04】LLaMA-Factory微调大模型——数据准备

一、数据格式
LLaMA-Factory支持 alpaca 格式和 sharegpt 格式的数据集。

4.1 Alapaca格式

[{"instruction": "人类指令(必填)","input": "人类输入(选填)","output": "模型回答(必填)","system": "系统提示词(选填)","history": [["第一轮指令(选填)", "第一轮回答(选填)"],["第二轮指令(选填)", "第二轮回答(选填)"]]}
]

官方自带例子
alpaca_zh_demo.json

[{"instruction": "识别并解释给定列表中的两个科学理论:细胞理论和日心说。","input": "","output": "细胞理论是生物科学的一个理论,它认为所有生命体都是由微小的基本单元——细胞所构成。这是生物学的一个基础理论,认为细胞是所有生物的基本结构和功能单位,所有的生物都是由一个或多个细胞组成,细胞只能通过细胞分裂产生新的细胞。这一理论由薛定谔、施瓦内和雪莱于1839年首次提出。\n\n日心说是指太阳是太阳系的中心,也就是说,行星围绕太阳旋转的理论。这个理论打破了传统的地心说观点,认为地球并不是宇宙的中心。日心说的提出者是尼古拉·哥白尼,他在16世纪初发表了他的著作《天体运行论》,阐述了太阳系行星围绕太阳运行的模型,为天文学的发展做出了巨大贡献。"},{"instruction": "输入三支篮球队的名称并生成一个适当的口号。","input": "输入:俄克拉荷马城雷霆队,芝加哥公牛队,布鲁克林网队。","output": "输出: \"雷霆,公牛和网队:各显神通,角逐群雄!\""}
]
  • instruction 和 input
    在指令监督微调时,instruction 列对应的内容会与 input 列对应的内容拼接后作为人类指令,
    即人类指令为 instruction\n input。
    而 output 列对应的内容为模型回答。

所以, 上面篮球队的例子中。 AI拿到的输入如下
“输入三支篮球队的名称并生成一个适当的口号。输入:俄克拉荷马城雷霆队,芝加哥公牛队,布鲁克林网队。”

  • system
    如果指定,system 对应的内容将被作为系统提示词。

  • history
    history 是由多个字符串二元组构成的列表,分别代表历史消息中每轮对话的指令和回答。

注意在指令监督微调时,历史消息中的回答内容也会被用于模型学习。

4.2 sharegpt

相比 alpaca 格式的数据集,sharegpt 格式支持更多的角色种类,
例如 human、gpt、observation、function 等等。它们构成一个对象列表呈现在 conversations 列中。
其中 human 和 observation 必须出现在奇数位置,gpt 和 function 必须出现在偶数位置。

sharegpt 格式如下:

[{"conversations": [{"from": "human","value": "人类指令"},{"from": "function_call","value": "工具参数"},{"from": "observation","value": "工具结果"},{"from": "gpt","value": "模型回答"}],"system": "系统提示词(选填)","tools": "工具描述(选填)"}
]

4.3 在 dataset_info.json 中注册

LLaMA-Factory/data 目录中的 dataset_info.json 文件中包含了所有可用的数据集。
如果使用自定义数据集,首先需要在 dataset_info.json 文件中添加数据集描述,

"数据集名称": {"hf_hub_url": "Hugging Face 的数据集仓库地址(若指定,则忽略 script_url 和 file_name)","ms_hub_url": "ModelScope 的数据集仓库地址(若指定,则忽略 script_url 和 file_name)","script_url": "包含数据加载脚本的本地文件夹名称(若指定,则忽略 file_name)","file_name": "该目录下数据集文件夹或文件的名称(若上述参数未指定,则此项必需)","formatting": "数据集格式(可选,默认:alpaca,可以为 alpaca 或 sharegpt)","ranking": "是否为偏好数据集(可选,默认:False)","subset": "数据集子集的名称(可选,默认:None)","split": "所使用的数据集切分(可选,默认:train)","folder": "Hugging Face 仓库的文件夹名称(可选,默认:None)","num_samples": "该数据集所使用的样本数量。(可选,默认:None)","columns(可选)": {"prompt": "数据集代表提示词的表头名称(默认:instruction)","query": "数据集代表请求的表头名称(默认:input)","response": "数据集代表回答的表头名称(默认:output)","history": "数据集代表历史对话的表头名称(默认:None)","messages": "数据集代表消息列表的表头名称(默认:conversations)","system": "数据集代表系统提示的表头名称(默认:None)","tools": "数据集代表工具描述的表头名称(默认:None)","images": "数据集代表图像输入的表头名称(默认:None)","chosen": "数据集代表更优回答的表头名称(默认:None)","rejected": "数据集代表更差回答的表头名称(默认:None)","kto_tag": "数据集代表 KTO 标签的表头名称(默认:None)"},"tags(可选,用于 sharegpt 格式)": {"role_tag": "消息中代表发送者身份的键名(默认:from)","content_tag": "消息中代表文本内容的键名(默认:value)","user_tag": "消息中代表用户的 role_tag(默认:human)","assistant_tag": "消息中代表助手的 role_tag(默认:gpt)","observation_tag": "消息中代表工具返回结果的 role_tag(默认:observation)","function_tag": "消息中代表工具调用的 role_tag(默认:function_call)","system_tag": "消息中代表系统提示的 role_tag(默认:system,会覆盖 system column)"}
}

对于alpaca 格式的数据,dataset_info.json 中的数据集注册描述应为:


"<your dataset name>": {"file_name": "<your dataset file.json>","columns": {"prompt": "instruction","query": "input","response": "output","system": "system","history": "history"}
}

如上面例子中 alpaca_zh_demo 在dataset_info.json中的注册信息如下。

{"identity": {"file_name": "identity.json"},"alpaca_en_demo": {"file_name": "alpaca_en_demo.json"},"alpaca_zh_demo": {"file_name": "alpaca_zh_demo.json"},
}

数据集注册方便, 大多数参数用默认就好,
最简注册,只需要“数据集名字”和“数据集文件的名字”

4.4 官方 alpaca_zh_demo 例子 999条数据, 本机微调 5分钟

输入三支篮球队的名称并生成一个适当的口号。
俄克拉荷马城雷霆队,芝加哥公牛队,布鲁克林网队

微调之前
俄克拉荷马城雷霆队口号:“Thunderbolts Rule the City!”
芝加哥公牛队口号:“Bulls on the Rise #Bulls #Rise”
布鲁克林网队口号:“The Nets are Here to Stay #Nets #Stay”

微调之后 5分钟 4070

“雷霆猛兽,公牛铁血,网球队员,勇往直前。”

4.5 我的数据(关键)

学校成绩


你是python程序员。编写一段完整的python 程序。要求
- 按照下面个格式生成 n个同学的数据, 并保存为 alpaca_zh_my_demo.json
- 学号从1 到 n, 默认998
- 姓名按中国人姓名随机生成,分男女
- 性别,男女各一半
- 考试时间, 默认10月
- 数学,物理,化学的成绩从1到100
-
[{"instruction": "红星小学学号1成绩","input": "","output": "姓名:张三,	性别:男, 学号:1, 考试时间:10月,	数学:49,	物理:9,	化学:13"},{"instruction": "红星小学学号2成绩","input": "","output": "姓名:李四,	性别:女, 学号:1, 考试时间:10月,	数学:69,	物理:59,	化学:93"}
]
以下是一个完整的Python程序,用于生成指定格式的JSON数据并保存为文件。程序会随机生成998个学生的成绩数据,姓名随机生成,男女各占一半,考试时间为10月,成绩随机生成。
Python复制略

文件复制到 data 目录

cp /mnt/e/Tec/LLama-Factory/alpaca_zh_my_demo.json /home/LLaMA-Factory-main/data/
cat /home/LLaMA-Factory-main/data/alpaca_zh_my_demo.json

注册

/home/LLaMA-Factory-main/data/dataset_info.json
{"identity": {"file_name": "identity.json"},"alpaca_en_demo": {"file_name": "alpaca_en_demo.json"},"alpaca_zh_demo": {"file_name": "alpaca_zh_demo.json"},"alpaca_zh_my_demo": {"file_name": "alpaca_zh_my_demo.json","columns": {"prompt": "instruction","query": "input","response": "output"}},
4.6 微调成功但是新模块问答都失败(巨坑)

微调数据
{"instruction": "红星小学张三10月考试成绩是多少?","input": "","output": "姓名:张三, 性别:男, 学号:1, 考试时间:10月, 数学:66, 物理:66, 化学:66"
}

当提问 “红星小学张三10月考试成绩是多少?”
期望回答, “姓名:张三, 性别:男, 学号:1, 考试时间:10月, 数学:66, 物理:66, 化学:66”

刚开始怀疑是数据量的问题。
结果数据 9条,199条,999条数据,都微调失败。

小数据微调参数!!!

基于LLaMA-Factory微调llama3成为一个角色扮演大模型

如果训练的文件小,训练配置调大一点:
学习率: 2e-3(默认5e-5) 训练论数:10.0(默认3.0) 最大样本数:1000(默认1W)

特别感谢,这位作者提供的微调参数。
如果有知道原因的同学,能告诉我的话就更好了,我来更新。

只把张三的一条数据,添加到官方例子 “alpaca_zh_demo.json”, 让数据集中的每条数据各不相同。
设置如上参数。微调成功。

在这里插入图片描述

巨坑 数据集的内容,要差异够大!!!

{"instruction": "红星小学张三10月考试成绩是多少?","input": "","output": "姓名:张三, 性别:男, 学号:1, 考试时间:10月, 数学:66, 物理:66, 化学:66"},{"instruction": "红星小学冯超10月考试成绩是多少?","input": "","output": "姓名:冯超, 性别:男, 学号:2, 考试时间:10月, 数学:47, 物理:63, 化学:69"},{"instruction": "红星小学孙波10月考试成绩是多少?","input": "","output": "姓名:孙波, 性别:男, 学号:3, 考试时间:10月, 数学:98, 物理:96, 化学:98"}

如果是10条类似的成绩数据,提示词只有姓名不同,同样的参数,微调后,问答还是失败。

如果是10个学生成绩这种的数据,因为提示词只有姓名的不同, 微调不出来!!!

TODO 扩展阅读,

魔搭社区数据集
从Llama Factory数据集看模型微调和训练

微调数据集的准备
自我认知数据集
特定任务数据集
通用任务数据集

理解怎样设置数据集。如果是学生成绩这种,怎样配置数据集?

五 TODO LLaMaFactory 参数详解

从0学习LLaMaFactory参数解释说明

Finetuning method
Checkpoint path
Quantization bit/Enable quantization (QLoRA).
Quantization method
Chat template
RoPE scaling
Booster

Train tab
Stage
Data dir
Dataset
Learning rate (学习率, 关键参数!!!)
Epochs
Maximum gradient norm
Max samples
Compute type
Cutoff length
Batch size
Gradient accumulation
Val size
LR scheduler

Data dir
Dataset

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

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

相关文章

【Rabbitmq】Rabbitmq高级特性-发送者可靠性

Rabbitmq发送者可靠性 发送者重连发送者确认1.开启确认机制2.ReturnCallback3.ConfirmCallback MQ的可靠性数据持久化交换机持久化队列持久化消息持久化 Lazy Queue 总结其他文章 Rabbitmq提供了两种发送来保证发送者的可靠性&#xff0c;第一种叫发送者重连&#xff0c;第二种…

计算机网络 (55)流失存储音频/视频

一、定义与特点 定义&#xff1a;流式存储音频/视频是指经过压缩并存储在服务器上的多媒体文件&#xff0c;客户端可以通过互联网边下载边播放这些文件&#xff0c;也称为音频/视频点播。 特点&#xff1a; 边下载边播放&#xff1a;用户无需等待整个文件下载完成即可开始播放…

抖音小程序一键获取手机号

前端代码组件 <button v-if"!isFromOrderList"class"get-phone-btn" open-type"getPhoneNumber"getphonenumber"onGetPhoneNumber">一键获取</button>// 获取手机号回调onGetPhoneNumber(e) {var that this tt.login({f…

论文速读|NoteLLM: A Retrievable Large Language Model for Note Recommendation.WWW24

论文地址&#xff1a;https://arxiv.org/abs/2403.01744 bib引用&#xff1a; misc{zhang2024notellmretrievablelargelanguage,title{NoteLLM: A Retrievable Large Language Model for Note Recommendation}, author{Chao Zhang and Shiwei Wu and Haoxin Zhang and Tong Xu…

Day 15 卡玛笔记

这是基于代码随想录的每日打卡 222. 完全二叉树的节点个数 给你一棵 完全二叉树 的根节点 root &#xff0c;求出该树的节点个数。 完全二叉树 的定义如下&#xff1a;在完全二叉树中&#xff0c;除了最底层节点可能没填满外&#xff0c;其余每层节点数都达到最大值&#x…

【阿里云】使用docker安装nginx后可以直接访问

一、创建目录 mkdir -p config/{cert,conf.d} html logs二、上传nginx.conf的配置文件 user nginx; worker_processes auto;error_log /var/log/nginx/error.log notice; pid /var/run/nginx.pid;events {worker_connections 1024; }http {include /etc/ngin…

在elasticsearch中,document数据的写入流程如何?

本文将为您介绍文档内容是如何写入ES集群中。 数据写入ES集群的流程图如下 流程介绍 用户携带数据发起POST请求指向集群9200端口。9200端口将数据写入请求发给主分片。主分片会对数据进行分片计算分发给具体分片。&#xff08;计算方式&#xff1a;hash % primary_number_sha…

sentinel微服务保护

学习链接 SpringCloudRabbitMQDockerRedis搜索分布式 文章目录 学习链接1.初识Sentinel1.1.雪崩问题及解决方案1.1.1.雪崩问题1.1.2.超时处理1.1.3.仓壁模式1.1.4.断路器1.1.5.限流1.1.6.总结 1.2.服务保护技术对比1.3.Sentinel介绍和安装1.3.1.初识Sentinel官网地址github地址…

STM32-CAN总线

1.CAN总线简介 CAN总线是由BOSCH公司开发的一种简洁易用、传输速度快、易扩展、可靠性高的串行通信总线 2.CAN总线特征 两根通信线&#xff08;CAN_H、CAN_L&#xff09;&#xff0c;线路少&#xff0c;无需共地差分信号通信&#xff08;相对的是单端信号&#xff09;&#…

iOS 权限管理:同时请求相机和麦克风权限的最佳实践

引言 在开发视频类应用时&#xff0c;我们常常会遇到需要同时请求相机和麦克风权限的场景。比如&#xff0c;在用户发布视频动态时&#xff0c;相机用于捕捉画面&#xff0c;麦克风用于录制声音&#xff1b;又或者在直播功能中&#xff0c;只有获得这两项权限&#xff0c;用户…

DDD实战课 笔记

DDD实战课 作者&#xff1a;欧创新 01 | 微服务设计为什么要选择DDD&#xff1f; 微服务拆分困境产生的根本原因就是不知道业务或者微服务的边界到底在什么地方。 为什么 DDD 适合微服务&#xff1f; DDD 是一种处理高度复杂领域的设计思想&#xff0c;它试图分离技术实现的…

数据结构——算法基础

1、概念 算法(Algorithm)用来描述对特定问题的求解步骤&#xff0c;它是指令的有限序列&#xff0c;其中每一条指令代表一个或多个操作 算法的概念在计算机科学领域中几乎无处不在&#xff0c;在各种计算机系统的实现中&#xff0c;算法的设计往往处于核心的位置。计算机的问…

Glary Utilities Pro 多语便携版系统优化工具 v6.21.0.25

Glary Utilities是一款功能强大的系统优化工具软件&#xff0c;旨在帮助用户清理计算机垃圾文件、修复系统错误、优化系统性能等。 软件功能 清理和修复&#xff1a;可以清理系统垃圾文件、无效注册表项、无效快捷方式等&#xff0c;修复系统错误和蓝屏问题。 优化和加速&…

USART_串口通讯轮询案例(HAL库实现)

引言 前面讲述的串口通讯案例是使用寄存器方式实现的&#xff0c;有利于深入理解串口通讯底层原理&#xff0c;但其开发效率较低&#xff1b;对此&#xff0c;我们这里再讲基于HAL库实现的串口通讯轮询案例&#xff0c;实现高效开发。当然&#xff0c;本次案例需求仍然和前面寄…

【深度学习基础】多层感知机 | 权重衰减

【作者主页】Francek Chen 【专栏介绍】 ⌈ ⌈ ⌈PyTorch深度学习 ⌋ ⌋ ⌋ 深度学习 (DL, Deep Learning) 特指基于深层神经网络模型和方法的机器学习。它是在统计机器学习、人工神经网络等算法模型基础上&#xff0c;结合当代大数据和大算力的发展而发展出来的。深度学习最重…

Mac安装Homebrew

目录 安装修改homeBrew源常用命令安装卸载软件升级软件相关清理相关 安装 官网 https://brew.sh/不推荐官网安装方式&#xff08;很慢很慢或者安装失败联网失败&#xff09; 检测是否安装homebrewbrew -v执行安装命令 苹果电脑 常规安装脚本 &#xff08;推荐 完全体 几分钟就…

如何给自己的域名配置免费的HTTPS How to configure free HTTPS for your domain name

今天有小伙伴给我发私信&#xff0c;你的 https 到期啦 并且随手丢给我一个截图。 还真到期了。 javapub.net.cn 这个网站作为一个用爱发电的编程学习网站&#xff0c;用来存编程知识和面试题等&#xff0c;平时我都用业余时间来维护&#xff0c;并且还自费买了服务器和阿里云…

Word常见问题:嵌入图片无法显示完整

场景&#xff1a;在Word中&#xff0c;嵌入式图片显示不全&#xff0c;一部分图片在文字下方。如&#xff1a; 问题原因&#xff1a;因段落行距导致 方法一 快捷方式 选中图片&#xff0c;通过"ctrl1"快捷调整为1倍行距 方法二 通过工具栏调整 选中图片&#xff0…

VUE elTree 无子级 隐藏展开图标

这4个并没有下级节点&#xff0c;即它并不是叶子节点&#xff0c;就不需求展示前面的三角展开图标! 查阅官方文档如下描述&#xff0c;支持bool和函数回调处理&#xff0c;这里咱们选择更灵活的函数回调实现。 给el-tree结构配置一下props&#xff0c;注意&#xff01; :pr…

Picsart美易照片编辑器和视频编辑器

使用Picsart美易照片编辑器和视频编辑器&#xff0c;将您的创意变为现实。制作专业水准的拼贴画、设计并添加贴纸、快速移除和更换背景&#xff0c;体验流行编辑&#xff0c;比如 黄金时刻、镜中自拍、复古噪点滤镜或千禧滤镜。Picsart美易是一款一体式编辑器&#xff0c;拥有众…