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

2024-06-04 07:36

本文主要是介绍【InternLM实战营第二期笔记】04:XTuner 微调 LLM:1.8B、多模态、Agent,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文章目录

  • 笔记
    • 微调基础知识
    • Xtuner
    • 8G显存微调模型
    • InternLM2 1.8B
    • 多模态
    • 实践环节
      • 数据
      • 微调
      • 过拟合
      • WebUI 交互
    • 多模态微调
  • 作业

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

笔记

在这里插入图片描述

微调基础知识

在这里插入图片描述
在这里插入图片描述
这里感慨一下,垂直领域的训练还是挺困难的,尤其是数据资源并不丰富又有高精度要求的行业。
在这里插入图片描述
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 操作都慢得让人头秃,我从来没见过这种系统。作为一个日常炼丹的人我衷心希望浦语自己的研发使用的不是这种效率的开发环境……
同学们有自己环境的还是尽量用自己的吧,有益身心健康。
在这里插入图片描述
这话说得一点不错。读研的时候机器都要自己从头开始装,导师给的硬件都挺好的没啥非主流型号,头疼的主要是安装一些系统应用,网络环境问题懂的都懂,能完整装下来一个不报错的运行环境真不容易。


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

作业

见上方

这篇关于【InternLM实战营第二期笔记】04:XTuner 微调 LLM:1.8B、多模态、Agent的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1029454

相关文章

Python并行处理实战之如何使用ProcessPoolExecutor加速计算

《Python并行处理实战之如何使用ProcessPoolExecutor加速计算》Python提供了多种并行处理的方式,其中concurrent.futures模块的ProcessPoolExecu... 目录简介完整代码示例代码解释1. 导入必要的模块2. 定义处理函数3. 主函数4. 生成数字列表5.

Java Spring 中的监听器Listener详解与实战教程

《JavaSpring中的监听器Listener详解与实战教程》Spring提供了多种监听器机制,可以用于监听应用生命周期、会话生命周期和请求处理过程中的事件,:本文主要介绍JavaSprin... 目录一、监听器的作用1.1 应用生命周期管理1.2 会话管理1.3 请求处理监控二、创建监听器2.1 Ser

Apache 高级配置实战之从连接保持到日志分析的完整指南

《Apache高级配置实战之从连接保持到日志分析的完整指南》本文带你从连接保持优化开始,一路走到访问控制和日志管理,最后用AWStats来分析网站数据,对Apache配置日志分析相关知识感兴趣的朋友... 目录Apache 高级配置实战:从连接保持到日志分析的完整指南前言 一、Apache 连接保持 - 性

MQTT SpringBoot整合实战教程

《MQTTSpringBoot整合实战教程》:本文主要介绍MQTTSpringBoot整合实战教程,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考... 目录MQTT-SpringBoot创建简单 SpringBoot 项目导入必须依赖增加MQTT相关配置编写

JavaScript实战:智能密码生成器开发指南

本文通过JavaScript实战开发智能密码生成器,详解如何运用crypto.getRandomValues实现加密级随机密码生成,包含多字符组合、安全强度可视化、易混淆字符排除等企业级功能。学习密码强度检测算法与信息熵计算原理,获取可直接嵌入项目的完整代码,提升Web应用的安全开发能力 目录

Redis迷你版微信抢红包实战

《Redis迷你版微信抢红包实战》本文主要介绍了Redis迷你版微信抢红包实战... 目录1 思路分析1.1hCckRX 流程1.2 注意点①拆红包:二倍均值算法②发红包:list③抢红包&记录:hset2 代码实现2.1 拆红包splitRedPacket2.2 发红包sendRedPacket2.3 抢

springboot项目redis缓存异常实战案例详解(提供解决方案)

《springboot项目redis缓存异常实战案例详解(提供解决方案)》redis基本上是高并发场景上会用到的一个高性能的key-value数据库,属于nosql类型,一般用作于缓存,一般是结合数据... 目录缓存异常实践案例缓存穿透问题缓存击穿问题(其中也解决了穿透问题)完整代码缓存异常实践案例Red

Spring Boot拦截器Interceptor与过滤器Filter深度解析(区别、实现与实战指南)

《SpringBoot拦截器Interceptor与过滤器Filter深度解析(区别、实现与实战指南)》:本文主要介绍SpringBoot拦截器Interceptor与过滤器Filter深度解析... 目录Spring Boot拦截器(Interceptor)与过滤器(Filter)深度解析:区别、实现与实

基于C#实现MQTT通信实战

《基于C#实现MQTT通信实战》MQTT消息队列遥测传输,在物联网领域应用的很广泛,它是基于Publish/Subscribe模式,具有简单易用,支持QoS,传输效率高的特点,下面我们就来看看C#实现... 目录1、连接主机2、订阅消息3、发布消息MQTT(Message Queueing Telemetr

Nginx使用Keepalived部署web集群(高可用高性能负载均衡)实战案例

《Nginx使用Keepalived部署web集群(高可用高性能负载均衡)实战案例》本文介绍Nginx+Keepalived实现Web集群高可用负载均衡的部署与测试,涵盖架构设计、环境配置、健康检查、... 目录前言一、架构设计二、环境准备三、案例部署配置 前端 Keepalived配置 前端 Nginx