XTuner 微调 LLM:1.8B、多模态、Agent

devtools/2024/10/18 13:58:06/

两种微调范式:增量预训练和指令微调

在这里插入图片描述
在大语言模型下游应用中,主要有两种微调范式:增量预训练和指令微调。增量预训练旨在让模型学习特定领域的常识,而不需要有监督标注的数据;指令微调则是通过高质量的对话数据训练模型,使其能够根据人类指令进行对话并输出符合人类喜好偏好的内容。增量预训练的使用场景是在已有基础模型上,增加新的领域知识训练数据,如文章、书籍或代码等,无需问答对标注。指令微调则需要高质量的问答对或对话数据,以便模型能根据实际问题回答内容。

如何理解增量预训练和指令微调的区别?

增量预训练时,模型只接收简单的问题数据(如“珠穆朗玛峰是世界第一高峰”),无法识别提问意图;而指令微调阶段,模型通过问答对数据能理解问题,并能回答相关问题(如“什么是肺癌”)。
在这里插入图片描述
微调方案:

在这里插入图片描述
LORA微调利用一种名为“lora”的方法,在优化模型时仅对部分关键参数进行改动,避免对整个模型的所有部位进行大规模改动,从而大大减少了显存占用和计算成本。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

步骤:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
XTuner还支持工具类模型的对话,更多详见HuggingFace Hub(xtuner/Llama-2-7b-qlora-moss-003-sft)
在这里插入图片描述
在这里插入图片描述

InternLM2-1.8B 提供了三个版本的开源模型,大家可以按需选择。

·

  1. InternLM2-1.8B:具有高质量和高适应灵活性的基础模型,为下游深度适应提供了 良好的起点。
  2. InternLM2-Chat-1.8B-SFT:在 InternLM2-1.8B 上进行监督微调(SFT)后得到的 对话模型。
  3. InternLM2-Chat-1.8B:通过在线 RLHF 在 InternLM2-Chat-1.8B-SFT 之上进
    一步对齐。InternLM2-Chat-1.8B表现出更好的指令跟随、聊天体验和函数调用,推荐下游应用程序使用。(模型大小仅为3.78GB)

FP16 精度模式下,InternLM2-1.8B仅需4GB显存的笔记本显卡即可顺畅运行。
拥有8GB显存的消费级显卡,即可轻松进行1.8B模型的微调工作
。如此低的硬件门槛,非常适合初学者使用,以深入了解和掌握大模型的全链路。
在这里插入图片描述

多模态大语言模型是如何将文本模型扩展至图像领域的?

多模态大语言模型通过将单模态文本大语言模型(如LLM)与图像处理模块结合,实现了对图像的处理和理解。训练阶段,利用文本问答数据和图像向量作为输入,输出文本回答,从而训练出一个能够处理图像的模型(image projector)。在测试阶段,将已训练好的image projector与单模态文本模型组合,实现了多模态的视觉功能。在这里插入图片描述
在这里插入图片描述

单模态单元模型如何加载到显卡并进行图像问题预测?图像项目(image project)训练是如何赋予大语言模型视觉能力的?

在单模态单元模型加载到显卡后,输入图像及用户问题,模型会输出预测文本。这类似于之前提到的lora微调方案,两者都是在已有的大语言模型基础上,用新数据训练出一个新的小型模型。图像项目训练分为两个阶段:pretrain阶段和Finetune阶段。pretrain阶段大量使用图像及其标题数据(不一定都是问题,可能是描述或标签)让单模态文本模型快速了解图像普遍特征。而Finetune阶段则是在显卡中使用高质量图像加复杂对话文本的数据对模型进行进一步训练,类似于指令微调,最终得到具有视觉识别能力的模型。
在这里插入图片描述
在这里插入图片描述

作业:

训练自己的小助手认知

数据格式,角色+问答
在这里插入图片描述
微调开始过程
在这里插入图片描述
后面逐渐成功了:
在这里插入图片描述
web页面:
在这里插入图片描述
导出

conda list -e > requirements.txt

部署:

