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


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

作业

见上方

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/340151.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

docker安装redis以及持久化

为了避免当虚拟机关机后redis数据丢失的情况&#xff0c;redis需要持久化。所以要挂载数据卷 创建数据和配置存放的目录 [root192 data]# pwd /root/data [root192 data]# mkdir -p /root/data/redis/conf && chmod 777 /root/data/redis/conf [root192 data]# mkdir …

php反序列化中的pop链

目录 一、什么是POP 二、成员属性赋值对象 例题&#xff1a; 方法一 方法二 三、魔术方法的触发规则 例题&#xff1a; 四、POC的编写 例题1&#xff1a; 例题2 [NISACTF 2022]babyserialize 今日总结&#xff1a; 一、什么是POP 在反序列化中&#xff0c;我们…

项目资源管理

目录 1.概述 2.六个过程 2.1. 规划资源管理 2.2. 估算活动资源 2.3. 获取资源 2.4. 建设团队 2.5. 管理团队 2.6. 控制资源 3.应用场景 3.1.十个应用场景 3.2.软件开发项目 3.2.1. 资源规划 3.2.2. 资源分配 3.2.3. 资源获取 3.2.4. 资源优化 3.2.5. 资源监控与…

【AI基础】第二步:安装AI运行环境

开局一张图&#xff1a; 接下来按照从下往上的顺序来安装部署。 规则1 注意每个层级的安装版本&#xff0c;上层的版本由下层版本决定 比如CUDA的版本&#xff0c;需要看显卡安装了什么版本的驱动&#xff0c;然后CUDA的版本不能高于这个驱动的版本。 这个比较好理解&#xff…

ES 生命周期管理

一 .概念 ILM定义了四个生命周期阶段&#xff1a;Hot&#xff1a;正在积极地更新和查询索引。Warm&#xff1a;不再更新索引&#xff0c;但仍在查询。cold&#xff1a;不再更新索引&#xff0c;很少查询。信息仍然需要可搜索&#xff0c;但是如果这些查询速度较慢也可以。Dele…

Java面试——中间件

OpenFeign 1、openFeign是一个HTTP客户端&#xff0c;它融合了springmvc的注解&#xff0c;使之可以用REST风格的映射来请求转发。 2、可以把openFegin理解为是controller层或是service层。可以取代springmvc控制层作为请求映射&#xff0c;亦或是作为service层处理逻辑&#…

C++ priority_queue简单源码剖析:priority_queue模拟实现

文章目录 1. priority_queue介绍2. priority_queue模拟实现3. 适配器与虚函数 大家好&#xff01;本文会用C模拟一个基本的priority_queue类&#xff0c;帮助我们更好的理解priority_queue的内置函数的实现与规则。 1. priority_queue介绍 priority_queue被叫做优先队列&#…

ESP使用巴法云远程OTA(VScode + Platform io)

ESP使用巴法云远程OTA&#xff08;Platform&#xff09; 什么是OTA&#xff1a; OTA&#xff08;Over-the-AirTechnology&#xff09;即空中下载技术&#xff0c;是通过移动通信的空中接口实现对移动终端设备及SIM卡数据进行远程管理的技术。OTA升级是物联网&#xff08;IOT&am…

【C++初阶学习】第十二弹——stack和queue的介绍和使用

C语言栈&#xff1a;数据结构——栈(C语言版)-CSDN博客 C语言队列&#xff1a;数据结构——队列&#xff08;C语言版&#xff09;-CSDN博客 前言&#xff1a; 在之前学习C语言的时候&#xff0c;我们已经学习过栈与队列&#xff0c;并学习过如何使用C语言来实现栈与队列&…

企业软件产品和服务 之 设计保证安全 七项承诺

1. 引言 公司如何保护自己免受数据泄露的影响&#xff1f;标准答案就是&#xff1a; “启用多因素身份验证”——MTA&#xff08;Enable multifactor authentication&#xff09;。 但是&#xff0c;目前很多公司仍然盲目地只使用密码作为唯一的身份来源。 网络安全的核心是…

深入了解 C 语言 Bug

