书生·浦语大模型实战:XTuner 微调 LLM: 1.8B、多模态和 Agent(lesson 4)

书生·浦语大模型实战系列文章目录

书生·浦语大模型全链路开源体系发展历程和特点(lesson 1)
部署 InternLM2-Chat-1.8B(lesson 2-1)
部署八戒demo InternLM2-Chat-1.8B(lesson 2-2)
部署InternLM2-Chat-7B 模型(lesson 2-3)
部署浦语·灵笔2 模型(lesson 2-4)
部署InternLM Studio“茴香豆”知识助手(lesson 3)
XTuner 微调 LLM: 1.8B、多模态和 Agent(lesson 4)
LMDeploy 量化部署 LLM & VLM 实践(lesson 5)
Lagent & AgentLego 智能体应用搭建(lesson 6)
OpenCompass 大模型评测实战(lesson 7)



前言

概念
微调是指在已经预训练好的大型语言模型基础上,使用特定的数据集进行进一步的训练,使模型适应特定任务或领域。微调主要目的是,完成知识注入、指令对齐。
在大模型应用中,指令微调已成为预训练大模型在实际业务应用最重要的方式。许多垂直领域模型,都是在预训练模型的基础上,通过针对性的指令微调,可以更好地适应最终任务和对齐用户偏好。
比如,像GPT-3.5这样的大型语言模型(LLM)它所学到的知识截止到2021年9月,那么如果我们向ChatGPT询问2022年以后发生的事情,它可能会产生“幻觉”从而给出错误的答案。
再比如我们有一些关于企业的某些产品的业务数据,但是由于ChatGPT没有学习过这些数据,因此它也无法正确回答出关于这些产品的问题。为了扩大LLM的知识面,让LLM能够更好的学习并掌握新知识从而更好的为用户服务,因此我们需要对LLM进行微调(Finetune)


一、Finetune 简介

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

  • 增量预训练微调
  • 指令跟随微调

使用场景:让基座模型学习到一些新知识,如某个垂类领域的常识
训练数据:文章、书籍、代码等
使用场景:让模型学会对话模板,根据人类指令进行对话
训练数据:高质量的对话、问答数据

在这里插入图片描述
基座大模型和微调后的使用效果对比:
基座大模型和微调后的使用效果对比
一条应答数据的产生过程:
在这里插入图片描述
不同模型所使用的模板比较:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
对话模板的概念
在实际对话时,通常会有三种角色:

  • System
  • User
  • Assistant
    给定一些上下文信息,比如“你是一个安全的AI助手”,进行角色定义。
    实际用户,会提出一些问题,比如“世界第一高峰是?”
    根据User的输入,结合System的上下文信息,做出回答,比如“珠穆朗玛峰”。
    在实际使用对话模型时,通常用户是不会感知到这三种角色的。
    在这里插入图片描述
    在这里插入图片描述关于Lora和QLora
    LLM 的参数量主要集中在模型中的 Linear,训练这些参数会耗费大量的显存
    LoRA 通过在原本的 Linear 旁,新增一个支路,包含两个连续的小 Linear,
    新增的这个支路通常叫做 Adapter。Adapter 参数量远小于原本的 Linear,能大幅降低训练的显存消耗。
    在这里插入图片描述
    在这里插入图片描述

二、XTuner 介绍

XTuner支持与书生·浦语(InternLM)、Llama等多款开源大模型的适配,可执行增量预训练、指令微调、工具类指令微调等任务类型。硬件要求上,在Tesla T4、A100等传统数据中心之外,开发者最低使用消费级显卡便可进行训练,实现大模型特定需求能力。
XTuner 适配了多个热门开源数据集格式:
• Alpaca 格式,斯坦福大学开源数据集的格式,也是社区开源项目使用较多的一种格式;
• MOSS 格式,复旦大学开源指令微调数据集的格式,包含多轮对话和工具调用;
• Gunacao 格式,QLoRA 项目中所使用数据集的格式;
• OpenAI 格式,GPT-3.5-Turbo Finetune 接口要求的数据集格式;
开发者可直接使用对应格式的数据集,并支持多种格式数据源的混合使用,目前,更多适配的数据集格式正在持续更新。
除了支持多种数据集格式外,XTuner还针对大语言模型数据的特点,对各种数据集格式做了充分的解耦,相较于其他的微调开源项目,可以在不破坏大语言模型对话模版的情况下,对其进行微调。
针对GPU计算特点,在显存算力允许的情况下,XTuner支持将多条短数据拼接至模型最大输入长度,以此最大化GPU计算核心的利用率,显著提升训练速度。例如,在使用oasst1数据集微调Llama2-7B时,数据拼接后的训练时长仅为普通训练的 50%。
XTuner首次尝试将社区内常用的HuggingFace与OpenMMLab进行结合,兼顾易用性和可配置性。支持使用MMEngine Runner和HuggingFace Trainer两种训练引擎,开发者如有深度定制化需求,可根据使用习惯灵活配置。
XTuner内置了增量预训练、单轮&多轮对话指令微调、工具类指令微调的标准化流程,让开发者只需聚焦于数据本身。
同时,XTuner集成了QLoRA、DeepSpeed 和 FSDP 等技术,提供各种尺寸模型在各种规格硬件下的训练解决方案,通过XTuner一键式启动训练,仅需8GB显存即可微调 7B 模型。
通过在少量颜色注释数据集上对 InternLM-7B 进行指令微调训练,XTuner成功解锁了其调色能力。最终得到的模型甚至可以像“乙方”一样反复修订。
借助XTuner及插件开源数据集,XTuner研究团队还解锁了InternLM、Llama 等开源模型的隐藏能力,使其可以联网搜索、调用工具,获得更可靠的回复。
通过 XTuner ,开发者可以给大模型添加插件,补足大模型欠缺的能力。贯穿数据、预训练、微调、部署和评测五大环节的全链条工具体系,并提供免费商用.

