【大模型】书生·浦语大模型实战营 第四节

文章介绍了XTuner这款工具,用于简化大模型的单卡微调过程,包括指令跟随和增量预训练方法,以及LoRA和QLoRA等低秩适应技术。此外,还提到了FlashAttention和DeepSpeedZeRO的优化策略,使得即使在8GB显卡上也能有效训练大型语言模型。
摘要由CSDN通过智能技术生成

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

请添加图片描述
by 汪周谦 | XTuner社区贡献者 (目前致力于使用大语言模型与CV模型构建多模态的诊疗体系的研究)

请添加图片描述

1. Finetune简介

请添加图片描述
请添加图片描述
LLM的下游应用中,增量预训练指令跟随是经常会用到的两种微调模式。

增量预训练

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

指令跟随

使用场景:让模型学会对话模版,根据人类指令进行对话。
训练数据:高质量的对话、问答数据。
请添加图片描述
海量预训练数据训出来一个base(pretrained)模型,在微调前并不能意识到你是在问一个问题,会单纯的去拟合训练数据集中的分布。需要通过pretrained方式让模型知道我们的意图。通过指令微调可以获得instructed大模型。
请添加图片描述

指令跟随微调

指令跟随微调是为了得到能够实际对话的LLM
介绍指令跟随微调前,需要先了解如何使用LLM进行对话

在实际对话时,通常会有三种角色

  • System 给定一些上下文信息,比如“你是一个安全的AI助手”
  • User 实际用户,会提出一些问题,比如“世界第一高峰是?”
  • Assistant 根据User的输入,结合System的上下文信息,做出回答,比如“珠穆拉玛峰”

在使用对话模型时,通常是不会感知到这三种角色的
请添加图片描述

指令跟随微调

对话模板

对话模板是为了能够让LLM区分出,SystemUserAssistant
不同的模型会有不同的模板

LlaMa
  • <> System上下文开始
  • <> System上下文结束
  • [INST] User指令开始
  • [/INST] User指令结束
InternLM
  • <|System|> :System上下文开始
  • <|User|> :User指令开始
  • :End of Human,User指令结束
  • <|Bot|> :Assistant开始回答
  • :End of Assistant,Assistant回答结束
    请添加图片描述

指令跟随微调

不同于增量预训练微调,数据中会有Input和Output希望模型学会的是答案(Output),而不是问题(Input)训练时只会对答案(Output)部分计算Loss。
训练时,会和推理时保持一致,对数据添加相应的对话模板。

请添加图片描述

增量预训练微调

为了让LLM知道什么时候开始一段话,什么时候结束一段话,实际训练时需要对数据添加起始符(BOS)和结束符(EOS);大多数的模型都是使用作为起始符,作为结束符。
请添加图片描述

LoRA & QLoRA

LoRA:LOW-RANK ADAPATION OF LARGE LANGUAGE MODELS

LLM的参数量主要集中在模型中的Linear,训练这些参数会耗费发亮的显存。
LoRA通过在原本的Linear旁,新增一个支路,包含两个连续的小Linear,新增的这个支路通常叫做Adapter。
Adapter参数量远小于原本的Linear,能大幅度降低训练的显存消耗。

请添加图片描述

LoRA & QLoRA

  1. Full Finetuning(No Adapters):
    1. Base Model参与训练并更新参数;
    2. 需要保存Base Model中参数的优化器状态;
  2. LoRA:
    1. Base Model只参与Forward;
    2. 只有Adapter部分Backward更新参数;
    3. 只需保存Adapter中参数的优化器状态;
  3. QLoRA:
    1. Base Model量化为4-bit
    2. 优化器状态在CPU与GPU间Offload
    3. Base Model只参与Forward;
    4. 只有Adapter部分Backward更新参数;
    5. 只需保存Adapter中参数的优化器状态;

2. XTuner介绍

请添加图片描述

  • 傻瓜化:以配置文件的形式封装了大部分微调场景,0基础的非专业人员也能一键开始微调。
  • 轻量级:对于7B参数量的LLM,维泰所需的最小显存仅为8GB:消费级显卡,colab。

XTuner简介

请添加图片描述

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

XTuner快速上手

请添加图片描述

  1. 安装
pip install xtuner
  1. 挑选配置模版
xtuner list-cfg -p internlm_20b
  1. 一键训练
xtuner train internlm_20b_qlora_oasst1_512_e3

Config命名规则
模型名:Internlm_20b 无chat代表是基座模型
使用算法:qlora
数据集:oasst1
数据长度:512
Epock:e3,epoch 3
请添加图片描述

自定义训练
  1. 拷贝配置模版
xtuner copy-cfg internlm_20b_qlora_oasst1_512_e3 ./
  1. 修改配置模版
vi internlm_20b_qlora_oasst1_512_e3_copy.py
  1. 启动训练
xtuner train internlm_20b_qlora_oasst1_512_e3_copy.py
常用超参

data_path: 数据路径或HuggingFace仓库名。
max_length: 单条数据最大Token数,超过则截断。
pach_to_max_length: 是否将多条短数据拼接到max_length,提高GPU利用率。
accumulative_counts:梯度累积,每多少次backward更新一次参数。
evaluation_inputs: 训练过程中,会根据给定的问题进行推理,便于观测训练状态。
evaluation_freq: Evaluation的评测间隔iter数。
请添加图片描述

对话

为了便于开发者查看训练效果,XTuner提供了一键对话接口。

Float16 模型对话
xtuner chat internlm/internlm-chat-20b
4bit 模型对话
xtuner chat internlm/internlm-chat-20b --bits 4
加载Adapter模型对话
xtuner chat internlm/internlm-chat-20b --adapter $ADAPTER_DIR

请添加图片描述

XTuner还支持工具类模型的对话,更多详见HuggingFace(xtuner/Llama-2-7b-qlora-moss-003-sft)类似于GPT中的plugin

XTuner数据引擎

请添加图片描述
数据处理流程
请添加图片描述
数据集映射函数:XTuner内置了多种热门数据集的映射函数。
对话模板映射函数:XTuner内置了多种对话模板映射函数。
开发者可以专注于数据内容,不必花费精力处理复杂的数据格式!
请添加图片描述
多数据样本拼接(Pack Dataset)
增强并行性,充分利用GPU资源!

请添加图片描述

  1. 拷贝配置模板
xtuner copy-cfg internlm_20b_qlora_alpaca_e3 ./
  1. 修改配置模板
iv internlm_20b_qlora_alpaca_e3_copy.py
  1. 启动训练
xtuner train internlm_20b_qlora_alpaca_e3_copy.py

3. 8GB显卡玩转LLM

请添加图片描述

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

Flash Attention

Flash Attention将Attention计算并行化,避免了计算过程中Attention Score NxN的显存占用(训练过程中的N都比较大

DeepSpeed ZeRO

ZeRO优化,通过将训练过程中的参数、梯度和优化器状态切片保存,能够在多GPU训练时显著节省显存。
除了将训练中状态切片外,DeepSpeed训练时使用FP16的权重,相较于Pytorch的AMP训练,在单GPU上也能大幅节省显存。

请添加图片描述
DeepSpeed和Flash Attention虽然能够大幅降低训练成本,但使用门槛相对较高,需要复杂的配置,甚至修改代码。
XTuner会自动dispatch Flash Attention,并一键启动DeepSpeed ZeRO。

xtuner train internlm_20b_qlora_oasst1_512_e3 \ --deepspeed deepspeed_zero3

请添加图片描述

4. 动手实战环节

请添加图片描述

  • 26
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值