【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版本信息获取方法详解与实战

《Python版本信息获取方法详解与实战》在Python开发中,获取Python版本号是调试、兼容性检查和版本控制的重要基础操作,本文详细介绍了如何使用sys和platform模块获取Python的主... 目录1. python版本号获取基础2. 使用sys模块获取版本信息2.1 sys模块概述2.1.1

Python爬虫HTTPS使用requests,httpx,aiohttp实战中的证书异步等问题

《Python爬虫HTTPS使用requests,httpx,aiohttp实战中的证书异步等问题》在爬虫工程里,“HTTPS”是绕不开的话题,HTTPS为传输加密提供保护,同时也给爬虫带来证书校验、... 目录一、核心问题与优先级检查(先问三件事)二、基础示例:requests 与证书处理三、高并发选型:

Oracle Scheduler任务故障诊断方法实战指南

《OracleScheduler任务故障诊断方法实战指南》Oracle数据库作为企业级应用中最常用的关系型数据库管理系统之一,偶尔会遇到各种故障和问题,:本文主要介绍OracleSchedul... 目录前言一、故障场景:当定时任务突然“消失”二、基础环境诊断:搭建“全局视角”1. 数据库实例与PDB状态2

Git进行版本控制的实战指南

《Git进行版本控制的实战指南》Git是一种分布式版本控制系统,广泛应用于软件开发中,它可以记录和管理项目的历史修改,并支持多人协作开发,通过Git,开发者可以轻松地跟踪代码变更、合并分支、回退版本等... 目录一、Git核心概念解析二、环境搭建与配置1. 安装Git(Windows示例)2. 基础配置(必

MyBatis分页查询实战案例完整流程

《MyBatis分页查询实战案例完整流程》MyBatis是一个强大的Java持久层框架,支持自定义SQL和高级映射,本案例以员工工资信息管理为例,详细讲解如何在IDEA中使用MyBatis结合Page... 目录1. MyBATis框架简介2. 分页查询原理与应用场景2.1 分页查询的基本原理2.1.1 分

使用Python批量将.ncm格式的音频文件转换为.mp3格式的实战详解

《使用Python批量将.ncm格式的音频文件转换为.mp3格式的实战详解》本文详细介绍了如何使用Python通过ncmdump工具批量将.ncm音频转换为.mp3的步骤,包括安装、配置ffmpeg环... 目录1. 前言2. 安装 ncmdump3. 实现 .ncm 转 .mp34. 执行过程5. 执行结

SpringBoot 多环境开发实战(从配置、管理与控制)

《SpringBoot多环境开发实战(从配置、管理与控制)》本文详解SpringBoot多环境配置,涵盖单文件YAML、多文件模式、MavenProfile分组及激活策略,通过优先级控制灵活切换环境... 目录一、多环境开发基础(单文件 YAML 版)(一)配置原理与优势(二)实操示例二、多环境开发多文件版

Three.js构建一个 3D 商品展示空间完整实战项目

《Three.js构建一个3D商品展示空间完整实战项目》Three.js是一个强大的JavaScript库,专用于在Web浏览器中创建3D图形,:本文主要介绍Three.js构建一个3D商品展... 目录引言项目核心技术1. 项目架构与资源组织2. 多模型切换、交互热点绑定3. 移动端适配与帧率优化4. 可

从原理到实战解析Java Stream 的并行流性能优化

《从原理到实战解析JavaStream的并行流性能优化》本文给大家介绍JavaStream的并行流性能优化:从原理到实战的全攻略,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的... 目录一、并行流的核心原理与适用场景二、性能优化的核心策略1. 合理设置并行度:打破默认阈值2. 避免装箱

Maven中生命周期深度解析与实战指南

《Maven中生命周期深度解析与实战指南》这篇文章主要为大家详细介绍了Maven生命周期实战指南,包含核心概念、阶段详解、SpringBoot特化场景及企业级实践建议,希望对大家有一定的帮助... 目录一、Maven 生命周期哲学二、default生命周期核心阶段详解(高频使用)三、clean生命周期核心阶