XTuner 大模型单卡低成本微调实战
图解:增量预训练是一种微调模式,它通过逐步添加新的层或参数来扩展预训练模型。在增量预训练中,首先使用预训练模型在新任务的数据集上进行初步训练,然后逐层或逐步添加新的层或参数,并继续训练模型。这种微调模式适用于具有相似任务特征的不同数据集,可以有效地利用预训练模型的已有知识,提高模型的泛化能力。使用场景:让基座模型学习到一些新知识,如某个垂类领域的常识训练数据:文章、书籍、代码等
一、Finetune简介
①微调中在中小型应用中常用的训练数据处理的两种模式介绍
图解:
1.增量预训练(Incremental Pretraining):
增量预训练是一种微调模式,它通过逐步添加新的层或参数来扩展预训练模型。在增量预训练中,首先使用预训练模型在新任务的数据集上进行初步训练,然后逐层或逐步添加新的层或参数,并继续训练模型。这种微调模式适用于具有相似任务特征的不同数据集,可以有效地利用预训练模型的已有知识,提高模型的泛化能力。
使用场景:让基座模型学习到一些新知识,如某个垂类领域的常识训练数据:文章、书籍、代码等
前排提示,文末有大模型AGI-CSDN独家资料包哦!
2. 指令微调(Instructional Fine-tuning):
指令微调是一种微调模式,它通过将预训练模型与特定任务的指令相结合来进行训练。在指令微调中,首先使用预训练模型在新任务的数据集上进行初步训练,然后使用特定任务的指令(如文本描述、图像标签等)来指导模型进行进一步的训练。这种微调模式适用于具有明确任务目标的新数据集,可以有效地利用预训练模型的已有知识,并利用特定任务的指令来提高模型的性能。
使用场景:让模型学会对话模板,根据人类指令进行对话训练数据:高质量的对话、问答数据
指令微调的图解样例:
②微调的在中小型应用中常用的两种模式工作流程
1. 指令微调(Instructional Fine-tuning):
一个问题一个回答

标题我们使用大模型看到的界面

大模型内部的流程及不同“角色”的功能
**对话模板:**为了让模型可以识别出system、user、assistant
- 下图是不同模型的模板:



流程如下图所示:

2. 增量预训练(Incremental Pretraining):
陈述句式
a. 增量预训练的流程类似指令微调,不同之处是不需要system和user这两个“角色”。

二、XTuner介绍
①XTuner的基本介绍
1. 高效的数据引擎
XTuner 适配了多个热门开源数据集格式,开发者如已有对应格式的数据集,可以直接使用,并支持多种格式数据源的混合使用:
- Alpaca 格式,斯坦福大学开源数据集的格式,也是社区开源项目使用较多的一种格式
- MOSS 格式,复旦大学开源指令微调数据集的格式,包含多轮对话和工具调用
- Gunacao 格式,QLoRA 项目中所使用数据集的格式
- OpenAI 格式,GPT-3.5-Turbo Finetune 接口要求的数据集格式
2.多种训练引擎
XTuner 首次尝试将 HuggingFace 与 OpenMMLab 进行结合,兼顾易用性和可配置性。支持使用 MMEngine Runner 和 HuggingFace Trainer 两种训练引擎,开发者如有深度定制化需求,可根据使用习惯灵活配置。
pip install xtuner
# 使用 MMEngine Runner 训练
xtuner train internlm_7b_qlora_oasst1_e3
# 使用 HugingFace Trainer 训练
xtuner train internlm_7b_qlora_oasst1_e3_hf
3.一键启动训练
XTuner 内置了增量预训练、单轮&多轮对话指令微调、工具类指令微调的标准化流程,让开发者只需聚焦于数据本身。
同时, XTuner 集成了 QLoRA、DeepSpeed 和 FSDP 等技术,提供各种尺寸模型在各种规格硬件下的训练解决方案,通过XTurner一键式启动训练,仅需8GB显存即可微调7B模型。
pip install 'xtuner[deepspeed]'
# 8G 显存微调 Llama2-7B
xtuner train llama2_7b_qlora_oasst1_512_e3 --deepspeed deepspeed_zero2
详细简介如图:

