笔记--XTuner大模型单卡低成本微调实战

XTuner大模型单卡低成本微调实战

本节参考文档为:XTuner 大模型单卡低成本微调实战

视频教程为:XTuner 大模型单卡低成本微调实战

理论内容:

XTuner是 MMRazor MMDeploy 联合开发的大语言模型微调工具箱。具有傻瓜化和轻量级的特点

image-20240122183611223

大模型海量的文本内容赋予了大语言模型各行各业的知识,但是将大语言模型实际的用到具体的生产或科研中往往会发现模型的回答不尽如人意,这时就需要对模型进行微调,使得模型在具体的使用场景或者是具体的领域中输出更好的回答

image-20240122183647222

训练流程:海量的预训练数据训练出来的模型叫做base模型或者pretrained模型。为了让模型知道我们的意图,更加服从我们的指令,就在PRETRAIN模型上进行额外的这种指令微调,产生instructed大模型,最终instructed模型对肺癌有比较好的理解

image-20240122184027184

指令跟随微调:对角色进行指定,三个角色"System":设置上下文信息,”User“:会提出问题的用户,”Assistant“:根据System设置的上下文回答User提出的问题

image-20240122204926651

对话模板是为了能够让LLM区分出,System、User和 Assistant不同的模型会有不同的模板

image-20240122205343293

loss损失计算过程:对答案部分进行loss计算

image-20240122205524102

增量微调:不需要问题,只需要关于事实的陈述句,根据对话模板,把system和input留空,但仍需要计算答案的损失

image-20240122205809691

XTuner 训练原理:LoRA 使用linear旁支降低显存开销,QLoRA是对LoRA的改进

image-20240122210120004

全量微调,LORA,QLoRA三者比较

image-20240122210245855

XTuner介绍

image-20240122210442427

image-20240122210559658

image-20240122210633159

image-20240122210718971

image-20240122210744899

image-20240122210824732

统一了问答对格式

image-20240122210845489

多种映射函数,支持很多开源的数据集,减少处理复杂数据格式的时间

image-20240122210919464

image-20240122211143048

自定义数据格式建议json或者jsonl

image-20240122211304057

加速训练:Flash Attention和 DeepSpeed ZeRO,默认为Flash Attentio

image-20240122211344444

开启 DeepSpeed ZeRO 后边只需添加 --deepspeed 参数,这样可以使用QLoRA方法

image-20240122211524426

LoRA与QLoRA 现存开销对比:

image-20240122211738388

1.快速上手

安装XTuner并从ModelScope下载internlm-chat-7b模型

image-20240121230930185

下载openassistant数据集[地址][https://huggingface.co/datasets/timdettmers/openassistant-guanaco/tree/main]

image-20240121231336340

将模型地址和数据集地址加入到微调脚本

vim internlm_chat_7b_qlora_oasst1_e3_copy.py
# 修改模型为本地路径
pretrained_model_name_or_path = './internlm-chat-7b'
# 修改训练数据集为本地路径
data_path = './openassistant-guanaco'
xtuner train ./internlm_chat_7b_qlora_oasst1_e3_copy.py

image-20240121231647238

image-20240122101331271

训练完成后在./work dirs /internlm chat_ 7b_qlora_oasst1_e3_copy 会输出训练过程和epoch权重

image-20240122101453236

将得到的 PTH 模型生成 Adapter 文件夹(转换为 HuggingFace 模型),并将 HuggingFace adapter 合并到大语言模型。

export MKL_SERVICE_FORCE_INTEL=1

xtuner convert pth_to_hf ./internlm_chat_7b_qlora_oasst1_e3_copy.py ./work_dirs/internlm_chat_7b_qlora_oasst1_e3_copy/epoch_1.pth ./hf

image-20240122161006812

如果报错Error: nkl-service + Intel(R) MKL: AKL_THREADIAG_LAYER=INTEL is incompatible with libaomp.so.1 library. 要注意 export MKL_SERVICE_FORCE_INTEL=1

image-20240122104254417

xtuner convert merge ./internlm-chat-7b ./hf ./merged --max-shard-size 2GB

image-20240122161157290

最后与合并后的模型对话

直接加载 Adapter 模型对话,可以看到机器人的名字变成了 ‘Open Assistant’

image-20240122112819921

4 bit 量化加载,与直接加载 Adapter 模型对话效果差不多。

image-20240122104903473

注意最好还是多训练几个轮次,否则很可能因为训练不充分导致,输出错误。

如微调前:机器人只知道自己是一个“AI Assistant”

image-20240122112250605

在经过3个epoch微调后,知道自己叫做“'Open Assistant",“Open Assistant"来源于数据集openassistant-guanaco dataset:

image-20240122112551531

2. 自定义微调**–Medication QA**

基于 InternLM-chat-7B 模型,用 MedQA 数据集进行微调,将其往医学问答领域对齐。数据集格式如下:

image-20240122113359563

之后,使用xlsx2jsonl.py格式化数据集,使用split2train_and_test.py划分训练集和测试集

image-20240122114616294

与第1节设置类似,开始自定义微调
xtuner train internlm_chat_7b_qlora_medqa2019_e3.py --deepspeed deepspeed_zero2

image-20240122125344265

之后 pth 转 huggingface,并部署与测试

image-20240122140818289

3.用 MS-Agent 数据集 赋予 LLM 以 Agent 能力

开始 chat 之前,还要加个 serper 的环境变量:

去 serper.dev 免费注册一个账号,生成自己的 api key。这个东西是用来给 lagent 去获取 google 搜索的结果的。等于是 serper.dev 帮你去访问 google,而不是从你自己本地去访问 google 了。(因此注意要有科学上网的能力)

export SERPER_API_KEY=abcdefg
xtuner chat ./internlm-chat-7b --adapter internlm-7b-qlora-msagent-react --lagent

image-20240122144649814

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值