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

Finetune简介

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

增量预训练微调

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

指令跟随微调

使用场景:让模型学会对话模版,根据人类指令进行对话
训练数据:高质量的对话、问答数据
在这里插入图片描述
实际对话中的三个角色

  • System:给定一些上下文信息,比如你是一个XX助手
  • User:实际用户,会提出一些问题
  • Assistant:根据User的输入,结合System的上下文信息,做出回答
    不同的开源模板不尽相同
  • LlaMa 2
    • <<SYS>> System上下文开始
    • <</SYS>> System上下文结束
    • [INST] User指令开始
    • [/INST] User指令结束
  • InternLM
    • <|System|> System上下文开始
    • <|User|> User指令开始
    • <eoh> EndofHuman,User指令结
    • <|Bot|> Assistant开始回答
    • <eoa> EndofAssistant,Assistant回答结束
      在这里插入图片描述

LoRA

LoRA是通过在原本的Linear旁,新增一个支路,包含两个连续的小Linear 新增的这个支路通常叫做Adapter
Adapter参数远小于原本的Linear 能大幅减低训练的显存消耗。
在这里插入图片描述
LoRA只对部分进行改动
在这里插入图片描述

XTuner介绍

功能亮点

  • 适配多种生态
    • 多种微调算法:多种微调策略与算法,覆盖各类SFT场景
    • 适配多种开源生态:支持加载HuggingFace、ModelScope模型或数据集
    • 自动优化加速:开发者无需关注复杂的显存优化与计算加速细节
  • 适配多种硬件
    • 训练方案覆盖NVIDIA20系以上所有显卡
    • 最低只需8GB显存即可微调7B模型

XTuner 技术架构图

在这里插入图片描述

8GB显存玩转LLM

Flash Attention 和 DeepSpeed ZeRO是XTuner最重要的两个优化技巧

Flash Attention

将Attention计算并行化 避免了计算过程中Attention Score NxN的显存占用

DeepSpeed ZeRO

通过将训练过程中的参数、梯度和优化器状态切片保存,能够在多GPU训练时使用FP16的权重,相较于Pytorch的AMP训练,在单GPU上也能大幅节省显存
在这里插入图片描述
在这里插入图片描述

上手操作

平台

Ubuntu + Anaconda + CUDA/CUDNN + 20GB nvidia A100(1/4)

创建并激活环境

# 使用InternStudio开箱即用的conda环境
/root/share/install_conda_env_internlm_base.sh Xtuner
conda activate Xtuner
# 克隆远程仓库,从源码安装Xtuner
mkdir xtuner019 && cd xtuner019
git clone -b v0.1.9  https://github.com/InternLM/xtuner
# 进入源码目录
cd xtuner

# 从源码安装 XTuner
pip install -e '.[all]'

准备在 oasst1 数据集上微调 internlm-7b-chat

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

微调

准备配置文件

XTuner 提供多个开箱即用的配置文件,用户可以通过下列命令查看:
# 列出所有内置配置
xtuner list-cfg

在这里插入图片描述

假如显示bash: xtuner: command not found的话可以考虑在终端输入 export PATH=$PATH:‘/root/.local/bin’
拷贝一个配置文件到当前目录: # xtuner copy-cfg ${CONFIG_NAME} ${SAVE_PATH}

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

模型下载

由于下载模型很慢,用教学平台的同学可以直接复制模型。

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

数据集下载

数据集依然可以直接从平台复制

cd ~/ft-oasst1
# ...-guanaco 后面有个空格和英文句号
cp -r /root/share/temp/datasets/openassistant-guanaco .

下载完整之后的目录结构应该如下如所示:
在这里插入图片描述

修改配置文件

修改 internlm_chat_7b_qlora_oasst1_e3_copy.py 文件,如下所示:
在这里插入图片描述

开始微调

根据实际情况选择单卡或者多卡训练:

# 单卡
## 用刚才改好的config文件训练
xtuner train ./internlm_chat_7b_qlora_oasst1_e3_copy.py

# 多卡
NPROC_PER_NODE=${GPU_NUM} xtuner train ./internlm_chat_7b_qlora_oasst1_e3_copy.py

# 若要开启 deepspeed 加速,增加 --deepspeed deepspeed_zero2 即可
  • 22
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值