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

[特殊字符] 大模型微调实战:通过 LoRA 微调修改模型自我认知 [特殊字符]✨

🎯 本文目标

基于 Qwen1.5-1.8B-Chat 模型进行微调,修改模型自我认证!

🔹 修改前:当用户问"你是谁?"时,模型会回答:

"我是阿里云自主研发的超大规模语言模型,我叫通义千问。"

🔹 修改后:我们希望模型回答:

"我是 Archer,由 意琦行 研发。"


1. 🏋️‍♀️ 训练相关概念复习

上一篇文章 分享了模型训练的相关概念,这里简单复习一下:

ChatGPT 是如何炼成的?

训练一个大模型一般可以分为三步:

  1. 预训练(Pre Training,PT)

    • 提供海量数据,通过无监督预训练

    • 花费大量算力得到一个基座模型

    • 例如:Llama 3 在 24K GPU 集群上训练,使用了 15T 的数据

  2. 指令微调(Supervised Fine-Tuning, SFT)

    • 在基座模型上微调,让模型适应特定任务

    • 使用人类准备的问答对话数据

  3. 强化学习(RLHF)

    • 通过人类反馈优化生成质量

    • 遵循 3H 原则:Helpful、Honest、Harmless


🔧 微调方法

主流微调方法:

  • 全量参数更新(FFT):更新所有参数,资源消耗大

  • 参数高效微调(PEFT):只更新部分参数,效率高

PEFT 主要方法: (论文《Scaling Down to Scale Up》中详细介绍了40+种方法)

当前主流PEFT方法:Prompt Tuning、Prefix Tuning、LoRA、QLoRA


2. ⚙️ 安装 LLaMAFactory

环境准备:

  • Python 3.10.6

  • NVIDIA A40 GPU

git clone -b v0.8.1 https://github.com/hiyouga/LLaMA-Factory.git
cd LLaMA-Factory
pip install -e .[torch,metrics]

3. 📦 准备模型和数据集

下载模型:

apt install git-lfs -y
git lfs install
git lfs clone https://www.modelscope.cn/qwen/Qwen1.5-1.8B-Chat.git

准备数据集:

使用内置的 identity 数据集,用于修改模型自我认知。

替换变量:

sed -i 's/{{name}}/Archer/g; s/{{author}}/意琦行/g' data/identity.json

修改后示例:

{"instruction": "hi","input": "","output": "Hello! I am Archer, an AI assistant developed by 意琦行."
}

4. 🚀 开始微调!

执行微调命令:

modelPath=models/Qwen1.5-1.8B-Chat
​
llamafactory-cli train \--model_name_or_path $modelPath \--stage sft \--do_train \--finetuning_type lora \--template qwen \--dataset identity \--output_dir ./saves/lora/sft \# ...其他参数省略...

📊 训练结果分析:

  • Loss曲线:成功收敛

  • 评估指标

    predict_bleu-4 = 86.0879
    predict_rouge-1 = 91.5523

5. 🧪 测试效果

原始模型:

{"content": "我是来自阿里云的大规模语言模型,我叫通义千问。"
}

微调后模型:

{"content": "您好,我是 Archer,由 意琦行 开发,旨在为用户提供智能化的回答和帮助。"
}

🎉 成功修改了模型的自我认知!


6. 📝 总结

本文通过一个有趣的Demo,展示了如何使用LLaMAFactory进行LoRA微调:

  1. 准备模型和数据集

  2. 注册数据集

  3. 执行微调

  4. 分析训练结果

  5. 测试模型效果


💡 小贴士:微调就像教AI说"方言",既要保留通用能力,又要学会特定表达。调参就像烹饪,火候很重要哦!

🤔 思考题:如果你想教AI用莎士比亚风格写作,该怎么准备数据集呢?


📚 相关资源

  • LLaMA-Factory GitHub

  • Qwen模型库

相关文章:

  • L2-013 红色警报
  • 【专题刷题】双指针(二)
  • 带你从入门到精通——知识图谱(六. 知识融合)
  • 半导体设备通信标准—secsgem v0.3.0版本使用说明文档(2)之GEM(SEMI 30)
  • 零基础上手Python数据分析 (15):DataFrame 数据排序与排名 - 快速定位关键数据
  • 【leetcode hot 100 136】只出现一次的数字
  • openlayer的基本使用(区域绘制、点线绘制、手动绘制轨迹)
  • 【LaTeX】Misplaced alignment tab character . ^^I
  • 如何下载免费地图数据?
  • GKI 介绍
  • C++算法(9):数组作为函数参数,注意事项与实践
  • 【C++算法】61.字符串_最长公共前缀
  • 利用 Python 和 AI 技术创作独特的图像艺术作品
  • Flutter 与原生通信
  • SAP系统交货已完成标识
  • Redis(一) - Redis安装教程(Windows + Linux)
  • 数据结构与算法入门 Day 0:程序世界的基石与密码
  • 前端ES6基本语法,以及前端项目模板vue-admin-template和后端进行对接(跨域问题的解决)
  • 如何解除Excel只读状态?4种方法全解析
  • 人工智能——梯度提升决策树算法
  • 武汉网站建设电话多少钱/微博seo排名优化
  • 什么网站可以做国外生意/网站诊断工具
  • 网页设计介绍说明/北海百度seo
  • 科网站建设/网站关键词百度自然排名优化
  • 网站建设属于什么职能/微商怎样让客源主动加你
  • 网站开发外包价格/百度查询关键词排名工具