成功使用XTuner 微调个人小助手

说明

本文是过程记录,部分文字原封不动照搬了教程,因为教程写的很简练了(不是原创,没有版权)
下面二维码链接可以直达入门NPC,可以从零开始(需要有一定的代码理解基础更和)。
请添加图片描述

微调前的准备

3.2.1 准备数据文件

为了让模型能够认清自己的身份弟位,在询问自己是谁的时候按照我们预期的结果进行回复,我们就需要通过在微调数据集中大量加入这样的数据。我们准备一个数据集文件datas/assistant.json,文件内容为对话数据。
(通过一个脚本可以执行几千次,每次都只有这一个对话,所以它就能学到了!)
在这里插入图片描述

3.2.2 准备配置文件

配置文件是一种用于定义和控制模型训练和测试过程中各个方面的参数和设置的工具。
根据我们选择的微调方法结合微调方案,找到与最匹配的配置文件,减少对配置文件的修改量。
如何选择配置文件?

1 查找可能匹配的文件:

命令:

xtuner list-cfg -p internlm2 

xtuner list-cfg 命令用于列出内置的所有配置文件。
参数 -p--pattern 表示模式匹配,后面跟着的内容将会在所有的配置文件里进行模糊匹配搜索,然后返回最有可能得内容。
比如我们这里微调的是书生·浦语的模型,我们就可以匹配搜索 internlm2

2 复制预设的配置文件:

命令:

xtuner copy-cfg internlm2_chat_1_8b_qlora_alpaca_e3 .

xtuner copy-cfg 命令用于复制一个内置的配置文件。该命令需要两个参数:
CONFIG 代表需要复制的配置文件名称,
SAVE_PATH 代表复制的目标路径。
在我们的输入的这个命令中,
CONFIG 对应的是上面搜索到的 internlm2_chat_1_8b_qlora_alpaca_e3 ,
SAVE_PATH 则是当前目录 .

3 按自己的需求修改配置文件

常用参数介绍

参数名解释
data_path数据路径或 HuggingFace 仓库名
max_length单条数据最大 Token 数,超过则截断
pack_to_max_length是否将多条短数据拼接到 max_length,提高 GPU 利用率
accumulative_counts梯度累积,每多少次 backward 更新一次参数
sequence_parallel_size并行序列处理的大小,用于模型训练时的序列并行
batch_size每个设备上的批量大小
dataloader_num_workers数据加载器中工作进程的数量
max_epochs训练的最大轮数
optim_type优化器类型,例如 AdamW
lr学习率
betas优化器中的 beta 参数,控制动量和平方梯度的移动平均
weight_decay权重衰减系数,用于正则化和避免过拟合
max_norm梯度裁剪的最大范数,用于防止梯度爆炸
warmup_ratio预热的比例,学习率在这个比例的训练过程中线性增加到初始学习率
save_steps保存模型的步数间隔
save_total_limit保存的模型总数限制,超过限制时删除旧的模型文件
prompt_template模板提示,用于定义生成文本的格式或结构
4 启动微调

命令:

cd /root/InternLM/XTuner
conda activate xtuner0121
xtuner train ./internlm2_chat_1_8b_qlora_alpaca_e3_copy.py

xtuner train 命令用于启动模型微调进程。
该命令需要一个参数:CONFIG 用于指定微调配置文件。这里我们使用修改好的配置文件 internlm2_chat_1_8b_qlora_alpaca_e3_copy.py
训练过程中产生的所有文件,包括日志、配置文件、检查点文件、微调后的模型等,默认保存在 work_dirs 目录下,也可以通过添加 --work-dir 指定文件保存位置。

这个命令一执行,就开始了~~洗脑(不是)~~训练的过程了:
请添加图片描述
训练完成以后的目录情况
请添加图片描述

5 模型格式转换:

命令:
xtuner convert pth_to_hf
将原本使用 Pytorch 训练出来的模型权重文件转换为目前通用的 HuggingFace 格式文件。
我们其实还可以在转换的命令中添加几个额外的参数,包括:

参数名解释
–fp32代表以fp32的精度开启,假如不输入则默认为fp16
–max-shard-size {GB}代表每个权重文件最大的大小(默认为2GB)
   # 先获取最后保存的一个pth文件
pth_file=`ls -t ./work_dirs/internlm2_chat_1_8b_qlora_alpaca_e3_copy/*.pth | head -n 1`
export MKL_SERVICE_FORCE_INTEL=1
export MKL_THREADING_LAYER=GNU
xtuner convert pth_to_hf ./internlm2_chat_1_8b_qlora_alpaca_e3_copy.py ${pth_file} ./hf

请添加图片描述

此时,hf 文件夹即为我们平时所理解的所谓 “LoRA 模型文件”(可以简单理解:LoRA 模型文件 = Adapter)

6 模型合并:

对于 LoRA 或者 QLoRA 微调出来的模型其实并不是一个完整的模型,而是一个额外的层(Adapter),训练完的这个层最终还是要与原模型进行合并才能被正常的使用。

对于全量微调的模型(full)其实是不需要进行整合这一步的,因为全量微调修改的是原模型的权重而非微调一个新的 Adapter ,因此是不需要进行模型整合的。

在 XTuner 中提供了一键合并的命令 xtuner convert merge,在使用前我们需要准备好三个路径,包括原模型的路径、训练好的 Adapter 层的(模型格式转换后的)路径以及最终保存的路径。

xtuner convert merge命令用于合并模型。该命令需要三个参数:LLM 表示原模型路径,ADAPTER 表示 Adapter 层的路径, SAVE_PATH 表示合并后的模型最终的保存路径。

在模型合并这一步还有其他很多的可选参数,包括:

参数名解释
–max-shard-size {GB}代表每个权重文件最大的大小(默认为2GB)
–device {device_name}这里指的就是device的名称,可选择的有cuda、cpu和auto,默认为cuda即使用gpu进行运算
–is-clip这个参数主要用于确定模型是不是CLIP模型,假如是的话就要加上,不是就不需要添加
export MKL_SERVICE_FORCE_INTEL=1
export MKL_THREADING_LAYER=GNU
xtuner convert merge /root/InternLM/XTuner/Shanghai_AI_Laboratory/internlm2-chat-1_8b ./hf ./merged --max-shard-size 2GB

请添加图片描述

对应出现的目录结构:
请添加图片描述

开始对话!

这样就成功~
请添加图片描述

可能因为之前给的剧本里只有一句话,所以它也只会这一句
但是感觉它好可爱,有点像c-3po刚出场的时候。。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值