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

发布时间:2024年01月19日

1?Finetune?简介

LLM的下游应用中,增量预训练和指令跟随是经常会用到两种的微调模式

增量预训练微调

使用场景:让基座模型学习到一些新知识,如某个垂类领域的常识训练数据:文章、书籍、代码等

指令跟随微调

使用场景:让模型学会对话模板,根据人类指令进行对话训练数据:高质量的对话、问答数据

LORA?&?QLoRA

LLM?的参数量主要集中在模型中的?Linear,训练这些参数会耗费大量的显存

LORA?通过在原本的?Linear?旁,新增一个支路,包含两个连续的小?Linear.

新增的这个支路通常叫做?Adapter

Adapter?参数量远小于原本的Linear,能大幅降低训练的显存消耗

2?XTuner?介绍

功能亮点

适配多种生态

  • 多种微调算法

  • 多种微调策略与算法,覆盖各类?SFT?场景

  • 适配多种开源生态

  • 支持加载?HuggingFace、ModelScope?模型或数据集

  • 自动优化加速

  • 开发者无需关注复杂的显存优化与计算加速细节

适配多种硬件

  • 训练方案覆盖?NVIDIA?20?系以上所有显卡

  • 最低只需8GB?显存即可微调7B模型

3 实战

3.1 平台

Ubuntu + Anaconda + CUDA/CUDNN + 8GB nvidia显卡

3.2 安装

conda create --name xtuner0.1.9 python=3.10 -y

# 激活环境
conda activate xtuner0.1.9
# 进入家目录 (~的意思是 “当前用户的home路径”)
cd ~
# 创建版本文件夹并进入,以跟随本教程
mkdir xtuner019 && cd xtuner019
# 拉取 0.1.9 的版本源码
git clone -b v0.1.9 https://gitee.com/Internlm/xtuner
# 进入源码目录
cd xtuner
# 从源码安装 XTuner
pip install -e '.[all]'


# 创建一个微调 oasst1 数据集的工作路径,进入
mkdir ~/ft-oasst1 && cd ~/ft-oasst1

准备工作

# 列出所有内置配置
xtuner list-cfg

3.3 微调

3.3.1 准备配置文件
cd ~/ft-oasst1
xtuner copy-cfg internlm_chat_7b_qlora_oasst1_e3 .
3.3.2 模型下载
cp -r /root/share/temp/model_repos/internlm-chat-7b ~/ft-oasst1/
3.3.3 数据集下载
cd ~/ft-oasst1
# ...-guanaco 后面有个空格和英文句号啊
cp -r /root/share/temp/datasets/openassistant-guanaco .
2.3.4 修改配置文件

修改其中的模型和数据集为 本地路径

cp -r /root/share/temp/model_repos/internlm-chat-7b ~/ft-oasst1/
# 修改模型为本地路径
- pretrained_model_name_or_path = 'internlm/internlm-chat-7b'
+ pretrained_model_name_or_path = './internlm-chat-7b'

# 修改训练数据集为本地路径
- data_path = 'timdettmers/openassistant-guanaco'
+ data_path = './openassistant-guanaco'
3.3.5 开始微调
# 单卡
## 用刚才改好的config文件训练
xtuner train ./internlm_chat_7b_qlora_oasst1_e3_copy.py

#检查路径
ls
#删除微调路径
rm -rf work_dirs

xtuner train ./internlm_chat_7b_qlora_oasst1_e3_copy.py

# 若要开启 deepspeed 加速,增加 --deepspeed deepspeed_zero2 即可

Tmux是一个终端复用器,它允许用户在单个终端会话中创建和管理多个终端窗口。通过使用Tmux,您可以在一个终端窗口中同时运行多个命令行应用程序,而无需打开多个终端窗口或使用多个SSH会话。

Tmux的主要功能包括:

  1. 分割窗口:您可以将终端窗口垂直或水平分割成多个窗格,每个窗格可以运行不同的命令。

  2. 会话管理:您可以创建和管理多个Tmux会话,并在它们之间切换。这对于同时处理多个任务或在远程服务器上工作特别有用。

  3. 窗口和窗格管理:您可以在会话中创建新窗口,并在窗口之间切换。每个窗口可以包含一个或多个窗格,您可以自由调整窗格的大小和位置。

  4. 后台运行:即使断开SSH会话或关闭终端窗口,Tmux会话仍然在后台运行,您可以随时重新连接并恢复会话。

Tmux是一款强大而灵活的工具,特别适用于需要同时管理多个终端窗口的开发人员和系统管理员。

apt update -y
apt install tmux -y
tmux new -s finetune
3.3.6 将得到的 PTH 模型转换为 HuggingFace 模型(成 Adapter 文件夹)
mkdir hf
export MKL_SERVICE_FORCE_INTEL=1

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

3.4 部署与测试

3.4.1 将 HuggingFace adapter 合并到大语言模型
xtuner convert merge ./internlm-chat-7b ./hf ./merged --max-shard-size 2GB
3.4.2?与合并后的模型对话
# 加载 Adapter 模型对话(Float 16)
xtuner chat ./merged --prompt-template internlm_chat

# 4 bit 量化加载
xtuner chat ./merged --prompt-template internlm_chat --bits 4
文章来源:https://blog.csdn.net/Y2483490891/article/details/135523419
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。