【InternLM实战营第二期笔记】04:XTuner 微调 LLM:1.8B、多模态、Agent


这回学乖了,打开本节课第一件事先不看教程而是装环境~

笔记

在这里插入图片描述

微调基础知识

在这里插入图片描述
在这里插入图片描述
这里感慨一下,垂直领域的训练还是挺困难的,尤其是数据资源并不丰富又有高精度要求的行业。
在这里插入图片描述
data sea 哈哈哈哈。“一条数据的一生”这几张图做的挺好的~
在这里插入图片描述
在这里插入图片描述
这是预训练数据的loss计算
在这里插入图片描述
这是sft数据的微调计算
在这里插入图片描述
PEFT 方法介绍
在这里插入图片描述
微调依赖资源逐渐减少
在这里插入图片描述

Xtuner

在这里插入图片描述
跟 llama-factory、axolotl 是平行工具
在这里插入图片描述
效率高于 llama-factory,不知道做了哪些优化
在这里插入图片描述

在这里插入图片描述
使用还是很方便的,现在都做到的配置化、一键运行
在这里插入图片描述
在这里插入图片描述
inference 也很方便
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

8G显存微调模型

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

InternLM2 1.8B

在这里插入图片描述
要是能开源一下 SFT 和 RLHF 的数据集就好了……

多模态

在这里插入图片描述
在这里插入图片描述
非原生多模态目前还是双(多)塔的结构。我记得22年底的时候对这些还完全没有概念,哎~
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
原来视觉的 CPT 阶段输入是图片+caption(标题),caption 可以是一样的,这个倒是第一次知道
在这里插入图片描述
在这里插入图片描述

实践环节

在这里插入图片描述

数据