参考:https://github.com/InternLM/Tutorial/tree/camp2/tools/openxlab-deploy
需要先进入仓库,才能标记大文件
在这里插入图片描述
用户名应该写密钥管理的
在这里插入图片描述
否则无法上传
在这里插入图片描述
已经上传
在这里插入图片描述
部署成功
在这里插入图片描述
总体大致步骤:

  1. 我们首先是在 GitHub 上克隆了 XTuner 的源码,并把相关的配套库也通过 pip 的方式进行了安装。
  2. 然后我们根据自己想要做的事情,利用脚本准备好了一份关于调教模型认识自己身份弟位的数据集。
  3. 再然后我们根据自己的显存及任务情况确定了使用 InternLM2-chat-1.8B 这个模型,并且将其复制到我们的文件夹里。
  4. 我们在 XTuner 已有的配置文件中,根据微调方法、数据集和模型挑选出最合适的配置文件并复制到我们新建的文件夹中。
  5. 使用xTuner微调后,将微调结果合并至原模型

多模态agent

Finetune前
即:加载 1.8B 和 Pretrain阶段产物(iter_2181) 到显存。
在这里插入图片描述
Finetune后
即:加载 1.8B 和 Fintune阶段产物 到显存。
在这里插入图片描述


http://www.ppmy.cn/devtools/6646.html

相关文章

SpringCloud之服务远程调用(OpenFeign)

1.OpenFeign OpenFeign是一个声明式的http客户端&#xff0c;作用是基于SpringMVC的常见注解&#xff0c;实现更便捷的http请求发送 2.OpenFeign使用步骤 &#xff08;1&#xff09;导入依赖坐标 <!--OpenFeign--><dependency><groupId>org.springframewo…

使用Python制作读单词视频(含源码)

文章目录 1. 项目简介2. 项目使用2.1 功能介绍2.2 使用Colab生成视频 3. 项目原理介绍 1. 项目简介 项目源码地址&#xff1a;https://github.com/iioSnail/read_video_generation 我们经常在B站或其他视频网站上看到那种逐条读单词的视频&#xff0c;但他们的视频多多少少和…

Leetcode算法训练日记 | day32

专题九 贪心算法 一、最大子数组和 1.题目 Leetcode&#xff1a;第 53 题 给你一个整数数组 nums &#xff0c;请你找出一个具有最大和的连续子数组&#xff08;子数组最少包含一个元素&#xff09;&#xff0c;返回其最大和。子数组是数组中的一个连续部分。 示例 1&…

RabbitMQ项目实战(一)

文章目录 RabbitMQ项目实战选择客户端基础实战 前情提要&#xff1a;我们了解了消息队列&#xff0c;RabbitMQ的入门&#xff0c;交换机&#xff0c;以及核心特性等知识&#xff0c;现在终于来到了激动人心的项目实战环节&#xff01;本小节主要介绍通过Spring Boot RabbitMQ S…

ARM作业day8

温湿度数据采集应用&#xff1a; 由上图可知&#xff1a; 控制温湿度采集模块的引脚是PF14&#xff08;串行时钟线&#xff09;和PF15&#xff08;串行数据线&#xff09;&#xff1a;控制温湿度采集模块的总线是AHB4&#xff0c;通过GPIOF串口和RCC使能完成初始化操作。 控制…

用c++写一个代码解析器需要向哪方面学习?

我以前在中小游戏公司工作的时候&#xff0c;其中一项比较琐碎的工作就是为游戏项目建库建表&#xff0c;主要是为了做数据分析。作为一个职能部门的打杂PHP&#xff0c;对游戏业务并没有什么发言权&#xff0c;但是每次建库建表&#xff0c;却是苦不堪言。 同时部门的基础设施…

C语言学习笔记<1>

1. EOF&#xff08;End of File&#xff09;是文件结束标志&#xff0c;用于表示文件已经读取完毕。在C语言中&#xff0c;可以通过判断是否读取到EOF来判断文件是否读取完毕。 以下是一个简单的C语言代码示例&#xff0c;用于读取一个文本文件并输出其内容&#xff1a; // …

vue3第二十节(新增编译宏defineModel)

为什么会需要使用defineModel() 注意&#xff1a;defineModel() 需要在3.4及以上版本才可使用&#xff1b; 组件之间通讯&#xff0c;通过 props 和 emits 进行通讯,是单向数据流&#xff0c;比如&#xff1a;props是自上而下的&#xff08;父组件数据修改导致子组件更新&…