赞
踩
常见的两种微调策略:增量预训练、指令跟随
数据是一问一答的形式
对话模板构建
每个开源模型使用的对话模板都不相同
指令微调原理:
由于只有答案部分是我们期望模型来进行回答的内容,所以我们只对答案部分进行损失的计算
数据都是陈述句,没有问答形式
XTuner中使用的微调原理:LoRA & QLoRA
如果我们要对整个模型的所有参数都进行调整的话,需要非常大的显存才能够进行训练,但是用LoRA的方法就不需要这么大的显存开销了
LoRA: Low-Rank Adaptation
比较:全参数微调、LoRA、QLoRA
全参数微调:整个模型都要加载到显存中,所有模型参数的优化器也都要加载到显存中,显存不够根本无法进行。
LoRA:模型也是要先加载到显存中,但是我们只需要保存LoRA部分的参数优化器,大大减小了显存占用。
QLoRA:加载模型时就使用4bit量化的方式加载(相当于不那么精确的加载),但是可以节省显存开销,QLoRA部分的参数优化器,还可以在GPU和CPU之间进行调度【这是Xtunner进行整合的功能 】,显存满了就自动去内存中去跑。
pip install xtuner
xtuner list-cfg -p internlm_20b
xtuner train internlm_20b_qlora_oasst1_512_e3
模型名 | internlm_20b ( 无 chat 代表是基座模型 ) |
使用算法 | qlora |
数据集 | oasst1 |
数据长度 | 512 |
Epoch | e3, epoch 3 |
自定义训练(微调):
XTunner支持多数据的样本拼接,如果使用XTunner的默认配置,它只需要6GB或者8GB的显存消耗。如果有更大显存的显卡,为了利用更大显存,就需要增加运行效率,进行多数据样本拼接,将多条数据拼接到一起后,输入模型,然后统一的进行梯度的传播,增加并行性,充分利用GPU资源。
自定义数据集建议使用json格式
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
安装完成后,创建tmux
session
tmux new -s finetune
先按Ctrl+B,手指松开再按D,就能回到原来的终端。tmux
相当于一个虚拟的终端,和SSH的连接脱钩。
输入如下内容,回到tmux终端,并在这里进行模型的微调
tmux attach -t finetune
xtuner train ./internlm_chat_7b_qlora_oasst1_e3_copy.py --deepspeed deepspeed_zero2
将 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个文件)。方便我们进行传输和分享
与合并后的模型对话:
xtuner chat ./merged --prompt-template internlm_chat
# 4 bit 量化加载(启动机器的显存不够大时,加载速度和回复速度会变快)
# xtuner chat ./merged --bits 4 --prompt-template internlm_chat
使用xtuner工具箱中的chat命令,来与./merged
文件夹中的大模型来对话,使用internlm_chat的prompt-template
与微调前的基座模型进行比较:
xtuner chat ./internlm-chat-7b/ --prompt-template internlm_chat
xtuner chat 的启动参数
–temperature: 温度值,给的越高越容易生成更发散的内容。越低,生成越稳定越老实的内容。值在0-1之间。
–seed 用于可重现文本生成的随机种子。固定随机种子,实现可复现的操作。
以 Medication QA 数据集为例
原格式:(.xlsx)
问题 | 药物类型 | 问题类型 | 回答 | 主题 | URL |
---|---|---|---|---|---|
aaa | bbb | ccc | ddd | eee | fff |
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。