AI大模型微调(三)------Qwen3模型Lora微调(使用Llamafactory)

AI大模型微调(三)------Qwen3模型Lora微调(使用Llamafactory)

AI大模型微调(三)------Qwen3模型Lora微调(使用Llamafactory)

文章目录


一、安装LLaMA-Factory&开发环境

开源项目地址:https://github.com/hiyouga/LLaMA-Factory
文档:https://llamafactory.readthedocs.io/zh-cn/latest/

# 创建新开发环境 conda create -n llama_factory_Qwen3 python=3.11-y conda activate llama_factory_Qwen3 (llama_factory_Qwen3) C:\Users\Administrator>D:# 下载项目 & 安装 git clone --depth 1 https://github.com/hiyouga/LLaMA-Factory.git cd LLaMA-Factory pip install -e ".[torch,metrics]"

在git失败时,清理DNS缓存,然后继续:

ipconfig/flushdns 

二、数据集

dataset_info.json 包含了所有经过预处理的本地数据集,以及在线数据集。如果您希望使用自定义数据集,请务必在 dataset_info.json 文件中添加对数据集及其内容的定义。目前项目支持 Alpaca 格式和 ShareGPT 格式的数据集。以本实践任务关注的微调数据集为例:

1.Alpaca

指令监督微调 (Instruct Tuning) 通过让模型学习详细的指令以及对应的回答来优化模型在特定指令下的表现。instruction 列对应的内容为人类指令,input 列对应的内容为人类输入,output 列对应的内容为模型回答。下面是一个例子:

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

在进行指令监督微调时,instruction 列对应的内容会与 input 列对应的内容拼接后作为最终的人类输入,即人类输入为 instruction\ninput。而 output 列对应的内容为模型回答。在上面的例子中,人类的最终输入是:

计算这些物品的总费用。 输入:汽车 - $3000,衣服 - $100,书 - $20。 

模型的回答是:

汽车、衣服和书的总费用为 $3000+ $100+ $20= $3120。 

如果指定 system 列对应的内容将被作为系统提示词。history 列是由多个字符串二元组构成的列表,分别代表历史消息中每轮对话的指令和回答。注意在指令监督微调时,历史消息中的回答内容也会被用于模型学习。

指令监督微调数据集的最终 格式要求 如下:

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

下面提供一个Alpaca 格式多轮对话的例子,对于单轮对话只需省略history列:

[{"instruction":"今天的天气怎么样?","input":"","output":"今天的天气不错,是晴天。","history":[["今天会下雨吗?","今天不会下雨,是个好天气。"],["今天适合出去玩吗?","非常适合,空气质量很好。"]]}]

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

"数据集名称":{"file_name":"data.json","columns":{"prompt":"instruction","query":"input","response":"output","system":"system","history":"history"}}

2.ShareGPT

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

下面是 sharegpt 格式的一个例子:

{"conversations":[{"from":"human","value":"你好,我出生于1990年5月15日。你能告诉我今天几岁了吗?"},{"from":"function_call","value":"{\"name\": \"calculate_age\", \"arguments\": {\"birthdate\": \"1990-05-15\"}}"},{"from":"observation","value":"{\"age\": 31}"},{"from":"gpt","value":"根据我的计算,你今天31岁了。"}],"tools":"[{\"name\": \"calculate_age\", \"description\": \"根据出生日期计算年龄\", \"parameters\": {\"type\": \"object\"}}"}

注意:其中 human 和 observation 必须出现在奇数位置,gpt 和 function 必须出现在偶数位置。

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

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

"数据集名称":{"file_name":"data.json","formatter":"sharegpt","columns":{"messages":"conversations","system":"system","tools":"tools"}}

3.自定义数据集

我们用于训练的数据也转换成 Alpaca 格式,然后在 data/dataset_info.json 中进行注册(如果不做字段名转换,则需要在注册的时候在 columns 字段中做两个数据的映射配置)。接下来,我们使用一个具体的例子来说明数据集的使用。该数据集是商品文案生成数据集,原始格式如下,很明显,训练目标是输入 content(也就是 prompt),输出 summary(对应 response)。

{"content":"类型#裤*版型#宽松*风格#性感*图案#线条*裤型#阔腿裤","summary":"宽松的阔腿裤这两年真的吸粉不少,明星时尚达人的心头爱。毕竟好穿时尚,谁都能穿出腿长2米的效果宽松的裤腿,当然是遮肉小能手啊。上身便..."}