②XTuner中的两种微调原理LoRA和QLoRA
1. LORA的原理
LoRA通过在原本的Linear旁,新增一个支路,包含两个连续的小Linear,新增的这个支路通常叫做Adapter(LORA)
Adapter参数量远小于原本的 Linear,能大幅降低训练的显存消耗。

课程中老师的描述挺形象的:
想象一下,你有一个超大的玩具,现在你想改造这个超大的玩具。但是,对整个玩具进行全面的改动会非常昂贵。
①因此,你找到了一种叫 **LoRA** 的方法:只对玩具中的某些零件进行改动,而不是对整个玩具进行全面改动。
② 而 **QLoRA** 是 LoRA 的一种改进:如果你手里只有一把生锈的螺丝刀,也能改造你的玩具。
2. 三种模式的对比Full Finetuning、LoRA、QLoRA

三、8GB显卡玩转LLM
①. XTuner两个优化技巧Flash Attention和 DeepSpeedZeRO
1. Flash Attention
Flash Attention将Attention计算并行化,避免了计算过程中Attention Score NxN的显存占用(训练过程中的N都比较大)。

2. DeepSpeed ZeRO:
ZeRO优化,通过将训练过程中的参数、梯度和优化器状态切片保存,能够在多GPU训练时显著节省显存,除了将训练中间状态切片外,DeepSpeed 训练时使用FP16的权重,相较于Pytorch的AMP训练,在单GPU上也能大幅节省显存。
其并非自动启动需要加 --deepspeed deepspeed zero3
QLoRA后面加上 --deepspeed deepspeed zero2
xtuner train internlm_20b_qlora__oasst1_512_e3 --deepspeed deepspeed zero3

四、动手实战环节
模型微调的流程看官方的文档超详细:xtuner单卡微调
①大模型微调样例1
下载了三个多小时终于下好了

1. 将得到的 PTH 模型即LoRA模型文件转换为 HuggingFace 模型

- 将 HuggingFace adapter 合并到大语言模型

- 与合并后的模型对话:
注意:prompt-template后的参数需要根据自己选择的底座模型进行更改
可以使用xtuner chat --help参看

# 加载 Adapter 模型对话(Float 16)
xtuner chat ./merged --prompt-template internlm_chat
4. 微调和测试效果

②微调一个属于自己的大模型
1. 符合大模型微调格式的数据集
创建data文件夹用于存放用于训练的数据集
mkdir -p /root/personal_assistant/data && cd /root/personal_assistant/data
使用脚本生成正确格式的数据集
import json
# 输入你的名字
name = 'Shengshenlan'
# 重复次数
n = 10000
data = [
{
"conversation": [
{
"input": "请做一下自我介绍",
"output": "我是{}的小助手,内在是上海AI实验室书生·浦语的7B大模型哦".format(name)
}
]
}
]
for i in range(n):
data.append(data[0])
with open('personal_assistant.json', 'w', encoding='utf-8') as f:
json.dump(data, f, ensure_ascii=False, indent=4)
2. 微调的配置文件
下载模型InternLM-chat-7B
InternStudio 平台的 share 目录下已经为我们准备了全系列的 InternLM 模型,可以使用如下命令复制internlm-chat-7b:
mkdir -p /root/personal_assistant/model/Shanghai_AI_Laboratory
cp -r /root/share/temp/model_repos/internlm-chat-7b /root/personal_assistant/model/Shanghai_AI_Laboratory
下载配置文件
拷贝一个配置文件到当前目录:xtuner copy-cfg ${CONFIG_NAME} ${SAVE_PATH} (注意最后有个英文句号,代表复制到当前路径)
xtuner copy-cfg internlm_chat_7b_qlora_oasst1_e3 .
修改配置文件即: 修改拷贝后的文件internlm_chat_7b_qlora_oasst1_e3_copy.py


训练模型
xtuner train /root/personal_assistant/config/internlm_chat_7b_qlora_oasst1_e3_copy.py
3. 将得到的 PTH 模型转换为 HuggingFace 模型
将得到的 PTH 模型转换为 HuggingFace 模型,即:生成 Adapter 文件夹
xtuner convert pth_to_hf ${CONFIG_NAME_OR_PATH} ${PTH_file_dir} ${SAVE_PATH}
例如:

