L1 第五关 XTuner 微调个人小助手认知

L1 第五关 XTuner 微调个人小助手认知

task1

基础任务(完成此任务即完成闯关并获得 100 算力点)
使用 XTuner 微调 InternLM2-Chat-1.8B 实现自己的小助手认知,如下图所示(图中的伍鲜同志需替换成自己的昵称),记录复现过程并截图。
在这里插入图片描述

1.1 开发机准备

配置选择Cuda12.2-conda10%A100即可
这里直接选择之前创建的开发机了~
在这里插入图片描述
打开虚拟机,克隆Tutorial仓库的资料到本地
在这里插入图片描述

1.2 创建虚拟环境

利用Anaconda 创建虚拟环境并安装必要库

# 创建虚拟环境
conda create -n xtuner0121 python=3.10 -y

# 激活虚拟环境(注意:后续的所有操作都需要在这个虚拟环境中进行)
conda activate xtuner0121

# 安装一些必要的库
conda install pytorch==2.1.2 torchvision==0.16.2 torchaudio==2.1.2 pytorch-cuda=12.1 -c pytorch -c nvidia -y
# 安装其他依赖
pip install transformers==4.39.3
pip install streamlit==1.36.0

1.3 安装XTuner

首先从Github下载源码,然后进入目录进行安装,

# 创建一个目录,用来存放源代码
mkdir -p /root/InternLM/code

cd /root/InternLM/code

git clone -b v0.1.21  https://github.com/InternLM/XTuner /root/InternLM/code/XTuner

执行安装

# 进入到源码目录
cd /root/InternLM/code/XTuner
conda activate xtuner0121

# 执行安装
pip install -e '.[deepspeed]'

这里有个bug
在这里插入图片描述
原因是numpy版本过高,试了下不同版本,最后换成了1.26.0

pip install numpy==1.26.0

在这里插入图片描述

1.4 模型准备

准备微调模型

# 创建一个目录,用来存放微调的所有资料,后续的所有操作都在该路径中进行
mkdir -p /root/InternLM/XTuner

cd /root/InternLM/XTuner

mkdir -p Shanghai_AI_Laboratory

ln -s /root/share/new_models/Shanghai_AI_Laboratory/internlm2-chat-1_8b Shanghai_AI_Laboratory/internlm2-chat-1_8b

使用tree命令查看目录

apt-get install -y tree

tree -l

在这里插入图片描述

从目录结构中可以看出,internlm2-chat-1_8b 是一个符号链接。

下面用 internlm2-chat-1_8b 模型,通过 QLoRA 的方式来微调模型

2.1 微调前的模型对话

微调前模型并未达到预期
在这里插入图片描述
下面开始微调

2.2 指令跟随微调

  • 准备数据文件datas/assistant.json
    通过脚本生成的方式来准备数据,创建一个脚本文件 xtuner_generate_assistant.py :
    在这里插入图片描述
    运行脚本文件后目录结构如下:
    在这里插入图片描述
  • 准备配置文件
    配置文件是一种用于定义和控制模型训练和测试过程中各个方面的参数和设置的工具,下面根据微调方法结合微调方案来找到最匹配的配置文件,从而减少对配置文件的修改量。
    xtuner list-cfg列出支持的配置文件
    在这里插入图片描述
    命名规则为:模型名称_使用的算法_数据集名称_把数据集跑几次
    由于我们是对internlm2-chat-1_8b模型进行指令微调,所以与我们的需求最匹配的配置文件是 internlm2_chat_1_8b_qlora_alpaca_e3,复制该配置文件后目录结构如下:
    在这里插入图片描述
  • 修改配置文件
    配置文件包括:Settings& Model &Dataset & Scheduler &Runtime
    由于修改了配置文件中的模型和数据集,所以需要更改前三部分,后面两部分为官方优化好的部分
    下面是文档给的一些准则:

在 PART 1 的部分,由于我们不再需要在 HuggingFace 上自动下载模型,因此我们先要更换模型的路径以及数据集的路径为我们本地的路径。
为了训练过程中能够实时观察到模型的变化情况,XTuner 贴心的推出了一个 evaluation_inputs 的参数来让我们能够设置多个问题来确保模型在训练过程中的变化是朝着我们想要的方向前进的。我们可以添加自己的输入。
在 PART 3 的部分,由于我们准备的数据集是 JSON 格式的数据,并且对话内容已经是 input 和 output 的数据对,所以不需要进行格式转换。

这里采用了写好的配置文件:
在这里插入图片描述

  • 启动微调
cd /root/InternLM/XTuner
conda activate xtuner0121

xtuner train ./internlm2_chat_1_8b_qlora_alpaca_e3_copy.py

微调后文件结构:
在这里插入图片描述

  • 模型格式转换:将 Pytorch 训练出来的模型权重文件转换为目前通用的 HuggingFace 格式文件
cd /root/InternLM/XTuner
conda activate xtuner0121

# 先获取最后保存的一个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

在这里插入图片描述

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

2.3 微调后的模型对话

修改xtuner_streamlit_demo.py脚本中模型路径
在这里插入图片描述
对话结果,微调成功:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值