想将该自定义数据集放到我们的系统中使用,则需要进行如下两步操作:
复制该数据集到 data 目录下
修改 data/dataset_info.json 新加内容完成注册,该注册同时完成了 3 件事:

  • 自定义数据集的名称为 my_local,后续训练的时候就使用这个名称来找到该数据集
  • 指定了数据集具体文件位置
  • 定义了原数据集的输入输出和我们所需要的格式之间的映射关系
{..."adgen_local":{"file_name":"AdvertiseGen/train.json","columns":{"prompt":"content","response":"summary"}}...}

三、LoRA指令微调

在准备好数据集之后,我们就可以开始准备训练了,我们的目标就是让原来的 LLaMA 模型能够学会我们定义的 “你是谁”,同时学会我们希望的商品文案的一些生成。
这里我们先使用命令行版本来训练,从命令行更容易学习相关的原理。

CUDA_VISIBLE_DEVICES=0 llamafactory-cli train ` --stage sft ` # 当前训练的阶段,枚举值,有"sft","pt","rm","ppo"等,代表了训练的不同阶段,这里我们是有监督指令微调 --do_train ` # 是否是训练模式 --model_name_or_path <local_model_path> `--dataset alpaca_gpt4_zh,identity,adgen_local ` # 使用的数据集列表,所有字段都需要按上文在data_info.json里注册,多个数据集用逗号分隔 --dataset_dir ./data ` # 数据集所在目录,这里是 data,也就是项目自带的data目录 --template qwen3 ` --finetuning_type lora ` # 微调训练的类型,枚举值,有"lora","full","freeze"等,这里使用lora --output_dir <local_lora_save_path>` # 训练结果保存的位置 --overwrite_cache `--overwrite_output_dir ` --cutoff_len 1024 ` # 训练数据集的长度截断 --preprocessing_num_workers 16` --per_device_train_batch_size 2 ` # 每个设备上的batch size,最小是1,如果GPU显存大,可以适当增加 --per_device_eval_batch_size 1` --gradient_accumulation_steps 8 `--lr_scheduler_type cosine ` --logging_steps 50 `--warmup_steps 20` --save_steps 100 `--eval_steps 50` --evaluation_strategy steps `--load_best_model_at_end ` --learning_rate 5e-5 `--num_train_epochs 5.0` --max_samples 1000 ` # 每个数据集采样多少数据 --val_size 0.1` # 随机从数据集中抽取多少比例的数据作为验证集 --plot_loss `--fp16 # 使用半精度混合精度训练 

训练完后就可以在设置的output_dir下看到如下内容,主要包含 3 部分:

  • adapter开头的就是 LoRA 保存的结果了,后续用于模型推理融合
  • training_loss和trainer_log等记录了训练的过程指标
  • 其他是训练时各种参数的备份

四、可视化/零代码微调

# 开启可视化操作界面# set这种方法是临时的(llama_factory_Qwen3) D:\LLaMA-Factory>set CUDA_VISIBLE_DEVICES=0# 开启(llama_factory_Qwen3) D:\LLaMA-Factory>llamafactory-cli webui 

1.模型下载源

因为选择huggingface整不了,选择了modelscope

2.微调方法

根据需要选择,这里选择的是LORA

3.Train-数据集

根据需要,可以选择LLamaFactory自带的,也可以用自己的数据集,

4.Train-计算类型

根据自己的显卡选

5.模型名称

选模型要根据自己显卡档次选,太大可能加载失败

在这里插入图片描述

6.导出微调过的模型

先创建个文件夹,然后把绝对路径放Export部分导出目录,最上边检查点路径选要合并的那一个

五、可能出现的问题

1.CUDA未找到

解决方法:在自己创的环境里换跟自己CUDA版本匹配的Pytorch版本
链接:Pytorch官网
下的不成功,就换个下载源

2.ValueError: Your setup doesn’t support bf16/gpu.

这个错误是因为你的 GPU 不支持 bf16(bfloat16)格式。这很常见,大多数消费级 NVIDIA 显卡都不支持 bf16(只有 RTX 30/40 系列部分型号支持)。换个适合的,直接在UI界面改

总结

记得关注么么叽

Read more