成功标志如下:

将 HuggingFace adapter 合并到大语言模型:
xtuner convert merge ./internlm-chat-7b ./hf ./merged --max-shard-size 2GB
# xtuner convert merge \
# ${NAME_OR_PATH_TO_LLM} \
# ${NAME_OR_PATH_TO_ADAPTER} \
# ${SAVE_PATH} \
# --max-shard-size 2GB
例如:

4. 验证和测试
与合并后的模型对话:
# 加载 Adapter 模型对话(Float 16)
xtuner chat ./merged --prompt-template internlm_chat
# 4 bit 量化加载
# xtuner chat ./merged --bits 4 --prompt-template internlm_chat
到此为止我们得到了属于自己的专属模型
QAQ翻车,训练轮数太少,导致并没有安装咱设定好的来,不过也和原来的不一样。大家可以看一下下面的两张图片: 【建议大家多训练几轮,我由于怕数据多训练时间长把10000数据变为了1000,大家想要达到自己的预期效果请增加数据集和训练轮数】

原模型的回复:

毕竟是第一次生成专属自己的模型,所以我又重新跑了一遍
但是好像过拟合了,只会回答这一个问题了,哈哈,不过还是成功微调了!!!!

如何学习AI大模型 ?
“最先掌握AI的人,将会晚掌握AI的人有竞争优势,晚掌握AI的人比完全不会AI的人竞争优势更大”。 在这个技术日新月异的时代,不会新技能或者说落后就要挨打。
老蓝我作为一名在一线互联网企业(保密不方便透露)工作十余年,指导过不少同行后辈。帮助很多人得到了学习和成长。
我是非常希望可以把知识和技术分享给大家,但苦于传播途径有限,很多互联网行业的朋友无法获得正确的籽料得到学习的提升,所以也是整理了一份AI大模型籽料包括:AI大模型入门学习思维导图、精品AI大模型学习书籍手册、视频教程、落地项目实战等 免费分享出来。
- AI大模型学习路线图
- 100套AI大模型商业化落地方案
- 100集大模型视频教程
- 200本大模型PDF书籍
- LLM面试题合集
- AI产品经理资源合集

大模型学习路线
想要学习一门新技术,你最先应该开始看的就是学习路线图,而下方这张超详细的学习路线图,按照这个路线进行学习,学完成为一名大模型算法工程师,拿个20k、15薪那是轻轻松松!

视频教程
首先是建议零基础的小伙伴通过视频教程来学习,其中这里给大家分享一份与上面成长路线&学习计划相对应的视频教程。文末有整合包的领取方式

技术书籍籽料
当然,当你入门之后,仅仅是视频教程已经不能满足你的需求了,这里也分享一份我学习期间整理的大模型入门书籍籽料。文末有整合包的领取方式

大模型实际应用报告合集
这套包含640份报告的合集,涵盖了AI大模型的理论研究、技术实现、行业应用等多个方面。无论您是科研人员、工程师,还是对AI大模型感兴趣的爱好者,这套报告合集都将为您提供宝贵的信息和启示。文末有整合包的领取方式

大模型落地应用案例PPT
光学理论是没用的,要学会跟着一起做,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。文末有整合包的领取方式

大模型面试题&答案
截至目前大模型已经超过200个,在大模型纵横的时代,不仅大模型技术越来越卷,就连大模型相关的岗位和面试也开始越来越卷了。为了让大家更容易上车大模型算法赛道,我总结了大模型常考的面试题。文末有整合包的领取方式

领取方式
这份完整版的 AI大模型学习籽料我已经上传CSDN,需要的同学可以微⭐扫描下方CSDN官方认证二维码免费领取!
火山引擎开发者社区是火山引擎打造的AI技术生态平台,聚焦Agent与大模型开发,提供豆包系列模型(图像/视频/视觉)、智能分析与会话工具,并配套评测集、动手实验室及行业案例库。社区通过技术沙龙、挑战赛等活动促进开发者成长,新用户可领50万Tokens权益,助力构建智能应用。
更多推荐

所有评论(0)