跳到主要内容
极客日志极客日志面向AI+效率的开发者社区
首页博客GitHub 精选镜像工具UI配色美学隐私政策关于联系
搜索内容 / 工具 / 仓库 / 镜像...⌘K搜索
注册
博客列表
PythonAI算法

LLama-Factory 实战:基于自建数据集微调 Qwen7B 模型

综述由AI生成使用 LLaMA-Factory 框架微调 Qwen7B 模型的完整流程。内容包括环境安装、自定义数据集构建与注册、YAML 配置文件详解、训练命令执行、LoRA 权重合并及模型推理测试。文章还深入分析了超参数调节策略、数据质量对效果的影响、灾难性遗忘的规避方法以及多任务学习的注意事项,为大模型垂直领域应用提供技术参考。

数字游民发布于 2025/2/6更新于 2026/6/218 浏览
LLama-Factory 实战:基于自建数据集微调 Qwen7B 模型

LLama-Factory 实战:基于自建数据集微调 Qwen7B 模型

一、项目简介

LLaMA-Factory 是一个高效的大模型训练框架,支持多种主流大模型的微调与推理。它提供了丰富的训练方法、精度选项及算法支持,旨在降低大模型应用的门槛。

项目特色

  • 多种模型:支持 LLaMA、Qwen、Yi、Gemma、Baichuan、ChatGLM、Phi 等主流开源模型。
  • 集成方法:涵盖(增量)预训练、指令监督微调(SFT)、奖励模型训练、PPO/DPO/KTO/ORPO 等对齐训练。
  • 多种精度:支持 16 比特全参数微调、冻结微调、LoRA 微调以及基于 AQLM/AWQ/GPTQ 的 2/3/4/5/6/8 比特 QLoRA 微调。
  • 先进算法:内置 GaLore、BAdam、DoRA、LongLoRA、LoRA+、PiSSA 等优化算法。
  • 实用技巧:集成 FlashAttention-2、Unsloth、RoPE scaling、NEFTune 等技术提升效率。
  • 实验监控:支持 LlamaBoard、TensorBoard、Wandb、MLflow 等监控工具。
  • 极速推理:提供基于 vLLM 的 OpenAI 风格 API、浏览器界面和命令行接口。

二、硬件依赖

以下是不同微调方法及模型规模下的显存估算值(仅供参考):

方法精度7B13B30B70B
FullAMP120GB240GB600GB1200GB
Full16bit60GB120GB300GB600GB
Freeze16bit20GB40GB80GB200GB
LoRA16bit16GB32GB64GB160GB
QLoRA8bit10GB20GB40GB80GB
QLoRA4bit
6GB
12GB
24GB
48GB

三、环境安装

3.1 克隆项目

git clone --depth 1 https://github.com/hiyouga/LLaMA-Factory.git
cd LLaMA-Factory

3.2 安装依赖

根据需求安装 PyTorch 及相关指标库:

pip install -e ".[torch,metrics]"

若需使用特定加速库(如 Unsloth),可额外安装对应插件。

四、构建自己的数据集

在指令监督微调(SFT)中,数据格式通常遵循以下 JSON 结构:

[
  {
    "instruction": "你是一个舆情分析专家,擅长分析一段文字的舆情类型。现在请你判断下述语句,任务 1,是否与负面新闻,你的回答只能从是或不是选择一个,任务 2,是否与负面情绪,你的回答只能从是或不是中选择一个。例如:待判断语句:今天合肥的天气真好。你的回复:1,不是,2,不是。现在待判断语句为:{}",
    "input": "2023 年 3 月 16 日 14 时 55 分许,鄂温克族自治旗伊敏河镇发生一起一般事故,造成一人死亡,直接经济损失人民币 200 万元。",
    "output": "任务 1:是,原文中提到了负面新闻,这些词汇与负面新闻相关。任务 2:不是,由于原文没有提到负面情绪,这和没有关系,因此不是。"
  }
]

字段说明:

  • instruction:必填。人类指令模板,包含占位符 {} 用于拼接 input。
  • input:选填。用户输入内容,与 instruction 拼接后作为完整指令。
  • output:必填。模型期望的回答。
  • system:选填。系统提示词,用于设定角色或约束。
  • history:选填。多轮对话历史,格式为 ["指令", "回答"] 列表。

注册数据集

将准备好的数据集文件(如 my_train_data.json)放入 data 目录下,并编辑 data/dataset_info.json 添加配置:

{
  "my_train_data": {
    "file_name": "my_train_data.json",
    "columns": {
      "prompt": "instruction",
      "query": "input",
      "response": "output"
    }
  }
}

