书生·浦语大模型实战营笔记-第四节 XTuner 大模型单卡低成本微调实战

书生·浦语大模型实战营笔记

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

文章目录

  • 书生·浦语大模型实战营笔记
  • 前言
  • 一、Finetune简介
    • 1.1两种微调模式的简介
    • 1.2指令微调
    • 1.3 增量预训练微调
    • 1.4LoRa与QLoRa
  • 二、Xtuner简介
    • 2.1Xtuner的应用demo
    • 2.2自定义微调
  • 总结


前言

介绍Finetune和XTunner的概念。并微调Xtuner

一、Finetune简介

1.1两种微调模式的简介

两种微调模式:增量预训练、指令跟随
增量预训练:用文章、数据、代码等让基座模型学到一些新知识
指令跟随:用高质量的对话和问答数据让模型学会对话模板
书生·浦语大模型实战营笔记-第四节 XTuner 大模型单卡低成本微调实战_第1张图片
指令微调之前,模型不知道自己要回答一个问题

1.2指令微调

给定三个角色:
书生·浦语大模型实战营笔记-第四节 XTuner 大模型单卡低成本微调实战_第2张图片
这个指定角色的过程已经被Xtuner打包好了,可以一键运行
不同的LLM角色指定的模板会有所不同
书生·浦语大模型实战营笔记-第四节 XTuner 大模型单卡低成本微调实战_第3张图片
在指令微调时,只需要计算output(assistant)部分计算loos

1.3 增量预训练微调

不存在问答的场景,需要把system和user模板留空,只保留assistant部分

1.4LoRa与QLoRa

增加一个adapter,以少量的参数微调,减小显存消耗
QLoRa是LoRa的进一步优化
书生·浦语大模型实战营笔记-第四节 XTuner 大模型单卡低成本微调实战_第4张图片

二、Xtuner简介

支持热门数据集的映射
支持多数据的样本拼接

2.1Xtuner的应用demo

配置环境并安装xtuner

/root/share/install_conda_env_internlm_base.sh xtuner0.1.9
mkdir xtuner019
cd xtuner019
it clone -b v0.1.9  https://github.com/InternLM/xtuner
cd xtuner
pip install -e '.[all]'

创建数据集目录
oasst1数据集是一个对话数据集,包含了 35 种语言编写的 161,443 条消息以及 461,292 个质量评估

mkdir ~/ft-oasst1 && cd ~/ft-oasst1

拷贝配置文件

cd ~/ft-oasst1
xtuner copy-cfg internlm_chat_7b_qlora_oasst1_e3 .

表示复制7b模型,用oasst1模型,qlora方法,跑3个epoch
拷贝模型文件

cp -r /root/share/temp/model_repos/internlm-chat-7b ~/ft-oasst1/

拷贝数据集

cp -r /root/share/temp/datasets/openassistant-guanaco .

修改配置文件,把模型和数据集路径改成相对路径
开始训练

xtuner train ./internlm_chat_7b_qlora_oasst1_e3_copy.py

tumx后台运行
创建tumx窗口后可以使用ctrl+B,+D回到终端,或者输入tmux detach
使用tmux attach -t xtuner回到刚刚的窗口

apt update -y # 更新apt
apt install tmux # 安装tmux
tmux new -s xtuner # 创建一个叫xtuner的tmux窗口

修改配置文件中的max_epoch为1,并添加–deepspeed deepspeed_zero2,缩短训练时间
此时预估时间是1小时多。显著缩短了
书生·浦语大模型实战营笔记-第四节 XTuner 大模型单卡低成本微调实战_第5张图片
跑完训练后:
在这里插入图片描述
在ft-oasst1文件夹下运行如下指令,将PTH转换成HuggingFace模型

mkdir hf
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

必须要运行export MKL_SERVICE_FORCE_INTEL=1,否则将会报错
在这里插入图片描述
将hf中的adapter合并到大语言模型中:

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

实现demo
修改InternLM中的cli_demo.py,把模型路口修改为“merged‘’
在这里插入图片描述
然后运行cli_demo.py
提问一个oasst1数据集中的问题,发现给出的回答跟数据集中基本一致
书生·浦语大模型实战营笔记-第四节 XTuner 大模型单卡低成本微调实战_第6张图片
书生·浦语大模型实战营笔记-第四节 XTuner 大模型单卡低成本微调实战_第7张图片

也可以直接用xtuner chat ./merged --prompt-template internlm_chat
与模型对话
加上-- bits 4之后,模型加载和回复的速度江湖更快

2.2自定义微调

如果要用别的数据集进行微调,需要将数据转换成Xtuner的格式
准备配置文件
运行xtuner微调
然后把pth转换成Huggingface格式
也可以使用MAAgent数据集微调,让LLM具有Agent的能力,这样一来模型就可以根据需要决定是否要调用插件

总结

主要学习了Xtuner的基本功能,并基于oasst1数据集做了微调demo

你可能感兴趣的:(笔记)