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

本文介绍了Finetune在大语言模型中的两种常见模式:增量预训练和指令跟随,以及LORA如何减少参数量。此外,XTuner作为一款工具,支持多种微调算法和硬件适配,详细展示了从安装到微调、模型转换和部署的实战过程,包括量化技术的应用。
摘要由CSDN通过智能技术生成

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
  • 9
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值