注意记录数据集名称(如 my_train_data),后续训练时需指定。

五、修改配置文件 (YAML)

创建训练配置文件 examples/train_lora/mytrain_lora_sft.yaml:

### model
model_name_or_path: /path/to/qwen-7b-chat

### method
stage: sft
do_train: true
finetuning_type: lora
lora_target: all

### dataset
dataset: my_train_data
template: qwen
cutoff_len: 4096
max_samples: 1000
overwrite_cache: true
preprocessing_num_workers: 16

### output
output_dir: saves/qwen/lora/sft
logging_steps: 10
save_steps: 100
plot_loss: true
overwrite_output_dir: true

### train
per_device_train_batch_size: 1
gradient_accumulation_steps: 8
learning_rate: 1.0e-4
num_train_epochs: 3.0
lr_scheduler_type: cosine
warmup_ratio: 0.1
bf16: true
ddp_timeout: 180000000

### eval
val_size: 0.1
per_device_eval_batch_size: 1
eval_strategy: steps
eval_steps: 500

关键参数解析:

  • stage: 设置为 sft 进行指令微调。
  • finetuning_type: 选择 lora 进行参数高效微调。
  • lora_target: 设置 all 表示对所有线性层应用 LoRA,也可指定如 q_proj,v_proj。
  • cutoff_len: 最大上下文长度,根据显存调整。
  • learning_rate: 学习率建议从 1e-4 开始,根据 Loss 曲线调整。
  • bf16: 启用 BF16 混合精度训练以节省显存并提高稳定性。

六、开始训练

6.1 使用 CLI 命令

llamafactory-cli train examples/train_lora/mytrain_lora_sft.yaml

6.2 使用 Python 脚本

CUDA_VISIBLE_DEVICES=0,1,2,3 python src/train_bash.py \
  --stage sft \
  --do_train \
  --model_name_or_path /app/model \
  --dataset my_train_data \
  --finetuning_type lora \
  --lora_target q_proj,v_proj \
  --output_dir /app/output \
  --overwrite_cache \
  --per_device_train_batch_size 1 \
  --gradient_accumulation_steps 1 \
  --lr_scheduler_type cosine \
  --logging_steps 10 \
  --save_steps 1000 \
  --learning_rate 5e-5 \
  --num_train_epochs 3.0 \
  --template qwen

七、合并模型

训练完成后,需要将 LoRA 权重合并到基座模型中以便部署:

llamafactory-cli export examples/merge_lora/my_lora_sft.yaml

配置文件示例:

### model
model_name_or_path: meta-llama/Meta-Llama-3-8B-Instruct
adapter_name_or_path: saves/llama3-8b/lora/sft
template: llama3
finetuning_type: lora

### export
export_dir: models/llama3_lora_sft
export_size: 2
export_device: cpu
export_legacy_format: false

或使用命令行:

CUDA_VISIBLE_DEVICES=0 python /app/src/export_model.py \
  --model_name_or_path /app/model/ \
  --adapter_name_or_path /app/output/checkpoint-3000/ \
  --template default \
  --finetuning_type lora \
  --export_dir /app/lora_result/20240422_1519/ \
  --export_size 2 \
  --export_legacy_format False

八、模型推理

8.1 命令行交互

修改 inference/yaml 中的路径后运行:

llamafactory-cli chat examples/inference/llama3_lora_sft.yaml

8.2 Python Demo

python /app/src/cli_demo.py \
  --model_name_or_path /app/lora_result/20240422_1519/ \
  --template=qwen

九、常见问题与最佳实践

9.1 超参数调节

  • Rank 与 Alpha:简单任务 rank=16, alpha=32 通常足够;复杂任务可适当增加。
  • 学习率:LoRA 微调常用 1e-4。观察 Loss 曲线,若震荡剧烈则调低,若收敛过慢则调高。

9.2 效果不佳排查

  1. 数据质量:检查指令是否清晰,输出是否符合预期。高质量数据比数量更重要。
  2. 数据平衡:确保正负样本、不同类别分布均衡,避免模型偏向某一类。
  3. 指令友好度:困惑度较低的指令更容易被模型理解。

9.3 数据量建议

  • 简单任务:100-300 条数据。
  • 中等难度:1000 条以上。
  • 困难任务:可能需要 3000-10000 条甚至更多。

9.4 灾难性遗忘