功能:

  • 多种微调策略与算法,覆盖各类 SFT 场景
  • 适配多种开源生态
  • 支持加载 HuggingFace、ModelScope 模型或数据集
  • 适配多种硬件
  • 自动优化加速
  • 开发者无需关注复杂的显存优化与计算加速细节

训练方案覆盖 NVIDIA 20 系以上所有显卡,最低只需 8GB 显存即可微调 7B 模型。
XTuner 技术架构图
XTuner 技术架构图
Config 命名规则:
在这里插入图片描述
在这里插入图片描述
XTuner使用一般流程:
2.1 安装

pip install xtuner

2.2 挑选配置模板

xtuner list-cfg –p internlm_20b

2.3 一键训练

xtuner train internlm_20b_qlora_oasst1_512_e3

2.4 拷贝配置模板

xtuner copy-cfg internlm_20b_qlora_oasst1_512_e3 ./

2.5 修改配置模板

vi internlm_20b_qlora_oasst1_512_e3_copy.py

2.6 启动训练

xtuner train internlm_20b_qlora_oasst1_512_e3_copy.py

2.7 常用超参

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

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

  • Float 16 模型对话
xtuner chat internlm/internlm-chat-20b
  • 4bit 模型对话
 xtuner chat internlm/internlm-chat-20b --bits 4
  • 加载 Adapter 模型对话
xtuner chat internlm/internlm-chat-20b --adapater $ADAPTER_DIR

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

数据处理流程在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

三、8GB 显存玩转 LLM

两种加速方式:
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.
在这里插入图片描述

四、InternLM2 1.8B 模型

InternLM2-1.8B 提供了三个版本的开源模型.
• InternLM2-1.8B: 具有高质量和高适应灵活性的基础模型,为下游深度适应提供了
良好的起点。
• InternLM2-Chat-1.8B-SFT:在 InternLM2-1.8B 上进行监督微调 (SFT) 后得到的
对话模型。
• InternLM2-Chat-1.8B:通过在线 RLHF 在 InternLM2-Chat-1.8B-SFT 之上进
一步对齐。InternLM2-Chat-1.8B 表现出更好的指令跟随、聊天体验和函数调用,
推荐下游应用程序使用。(模型大小仅为3.78GB)
在 FP16 精度模式下,InternLM2-1.8B 仅需 4GB 显存的笔记本显卡即可顺畅运行。拥有 8GB 显存的消费级显卡,即可轻松进行 1.8B 模型的微调工作。如此低的硬件门槛,非常适合初学者使用,以深入了解和掌握大模型的全链路。

五、多模态 LLM 微调(图像理解)

LLM 套上 LoRA 之后,有了新的灵魂(角色),LLM 套上 Image Projector 之后,就有了眼睛。
自己构造– 数据对,基于InternLM2_Chat_1.8B这个文本单模态模型,使用LLaVA方案,训练一个给InternLM2_Chat_1.8B使用的Image Projector文件。
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
Pretrain阶段,使用大量的图片+简单文本(caption, 即图片标题)数据对,使LLM理解图像中的普遍特征。即对大量的图片进行粗看。
Pretrain 阶段训练完成后,此时的模型已经有视觉能力了!但是由于训练数据中都是图片+图片标题,所以此时的模型虽然有视觉能力,但无论用户问它什么,它都只会回答输入图片的标题。即,此时的模型只会给输入图像“写标题”。
在 Finetune阶段,使用图片+复杂文本数据对,来对Pret rain得到的ImageProjector 进行进一步的训练。

六、实战(详见作业部分)

小结

通过本节课的学习,初步了解了单模态模型微调的整个过程,以及对xtuner的初步认知,也深深感觉这个工具的强大。

  • 25
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值