在这里插入图片描述
重复一万遍还是有点狠啊,好在是 LoRA,不然调完除了自我认知估计啥也不会了。
在这里插入图片描述
(并行跑完数据制作,发现环境还没配完,幸亏这次开始的早
在这里插入图片描述
在这里插入图片描述
是这样的,数据解决80%的模型性能(performance)问题
配置部分别的还好说,这段没看懂:啥叫 OpenAI 格式?头回听说
在这里插入图片描述
去代码里看了一下,跟 ShareGPT 差不多……说的应该是 OpenAI 的微调 API 里规定的格式,还真没用过[笑哭]

教程给了完整的代码,先微调一把自我认知。
加载过程依然很折磨,祈祷一下微调过程能快一点

微调

在这里插入图片描述
packing 之后实际样本只有352,相比原来10K数据减少了很多,速度肯定也提升很多倍。
中间 steps 打印一些 test case 还是挺直观的
在这里插入图片描述
一开始吓得不行,好家伙直奔仨小时去了,结果越跑越快:
在这里插入图片描述
时间关系 DeepSpeed 的训练我就不复现了,上班族真没那么多时间……
趁训练期间先继续读教程:
在这里插入图片描述
在这里插入图片描述
看 log loss 下降很快,我估计几十个 steps 的时候三个测试问题应该就拟合得差不多了。
之前有一个微调经验是做一些一类数学题,loss<0.01的时候模型完全拟合 trainset,但通常也就基本丢失了泛化能力。
就像教程中说的,可以:

  1. 训练中测试更多 ckpt,选取更合理的版本
  2. 增加其他对话数据。但这个配比比较困难,原因大概率也跟预训练数据的分布有关系,一般都要反复测试、调整。

但也没关系。Jeremy Howard 提出过一种实操思路:任何模型训练,不管三七二十一先过拟合,即证明你所用的模型的 capacity 足够容纳你的数据,再逐渐减轻过拟合程度,找到一个最佳平衡点。当然对生成模型尤其是大语言模型来说也并不容易。

过拟合

300步,微调已经生效,此时 loss 已经小于0.01了:
在这里插入图片描述
时间关系,后续我使用 300 步时的 adapter 权重继续教程——转换权重时发现超出了分配的显存额度,只能先停掉了。
在这里插入图片描述
接下来转换 HF 格式、把 adapter merge 到主干权重:
在这里插入图片描述
运行 chat 推理模式:
在这里插入图片描述
奇怪,用300轮的 ckpt 就变弱智了……我猜 adapter 合并可能不是严格无损的,跟原权重 + LoRA 挂载的效果可能会有些不一样?
另外还有一点点出入,不知道为啥“小助手”后面的逗号没了,原始数据:

{
        "messages": [
            {
                "role": "user",
                "content": "请做一下自我介绍"
            },
            {
                "role": "assistant",
                "content": "我是主人的小助手,内在是上海AI实验室书生·浦语的1.8B大模型哦"
            }
        ]
    }

WebUI 交互

在这里插入图片描述
^ _ ^

多模态微调

(已经跑完上面任务的不要无脑复制代码哈,我调整显存额度后不小心把配环境的代码输进去了,一秒钟后反应过来,但已经晚了,只能再花大半个小时重新配环境……无语至极)
惨痛教训:
在这里插入图片描述
在这里插入图片描述
不得不再认真吐槽一下,书生的云平台上所有 IO 操作都慢得让人头秃,我从来没见过这种系统。作为一个日常炼丹的人我衷心希望浦语自己的研发使用的不是这种效率的开发环境……
同学们有自己环境的还是尽量用自己的吧,有益身心健康。
在这里插入图片描述
这话说得一点不错。读研的时候机器都要自己从头开始装,导师给的硬件都挺好的没啥非主流型号,头疼的主要是安装一些系统应用,网络环境问题懂的都懂,能完整装下来一个不报错的运行环境真不容易。


漫长的等待过去终于可以开始微调啦!
在这里插入图片描述
在这里插入图片描述
啊这?
重新检查了所有步骤,仍然如此。
我真的投降了……


解决

过了一晚还是觉得忍不了,嘛玩意儿啊,怎么就跑不通。
于是搜了上图这个 NoneType 的错误,真发现了问题所在:
https://github.com/InternLM/xtuner/issues/727
参考此处提示,寻思死马当活马医吧,把 transformers 降级到了 4.39.1,同时去看了教程使用的 xtuner0117 中 requirements.txt 的设置,觉得这次大概率稳了:

# Minimum 0.40.0.post4 to fix some 4-bit precision bugs
bitsandbytes>=0.40.0.post4
# Minimum 2.16.0 to fix some bugs, see https://github.com/huggingface/datasets/pull/6444
datasets>=2.16.0
einops
# Minimum 0.1.2 to fix some bugs, see https://github.com/InternLM/lagent/pull/44
lagent>=0.1.2
# Minimum 0.10.3 to support distributed evaluation for MMBench
# see https://github.com/open-mmlab/mmengine/pull/1469
mmengine>=0.10.3
openpyxl
# Minimum 0.4.0 to support QLoRA, see https://github.com/huggingface/peft/pull/476
peft>=0.4.0
scikit-image
scipy
SentencePiece
tiktoken
# limit pytorch version <= 2.1.2 as there may be some bugs in triton 2.2
torch<=2.1.2
torchvision<=0.16.2
# Minimum 4.36.0 to support `Cache` data structure used by KV Cache
# Registering a causal mask in `LlamaModel` is not friendly for very large
# `max_position_embeddings`. Refer to
# https://github.com/huggingface/transformers/blob/v4.38.0/src/transformers/models/llama/modeling_llama.py#L921-L923
transformers>=4.36.0,!=4.38.0,!=4.38.1,!=4.38.2
transformers_stream_generator

因此安装环境时 transformers 只排除了个别版本并指定下限而没有限制上限,偏偏 tfs 还是个更新很快的 package,这也跟教程、QA 中没有提及此问题能对上。再次尝试:
在这里插入图片描述
终于搞定了。所以上面的 requirements.txt 对应行应该改成

transformers>=4.36.0,!=4.38.0,!=4.38.1,!=4.38.2,<=4.39.1

多模态测试

Finetune 前

在这里插入图片描述

Finetune 后

在这里插入图片描述

作业

见上方。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值