微调可能导致模型原有能力下降。解决方法:

  • 混合少量通用知识数据(如 Alpaca 英文演示集)。
  • 使用较低 Rank 的 LoRA。
  • 采用多阶段 SFT 策略,分步学习不同能力。

9.5 多能力学习

若需模型同时掌握多个能力,需注意数据集的相关性和比例分配。通过精心设计的 Prompt 和混合数据,可实现单一模型的多任务处理。

十、总结

本文详细介绍了使用 LLaMA-Factory 框架对 Qwen7B 模型进行基于自建数据集的微调全流程。从环境搭建、数据准备、配置编写到训练、合并及推理,涵盖了核心步骤。在实际应用中,请根据具体业务场景调整超参数和数据质量,以获得最佳效果。

目录

  1. LLama-Factory 实战:基于自建数据集微调 Qwen7B 模型
  2. 一、项目简介
  3. 项目特色
  4. 二、硬件依赖
  5. 三、环境安装
  6. 3.1 克隆项目
  7. 3.2 安装依赖
  8. 四、构建自己的数据集
  9. 注册数据集
  10. 五、修改配置文件 (YAML)
  11. model
  12. method
  13. dataset
  14. output
  15. train
  16. eval
  17. 六、开始训练
  18. 6.1 使用 CLI 命令
  19. 6.2 使用 Python 脚本
  20. 七、合并模型
  21. model
  22. export
  23. 八、模型推理
  24. 8.1 命令行交互
  25. 8.2 Python Demo
  26. 九、常见问题与最佳实践
  27. 9.1 超参数调节
  28. 9.2 效果不佳排查
  29. 9.3 数据量建议
  30. 9.4 灾难性遗忘
  31. 9.5 多能力学习
  32. 十、总结
  • 💰 8折买阿里云服务器限时8折了解详情
  • Magick API 一键接入全球大模型注册送1000万token查看
  • 🤖 一键搭建Deepseek满血版了解详情
  • 一键打造专属AI 智能体了解详情
极客日志微信公众号二维码

微信扫一扫,关注极客日志

微信公众号「极客日志V2」,在微信中扫描左侧二维码关注。展示文案:极客日志V2 zeeklog

更多推荐文章

查看全部
  • C++ 智能指针:彻底解决内存泄漏问题
  • DeepSeek 深度使用指南:提示词技巧与本地知识库搭建
  • Python 开发必备十大工具:从 IDE 到数据分析库详解
  • 常见位运算总结
  • LeetCode 128:哈希集合巧解最长连续序列
  • Spring AI 调用大模型的几种方案实践
  • 基于 LangChain 的 RAG 技术实践与实现
  • Web3 社区运营指南
  • Rust 异步并发安全与内存管理最佳实践
  • C++ STL 容器详解:set、map 及其底层原理
  • Arduino BLDC 模糊动态任务调度机器人
  • FAIR plus 机器人全产业链接会:2026 深圳展会前瞻
  • VR 健身应用开发实战:基于 Unity 与 SideQuest 的全流程复盘
  • MacOS 下使用 Docker 极简安装 OpenClaw 并对接飞书
  • 哈希表经典算法题整理
  • 高级加密标准(AES)算法详解
  • 数据结构:单链表基础与核心操作实现
  • C++ 备忘录模式实战:对象状态保存与恢复
  • 前端开发中常见的加密与编码方案解析
  • 用 AI 辅助解析 B 站充电视频页面结构与鉴权逻辑

相关免费在线工具

  • 加密/解密文本

    使用加密算法(如AES、TripleDES、Rabbit或RC4)加密和解密文本明文。 在线工具,加密/解密文本在线工具,online

  • RSA密钥对生成器

    生成新的随机RSA私钥和公钥pem证书。 在线工具,RSA密钥对生成器在线工具,online

  • Mermaid 预览与可视化编辑

    基于 Mermaid.js 实时预览流程图、时序图等图表,支持源码编辑与即时渲染。 在线工具,Mermaid 预览与可视化编辑在线工具,online

  • 随机西班牙地址生成器

    随机生成西班牙地址(支持马德里、加泰罗尼亚、安达卢西亚、瓦伦西亚筛选),支持数量快捷选择、显示全部与下载。 在线工具,随机西班牙地址生成器在线工具,online

  • Gemini 图片去水印

    基于开源反向 Alpha 混合算法去除 Gemini/Nano Banana 图片水印,支持批量处理与下载。 在线工具,Gemini 图片去水印在线工具,online

  • curl 转代码

    解析常见 curl 参数并生成 fetch、axios、PHP curl 或 Python requests 示例代码。 在线工具,curl 转代码在线工具,online