拖延症福音:AI论文软件 千笔ai写作 VS 灵感ai

拖延症福音:AI论文软件 千笔ai写作 VS 灵感ai

随着人工智能技术的迅猛迭代与普及,AI辅助写作工具已逐步渗透到高校学术写作场景中,成为本科生、研究生完成毕业论文不可或缺的辅助手段。越来越多面临毕业论文压力的学生,开始依赖各类AI工具简化写作流程、提升创作效率。但与此同时,市场上涌现的AI写作工具良莠不齐、功能各异,许多学生在海量选择中陷入“选择困难”与深层困惑——既担心工具专业性不足、无法适配学术写作规范,又顾虑工具效率低下、难以真正解决论文写作中的核心难题,在反复筛选、尝试中浪费大量宝贵时间,愈发陷入毕业论文的焦虑困境。在此背景下,千笔AI凭借其在学术写作场景中突出的高效性与严谨的专业性,在众多同类工具中脱颖而出,成为备受正在为毕业论文苦恼的学生关注的优选辅助工具。 一、强烈推荐:千笔AI —— 一站式学术支持“专家”,降低AI的性价比之选(推荐指数:★★★★★) 千笔AI针对学生论文写作的痛点,精心打造了八大核心功能,让论文写作变得前所未有的高效和规范。 1. 免费AI辅助选题:精准定位,快速确定研究方向 千笔AI的免费AI辅助选题功能,基于深度学习算法分析近5年顶刊论文和会议文献,构建学科知识图谱,帮助你快速确定一个既有

VS Code + WSL 下 GitHub 访问不稳定 & Copilot/Codex 一直 Thinking 的完整解决方案(国内平台安全版)

VS Code + WSL 下 GitHub 访问不稳定 & Copilot/Codex 一直 Thinking 的完整解决方案(国内平台安全版) 本文记录一次开发环境排查过程: 从 VS Code + WSL 环境下 GitHub 克隆失败,到 Copilot/Codex 长时间停在 “Thinking…” 的完整解决步骤。 特别说明: 文中提到的 “网络辅助工具”“连接加速端口”“外网连通性优化” 都指代常见的 网络优化方式,用于解决访问境外开发资源时的稳定性问题(GitHub、Copilot 等)。 📌 一、问题概述 使用 VS Code + WSL 进行开发时可能遇到以下问题: ❌ 1. Git clone 失败 fatal:

从 0 开始学习人工智能:什么是生成式人工智能 (AIGC)?

从 0 开始学习人工智能:什么是生成式人工智能 (AIGC)?

什么是生成式 AI? 简单来说,生成式 AI(Generative AI) 是一类拥有“创作本能”的人工智能。它不再仅仅是死板地执行命令,而是能根据你的只言片语(Prompt),从无到有地构建出原创内容——无论是文采斐然的文章、精美的画作、动感的视频、悦耳的乐曲,还是复杂的软件代码,它都能信手拈来。 在企业级应用中,生成式 AI 正扮演着“超级员工”的角色。依托于大语言模型(LLM)与深度学习的底层架构,它能自动化处理文本生成、图像设计、代码编写及结构化数据整合。从创意营销到智能客服,从 IT 自动运维到深层数据洞察,它正在各个商业维度释放前所未有的生产力潜能。 幕后功臣:模仿人脑的“深度学习” 生成式 AI 的强大,源于一种名为深度学习的精密算法。你可以把它理解为一种“模拟大脑”的思考方式。这些模型通过在海量数据海洋中游弋,精准捕捉信息背后的逻辑与模式,并将其转化为自己的“

【AIGC】即梦omnihuaman-api调用实现

即梦数字人视频生成(Streamlit Demo) 基于 火山引擎即梦(Jimeng)CV API 的数字人视频生成示例项目。 支持 图片 + 音频驱动 的数字人视频生成流程,集成了主体检测、Mask 选择、Prompt 控制、视频生成与下载等完整功能,适合 内部测试 / 技术演示 / 二次开发。 一、功能概览 ✅ 核心功能 * 🔐 AK / SK 在线填写 * 支持火山引擎 Access Key / Secret Key 在页面中直接输入 * 无需写死在代码中,便于多账号切换 * api key申请地址:https://console.volcengine.com/iam/keymanage * 🖼 图片上传(人物图像) * 支持 JPG / PNG