当前位置:   article > 正文

书生·浦语大模型实战营-学习笔记4

书生·浦语大模型实战营-学习笔记4

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

在这里插入图片描述

Finetune简介

常见的两种微调策略:增量预训练、指令跟随
在这里插入图片描述
在这里插入图片描述

指令跟随微调

数据是一问一答的形式
对话模板构建
在这里插入图片描述
每个开源模型使用的对话模板都不相同
在这里插入图片描述

指令微调原理:
由于只有答案部分是我们期望模型来进行回答的内容,所以我们只对答案部分进行损失的计算
在这里插入图片描述

增量预训练微调

数据都是陈述句,没有问答形式
在这里插入图片描述
在这里插入图片描述

LoRA & QLoRA

XTuner中使用的微调原理:LoRA & QLoRA
如果我们要对整个模型的所有参数都进行调整的话,需要非常大的显存才能够进行训练,但是用LoRA的方法就不需要这么大的显存开销了

LoRA: Low-Rank Adaptation
在这里插入图片描述
比较:全参数微调、LoRA、QLoRA

全参数微调:整个模型都要加载到显存中,所有模型参数的优化器也都要加载到显存中,显存不够根本无法进行。

LoRA:模型也是要先加载到显存中,但是我们只需要保存LoRA部分的参数优化器,大大减小了显存占用。

QLoRA:加载模型时就使用4bit量化的方式加载(相当于不那么精确的加载),但是可以节省显存开销,QLoRA部分的参数优化器,还可以在GPU和CPU之间进行调度【这是Xtunner进行整合的功能 】,显存满了就自动去内存中去跑。

在这里插入图片描述

XTuner介绍

在这里插入图片描述

在这里插入图片描述

XTuner快速上手

  1. 安装
pip install xtuner
  • 1
  1. 挑选配置模版
xtuner list-cfg -p internlm_20b
  • 1
  1. 一键训练
xtuner train internlm_20b_qlora_oasst1_512_e3
  • 1
  1. Config 命名规则
模型名internlm_20b ( 无 chat 代表是基座模型 )
使用算法qlora
数据集oasst1
数据长度512
Epoche3, epoch 3

在这里插入图片描述
自定义训练(微调):

  1. 拷贝配置模板
  2. 修改配置文件
  3. 启动训练
  4. 配置模板中的常用超参数
    在这里插入图片描述
    对话:
    训练完成后得到了Adapter文件(LoRA文件),我们就需要在加载底座模型的基础上,同时加载这个Adapter,来进行模型的对话与测试。
  5. Float 16模型对话
  6. 4bit量化模式模型对话
  7. 加载Adapter模型对话
    在这里插入图片描述
    XTuner还支持工具类模型的对话,类似于GPT里面的plugin
    在这里插入图片描述
    XTunner具有强大的数据处理引擎,对于这种格式化的问答对,进行了统一的数据指定。对于开源数据集进行了映射函数的内置,可以方便的在很多流行的开源数据集上进行一键启动。
    这样开发者可以专注于数据内容,不必花费精力处理复杂的数据格式。
    在这里插入图片描述

在这里插入图片描述
XTunner支持多数据的样本拼接,如果使用XTunner的默认配置,它只需要6GB或者8GB的显存消耗。如果有更大显存的显卡,为了利用更大显存,就需要增加运行效率,进行多数据样本拼接,将多条数据拼接到一起后,输入模型,然后统一的进行梯度的传播,增加并行性,充分利用GPU资源。
在这里插入图片描述
自定义数据集建议使用json格式
在这里插入图片描述

8GB显卡玩转LLM

XTuner默认开启了Flash Attention的加速方式,可以加速训练,同时也集成了deepspeed_zero的优化方法,也可以在训练在训练的过程中更快。

deep speed不是默认启动的
在这里插入图片描述
在这里插入图片描述
优化前优化后,不同计算卡上的显存占用情况
在这里插入图片描述

动手实战环节

https://github.com/InternLM/tutorial/blob/main/xtuner/README.md

tmux可以帮助我们中断SSH连接,但是服务器上的微调工作还不会中断。

apt update -y
apt install tmux -y 
  • 1
  • 2

安装完成后,创建tmuxsession

tmux new -s finetune
  • 1

在这里插入图片描述
先按Ctrl+B,手指松开再按D,就能回到原来的终端。tmux相当于一个虚拟的终端,和SSH的连接脱钩。
输入如下内容,回到tmux终端,并在这里进行模型的微调

tmux attach -t finetune
xtuner train ./internlm_chat_7b_qlora_oasst1_e3_copy.py --deepspeed deepspeed_zero2
  • 1
  • 2

在这里插入图片描述
将 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} \ # Huggingface格式的LoRA模型的路径
#     ${SAVE_PATH} \ # 要保存的合并模型的目标路径
#     --max-shard-size 2GB # 保存的时候分块保存(假如模型总大小40GB,设置此处参数为2GB,就得到20个文件)。方便我们进行传输和分享
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

与合并后的模型对话:

xtuner chat ./merged --prompt-template internlm_chat

# 4 bit 量化加载(启动机器的显存不够大时,加载速度和回复速度会变快)
# xtuner chat ./merged --bits 4 --prompt-template internlm_chat
  • 1
  • 2
  • 3
  • 4

使用xtuner工具箱中的chat命令,来与./merged文件夹中的大模型来对话,使用internlm_chat的prompt-template

在这里插入图片描述
与微调前的基座模型进行比较:

xtuner chat ./internlm-chat-7b/ --prompt-template internlm_chat
  • 1

xtuner chat 的启动参数

–temperature: 温度值,给的越高越容易生成更发散的内容。越低,生成越稳定越老实的内容。值在0-1之间。
–seed 用于可重现文本生成的随机种子。固定随机种子,实现可复现的操作。

自定义微调

Medication QA 数据集为例

原格式:(.xlsx)

问题药物类型问题类型回答主题URL
aaabbbcccdddeeefff
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/菜鸟追梦旅行/article/detail/86570
推荐阅读
相关标签
  

闽ICP备14008679号