目录 一、引言二、Bug的定义三、Bug的由来四、Bug的影响五、应对 Bug 的方法六、结论 一、引言 1、在 C 语言的编程世界中&#xff0c;Bug 是一个我们无法回避的话题。 2、Bug&#xff0c;简单来说&#xff0c;就是程序中存在的错误或缺陷。它可以表现为程序运行结果的异常、崩…

步进电机双闭环细分控制(matlab仿真)内含课设等参考文件

1.1 步进电机工作原理 步进电机是一种用电脉冲进行控制&#xff0c;将电脉冲信号转换成相位移的电机&#xff0c;其机械位移和转速分别与输入电机绕组的脉冲个数和脉冲频率成正比,每一个脉冲信号可使步进电机旋转一个固定的角度。脉冲的数量决定了旋转的总角度&#xff0c;脉…

英伟达开源新利器NV-Embed向量模型,基于双向注意力的LLM嵌入模型,MTEB 56项任务排名第一

前言 文本嵌入模型能够将文本信息转化为稠密的向量表示&#xff0c;并在信息检索、语义相似度计算、文本分类等众多自然语言处理任务中发挥着关键作用。近年来&#xff0c;基于解码器的大型语言模型 (LLM) 开始在通用文本嵌入任务中超越传统的 BERT 或 T5 嵌入模型&#xff0c…

企业打款验证API在Java、Python、PHP中的使用教程

随着企业银行账号数量的增加和银行间的连接方式不断丰富&#xff0c;企业在进行资金交易时需要确保所填写的收款方账户信息的准确性和合法性&#xff0c;以避免资金损失和风险。然而&#xff0c;由于银行数量众多、地域分布广泛&#xff0c;不同银行间的账户验证机制和信息交互…

网络编程(八)

网络编程&#xff08;八&#xff09; 数据库数据库的分类基于嵌入式的数据库什么是SQLite?为什么使用SQLite?sqlite3数据库的安装 sqlite3中的点命令.open 数据库文件名字.tables [数据库文件名].schema 表名.database.quit.head on.mode column SQLite数据库中的数据类型SQL…

【Linux】Linux环境基础开发工具_4

文章目录 四、Linux环境基础开发工具gcc和g动静态库的理解 make和MakefileLinux小程序---进度条 未完待续 四、Linux环境基础开发工具 gcc和g 动静态库的理解 动态库的优点&#xff1a;比较节省资源&#xff0c;不会出现太多重复代码。 动态库的缺点&#xff1a;对库的依赖性…

C语言 数组——数组的其他应用之筛法求素数

目录 数组的其他应用 求100以内的所有素数 筛法求100以内的所有素数 自顶向下、逐步求精设计算法 数组的其他应用 求100以内的所有素数 筛法求100以内的所有素数 自顶向下、逐步求精设计算法 step 1&#xff1a;设计总体算法  初始化数组a&#xff0c;使a[2]2, a[3]3,..…

算法 java 排序和查找

排序和查找 冒泡排序&#xff08;稳定&#xff09;选择排序&#xff08;不稳定&#xff09;插入排序&#xff08;稳定&#xff09;希尔排序&#xff08;不稳定&#xff09;归并排序&#xff08;稳定&#xff09;快速排序&#xff08;不稳定&#xff09;堆排序计数排序桶排序基数…

C++设计模式——Adapter适配器模式

一&#xff0c;适配器模式简介 适配器模式是一种结构型设计模式&#xff0c;用于将已有接口转换为调用者所期望的另一种接口。 适配器模式让特定的API接口可以适配多种场景。例如&#xff0c;现有一个名为"Reader()"的API接口只能解析txt格式的文件&#xff0c;给这…

【AR开发-开源框架】使用Sceneform-EQR快速开发AR应用,当前接入了AREngine、ORB-SLAM,可快速地适配不同的安卓设备

Sceneform-EQR Sceneform 概览 Sceneform是一个3D框架&#xff0c;具有基于物理的渲染器&#xff0c;针对移动设备进行了优化&#xff0c;使您可以轻松构建增强现实应用程序&#xff0c;而无需OpenGL。 借助 Sceneform&#xff0c;您可以轻松地在 AR 应用和非 AR 应用中渲染…