大模型与多模态模型微调--书生·浦语大模型第二期实战营第四课笔记&作业

一、笔记

1.1 Xtuner简介

https://github.com/InternLM/XTuner?tab=readme-ov-file

性能
  • 支持FlashAttention、Triton kernels等,以加速训练吞吐。
  • 兼容DeepSpeed,支持ZeRO训练优化策略,以优化训练过程。
支持的模型
  • InternLM、Mixtral-8x7B、Llama2、ChatGLM、Qwen、Baichuan、多模态图文模型LLaVA
微调算法
  • 支持QLoRA、LoRA、全量参数微调等多种微调算法。
  • 支持增量预训练、指令微调与Agent微调。
  • 预定义众多开源对话模板,方便用户与模型进行对话。
两种Finetune范式

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

增量预训练微调
  • 使用场景:让基座模型学习到一些新知识,如某个垂类领域的常识。
  • 训练数据:文章、书籍、代码等。
指令跟随微调
  • 使用场景:让模型学会对话模板,根据人类指令进行对话。
  • 训练数据:高质量的对话、问答数据。
微调示例
  • InternLM:指令跟随微调后的模型,能够根据指令进行对话。例如,当被问到“世界第一高峰是什么峰?”时,回答“珠穆朗玛峰”。
  • 垂类对话模型:专注于特定领域的对话模型,通过增量预训练微调来处理垂类问题。

这两种微调范式旨在提升大型语言模型(LLM)在特定任务或领域中的性能,使其更好地适应下游应用的需求。

部署与评测流程支持
  • 训练所得模型可以无缝接入部署工具库LMDeploy、大规模评测工具库OpenCompass及VLMEvalKit。

1.2 自我认知训练教程

什么是大模型的自我认知训练?大模型的自我认知训练是指通过特定的训练方法和数据集,使大型语言模型(Large Language Models,LLMs)能够识别和理解自己的角色、功能和身份。在github的链接里面:https://github.com/InternLM/Tutorial/blob/camp2/xtuner/personal_assistant_document.md 上海实验室老师给出了一个小demo,讲解自我认知训练的一般流程,关键点有:

1.2.1 数据生成

  • Python脚本: 使用名为 generate_data.py 的Python脚本生成数据。
  • 用户名称设置: 通过设置变量 name 来定义用户的名称(例如 ‘不要姜葱蒜大佬’)。
  • 数据重复次数: 通过变量 n 定义数据重复添加的次数(例如 10000)。
  • 数据结构初始化: 初始化包含用户和助手角色对话的数据结构。
  • 数据写入: 将重复添加的数据写入 ‘personal_assistant.json’ 文件中。

1.2.2 训练性能配置

  • 开发机创建: 在InternStudio平台上创建开发机并选择CUDA 11.7版本的镜像。
  • 资源配置: 使用 10% A100 GPU资源进行训练。

1.2.3 训练超参数

  • 批次大小 (batch_size): 设置为 1。
  • 最大训练轮数 (max_epochs): 设置为 2。
  • 学习率 (lr): 设置为 2e-4。
  • Adam优化器动量参数 (betas): 设置为 (0.9, 0.999)。
  • 权重衰减 (weight_decay): 设置为 0。
  • 梯度裁剪最大范数 (max_norm): 设置为 1。
  • 学习率预热比例 (warmup_ratio): 设置为 0.03。
  • 评估频率 (evaluation_freq): 设置为 300。

1.2.4 使用DeepSpeed方法

  • DeepSpeed库: 用于优化和加速模型训练。
  • ZeRO优化器: 减少内存占用,允许训练更大的模型。
  • 混合精度训练: 结合FP32和FP16提高计算速度。
  • 模型并行性: 将模型分布在不同GPU上进行训练。
  • 梯度累积: 在小批量多次迭代后累积梯度更新。
  • 优化策略: 提供多种优化策略,如学习率调度。
  • 启用DeepSpeed: 在XTuner train 命令中添加 --deepspeed 参数,例如 --deepspeed deepspeed_zero2 来启用ZeRO-2优化策略。

二、作业

2.1 训练自己的小助手认知

2.1.1安装环境后,生成数据

在这里插入图片描述

2.1.2 检查文件,启动训练(只有单卡gpu,未启动多卡并行)

在这里插入图片描述

2.1.3 训练结果

训练前:
训练前
训练完成后:
![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/521a4e07bd0d4be88be0bb7aa9cfe9a9.png

到第四十行日志时,输出的loss曲线:
在这里插入图片描述

2.2 将自我认知的模型上传到 OpenXLab,并将应用部署到 OpenXLab

2.3 复现多模态微调

2.3.1cpt阶段

官方已经为大家提供了Pretrain阶段的产物——iter_2181.pth文件。它就是幼稚园阶段的Image Projector!大家带着iter_2181.pth文件继续进入下一阶段进行Finetune即可。

2.3.2 sft阶段

a.生成数据(已有的数据repeat多次,已有数据通过较大的多模态模型生成)
cd ~ && git clone https://github.com/InternLM/tutorial -b camp2 && conda activate xtuner0.1.17 && cd tutorial

python /root/tutorial/xtuner/llava/llava_data/repeat.py \
  -i /root/tutorial/xtuner/llava/llava_data/unique_data.json \
  -o /root/tutorial/xtuner/llava/llava_data/repeated_data.json \
  -n 200
b.配置

在这里插入图片描述

c.训练

在这里插入图片描述

d.结果对比

微调前:
在这里插入图片描述
微调后:
在这里插入图片描述

三、参考

https://github.com/InternLM/XTuner?tab=readme-ov-file
https://github.com/InternLM/Tutorial/blob/camp2/xtuner/personal_assistant_document.md
https://github.com/InternLM/Tutorial/blob/camp2/xtuner/homework.md

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值