当前位置: 首页 > news >正文

书生·浦语大模型全链路开源体系-第4课

书生·浦语大模型全链路开源体系-第4课

  • 书生·浦语大模型全链路开源体系-第4课
    • 相关资源
    • XTuner 微调 LLM
    • XTuner 微调小助手认知
      • 环境安装
      • 前期准备
      • 启动微调
      • 模型格式转换
      • 模型合并
      • 微调结果验证
    • 将认知助手上传至OpenXLab
    • 将认知助手应用部署到OpenXLab
    • 使用XTuner微调多模态LLM
      • 前期准备
      • 启动微调
      • 结果验证
        • 微调前的模型验证
        • 微调后的模型验证

书生·浦语大模型全链路开源体系-第4课

为了推动大模型在更多行业落地应用,让开发人员更高效地学习大模型的开发与应用,上海人工智能实验室重磅推出书生·浦语大模型实战营,为开发人员提供大模型学习和开发实践的平台。
本文是书生·浦语大模型全链路开源体系-第4课的课程实战。

相关资源

  • InternLM项目地址

https://github.com/InternLM/InternLM

https://github.com/InternLM/XTuner

  • InternLM2技术报告

https://arxiv.org/pdf/2403.17297.pdf

  • 书生·万卷 数据

https://opendatalab.org.cn/

  • 课程链接

https://www.bilibili.com/video/BV15m421j78d/

XTuner 微调 LLM

XTuner 一个大语言模型&多模态模型微调工具箱。 MMRazor MMDeploy 联合开发。

  • 🤓 傻瓜化: 以 配置文件 的形式封装了大部分微调场景,0基础的非专业人员也能一键开始微调
  • 🍃 轻量级: 对于 7B 参数量的LLM,微调所需的最小显存仅为 8GB消费级显卡✅,colab✅

使用 XTuner 进行大模型微调的步骤:

  1. 环境安装:假如我们想要用 XTuner 这款简单易上手的微调工具包来对模型进行微调的话,那我们最最最先开始的第一步必然就是安装XTuner!安装基础的工具是一切的前提,只有安装了 XTuner 在我们本地后我们才能够去思考说具体怎么操作。

  2. 前期准备:那在完成了安装后,我们下一步就需要去明确我们自己的微调目标了。我们想要利用微调做一些什么事情呢,那我为了做到这个事情我有哪些硬件的资源和数据呢?假如我们有对于一件事情相关的数据集,并且我们还有足够的算力资源,那当然微调就是一件水到渠成的事情。就像 OpenAI 不就是如此吗?但是对于普通的开发者而言,在资源有限的情况下,我们可能就需要考虑怎么采集数据,用什么样的手段和方式来让模型有更好的效果。

  3. 启动微调:在确定了自己的微调目标后,我们就可以在 XTuner 的配置库中找到合适的配置文件并进行对应的修改。修改完成后即可一键启动训练!训练好的模型也可以仅仅通过在终端输入一行指令来完成转换和部署工作!

XTuner 微调小助手认知

环境安装

执行以下命令,创建一个新的conda虚拟环境。

/root/share/install_conda_env_internlm_base.sh xtuner0.1.17

image-20240416112612680.png

新的虚拟环境创建完成。

image-20240416113279601.png

执行以下命令,安装 xtuner。

conda activate xtuner0.1.17
mkdir -p /root/xtuner && cd /root/xtuner
git clone -b v0.1.17  https://github.com/InternLM/xtuner
cd xtuner
pip install -e '.[all]'

image-20240416113420902.png

xtuner安装完成。

image-20240416113823003.png

前期准备

执行以下命令,创建微调的工作目录、准备微调用的数据集。

mkdir -p /root/xtuner/xtuner0117/ft-sales && cd /root/xtuner/xtuner0117/ft-sales
ln -s /root/share/new_models/Shanghai_AI_Laboratory/internlm2-chat-1_8b ./internlm2-chat-1_8b
mkdir sales
touch sales/sales.json
vi sales/sales.json

image-20240416114704104.png

执行以下命令,复制微调需要用到的配置文件。

xtuner list-cfg -p internlm2_chat
xtuner copy-cfg internlm2_chat_1_8b_qlora_alpaca_e3 .
mv internlm2_chat_1_8b_qlora_alpaca_e3_copy.py internlm2_chat_1_8b_qlora_sales_e3.py

image-20240416120118805.png

修改配置文件internlm2_chat_1_8b_qlora_sales_e3.py,主要指定模型路径和数据集路径。

image-20240416120299906.png

启动微调

当所有准备工作的完成后,可以执行以下命令开始启动微调。

xtuner train ./internlm2_chat_1_8b_qlora_sales_e3.py

image-20240416124025986.png

模型加载。

image-20240416124233175.png

数据集加载。

image-20240416124345655.png

开始微调,并评估微调结果。

image-20240416124806337.png

微调完成后,会得到work_dirs目录,该目录下的*.pth文件就是微调的结果。

image-20240416131448195.png

模型格式转换

模型转换的本质其实就是将原本使用 Pytorch 训练出来的模型权重文件转换为目前通用的 Huggingface 格式文件,那么我们可以通过以下指令来实现一键转换。

mkdir hf
export MKL_SERVICE_FORCE_INTEL=1
export MKL_THREADING_LAYER=GNU
xtuner convert pth_to_hf ./internlm2_chat_1_8b_qlora_sales_e3.py ./work_dirs/internlm2_chat_1_8b_qlora_sales_e3/iter_684.pth ./hf

image-20240416132010837.png

转换完成后,会得到Huggingface格式的文件,在hf目录下。

image-20240416132117605.png

模型合并

对于 LoRA 或者 QLoRA 微调出来的模型其实并不是一个完整的模型,而是一个额外的层(adapter)。那么训练完的这个层最终还是要与原模型进行组合才能被正常的使用。

而对于全量微调的模型(full)其实是不需要进行整合这一步的,因为全量微调修改的是原模型的权重而非微调一个新的 adapter ,因此是不需要进行模型整合的。

在 XTuner 中也是提供了一键整合的指令。

xtuner convert merge ./internlm2-chat-1_8b ./hf ./merged --max-shard-size 2GB

整合完成后的模型在merged目录下,这是一个具有完整结构的模型目录。

image-20240416132630425.png

微调结果验证

整合完成后,可以对微调结果进行验证。

在 XTuner 中也直接的提供了一套基于 transformers 的对话代码,让我们可以直接在终端与 Huggingface 格式的模型进行对话操作。我们只需要准备我们刚刚转换好的模型路径并选择对应的提示词模版(prompt-template)即可进行对话。假如 prompt-template 选择有误,很有可能导致模型无法正确的进行回复。

在命令行模式下,执行以下命令即可进行结果验证。

xtuner chat ./merged --prompt-template internlm2_chat

image-20240416133014362.png

我们也可以创建streamlit应用,通过Web端进行验证。

image-20240416134652630.png

通过命令启动streamlit应用。

streamlit run sreamlit_demo.py

image-20240416134747544.png

建立SSH隧道,实现端口转发之后,打开浏览器,访问应用。

image-20240416142416878.png

输入对话内容,可以看到微调效果。

image-20240416142510974.png

将认知助手上传至OpenXLab

在OpenXLab,点击创建创建模型,进入创建模型界面。

image-20240416144053975.png

在模型配置界面输入模型的详细信息,点击立即创建,创建一个空的模型仓库。

image-20240416144149394.png

通过模型文件页的下载按钮,可以获取到模型仓库的地址。

image-20240416144343993.png

通过密钥管理菜单,创建一个Git访问令牌,权限设置为可写。

image-20240416145202975.png

通过带密钥的仓库地址,克隆模型仓库到开发机,将本地合并后的merged目录下的所有文件复制到克隆的仓库目录sales-chat-1_8b下,并使用git命令添加所有文件并进行提交。

image-20240416145310424.png

提交以后,OpenXLab中模型仓库的模型文件如下。

image-20240416145355847.png

将认知助手应用部署到OpenXLab

首先,在Github上创建一个项目仓库,将项目文件上传到仓库中,文件包含:

├─OpenXLab-IntelligentSalesAssistant
│  ├─app.py                 # 应用默认启动文件为app.py,应用代码相关的文件包含模型推理、前端配置代码
│  ├─requirements.txt       # 安装运行所需要的 Python 库依赖(pip 安装)
│  ├─packages.txt           # 安装运行所需要的 Debian 依赖项( apt-get 安装)
|  ├─README.md              # 编写应用相关的介绍性的文档
│  └─... 

image-20240416153854044.png

在OpenXLab,点击创建创建应用

image-20240416145850688.png

在弹出的对话框中,选择应用类型是Streamlit。

image-20240416145910731.png

在详情页面,输入应用的详细信息、指定Github仓库地址、选择应用协议和硬件资源等信息,点击立即创建。

image-20240416155707161.png

接下来,等待代码拉取、构建、应用启动。

image-20240416161539947.png

应用启动完成后,即可正常访问使用。

应用地址:https://openxlab.org.cn/apps/detail/AI-Labs/IntelligentSalesAssistant

image-20240416161639747.png

使用XTuner微调多模态LLM

前期准备

激活用于微调的虚拟环境,创建一个新的目录,复制官方提供的多模态微调配置脚本,用于进行多模态微调。

image-20240417100313019.png

准备一幅用于微调的图片。

image-20240417092628750.png

准备对于该图片的微调数据集。

image-20240417095633039.png

对微调配置脚本进行修改,主要修改其中的模型路径、数据集路径、图片路径等信息。

image-20240417100214671.png

启动微调

执行命令启动微调。

xtuner train llava_internlm2_chat_1_8b_qlora_finetune.py

image-20240417100658429.png

加载模型。

image-20240417100742480.png

加载数据集。

image-20240417101531776.png

执行微调并进行评估。

image-20240417102048184.png

微调完成后,在work_dirs目录下会生成一个*.pth文件,这个就是微调的结果文件。

image-20240417102347739.png

结果验证

微调前的模型验证

执行命令,将微调前的*.pth文件转换成HuggingFace格式的文件。

export MKL_SERVICE_FORCE_INTEL=1
export MKL_THREADING_LAYER=GNUxtuner convert pth_to_hf llava_internlm2_chat_1_8b_clip_vit_large_p14_336_e1_gpu8_pretrain /root/share/new_models/xtuner/iter_2181.pth iter_2181_hf

image-20240417110352349.png

转换完成。

image-20240417110753580.png

通过xtuner chat命令可以与微调前的模型进行对话。

xtuner chat /root/share/new_models/Shanghai_AI_Laboratory/internlm2-chat-1_8b --visual-encoder /root/share/new_models/openai/clip-vit-large-patch14-336 --llava iter_2181_hf --prompt-template internlm2_chat --image images/image.jpg

可以看到,微调前的模型只会标注图片。

image-20240417111707801.png

微调后的模型验证

执行命令,将微调后的*.pth文件转换成HuggingFace格式的文件。

export MKL_SERVICE_FORCE_INTEL=1
export MKL_THREADING_LAYER=GNUxtuner convert pth_to_hf llava_internlm2_chat_1_8b_qlora_finetune.py work_dirs/llava_internlm2_chat_1_8b_qlora_finetune/iter_212.pth iter_212_hf

image-20240417112636725.png

转换完成。

image-20240417112814574.png

通过xtuner chat命令可以与微调前的模型进行对话。

xtuner chat /root/share/new_models/Shanghai_AI_Laboratory/internlm2-chat-1_8b --visual-encoder /root/share/new_models/openai/clip-vit-large-patch14-336 --llava iter_2181_hf --prompt-template internlm2_chat --image images/image.jpg

可以看到,,微调后的模型认识了该图片,并且能够描述、回答关于该图片的信息。

image-20240417113330650.png

至此,使用XTuner微调大模型、多模态的内容完成。

相关文章:

书生·浦语大模型全链路开源体系-第4课

书生浦语大模型全链路开源体系-第4课 书生浦语大模型全链路开源体系-第4课相关资源XTuner 微调 LLMXTuner 微调小助手认知环境安装前期准备启动微调模型格式转换模型合并微调结果验证 将认知助手上传至OpenXLab将认知助手应用部署到OpenXLab使用XTuner微调多模态LLM前期准备启动…...

HTML优化SEO

在网站开发中,除了关注设计和用户体验,SEO(搜索引擎优化)也是提升网站流量和可见度的关键。合理的HTML结构和元素运用能够帮助搜索引擎更好地理解页面内容,从而提高搜索排名。以下是一些基于HTML的SEO优化技巧&#xf…...

RabbitMQ-交换机

文章目录 交换机fanoutDirecttopicHeadersRPC 交换机 **交换机 **是消息队列中的一个组件,其作用类似于网络路由器。它负责将我们发送的消息转发到相应的目标,就像快递站将快递发送到对应的站点,或者网络路由器将网络请求转发到相应的服务器…...

mapreduce中的MapTask工作机制(Hadoop)

MapTask工作机制 MapReduce中的Map任务是整个计算过程的第一阶段,其主要工作是将输入数据分片并进行处理,生成中间键值对,为后续的Shuffle和Sort阶段做准备。 1. 输入数据的划分: 输入数据通常存储在分布式文件系统(…...

景区文旅剧本杀小程序亲子公园寻宝闯关系统开发搭建

要开发景区文旅剧本杀小程序亲子公园寻宝闯关系统,您需要考虑以下步骤: 1. 设计游戏场景和规则:根据亲子公园的主题和特点,设计适合亲子游玩的游戏场景和规则。您需要考虑游戏的安全性、趣味性和互动性,确保孩子们能够…...

性能优化---webpack优化

1、如何提高webpack打包速度 a、优化Loader--影响Loader打包速度的首要元素是Babel,Babel 会将代码转为字符串生成 AST,然后对 AST 继续进行转变最后再生成新的代码,项目越大,转换代码越多,效率就越低。先优化 Loader …...

YOLOv9改进策略 | 损失函数篇 | EIoU、SIoU、WIoU、DIoU、FocusIoU等二十余种损失函数

一、本文介绍 这篇文章介绍了YOLOv9的重大改进,特别是在损失函数方面的创新。它不仅包括了多种IoU损失函数的改进和变体,如SIoU、WIoU、GIoU、DIoU、EIOU、CIoU,还融合了“Focus”思想,创造了一系列新的损失函数。这些组合形式的…...

贪心算法-跳跃游戏

给你一个非负整数数组 nums ,你最初位于数组的 第一个下标 。数组中的每个元素代表你在该位置可以跳跃的最大长度。 判断你是否能够到达最后一个下标,如果可以,返回 true ;否则,返回 false 。 示例 1: 输…...

sql知识总结二

一.报错注入 1.什么是报错注入? 这是一种页面响应形式,响应过程如下: 用户在前台页面输入检索内容----->后台将前台输入的检索内容无加区别的拼接成sql语句,送给数据库执行------>数据库将执行的结果返回给后台&#xff…...

VSCode和CMake实现C/C++开发

VSCode和CMake实现Ubuntu下C/C++开发总结 目录 0.简介1.Linux系统介绍2.开发环境搭建2.1 编译器,调试器安装2.2 CMake安装3.GCC编译器3.1 编译过程3.2 g++重要编译参数4.g++编译实战4.0 编译前4.1 直接编译4.2 生成库文件并编译4.3 编译后4.3.1 编译完成后的目录结构4.3.2 运行…...

【机器学习300问】74、如何理解深度学习中L2正则化技术?

深度学习过程中,若模型出现了过拟合问题体现为高方差。有两种解决方法: 增加训练样本的数量采用正则化技术 增加训练样本的数量是一种非常可靠的方法,但有时候你没办法获得足够多的训练数据或者获取数据的成本很高,这时候正则化技…...

C语言程序设计每日一练(4)

完全平方数 首先,我们需要明确什么是完全平方数。完全平方数是指一个整数,它可以表示为另一个整数的平方。例如,1、4、9、16等都是完全平方数,因为它们分别是1、2、3、4的平方。 现在,让我们回到这个问题。我们知道这…...

m4p转换mp3格式怎么转?3个Mac端应用~

M4P文件格式的诞生伴随着苹果公司引入FairPlay版权管理系统,该系统旨在保护音频的内容。M4P因此而生,成为受到FairPlay系统保护的音频格式,常见于苹果设备的iTunes等平台。 MP3文件格式的多个优点 MP3格式的优点显而易见。首先,其…...

全国产化无风扇嵌入式车载电脑在车队管理嵌入式车载行业应用

车队管理嵌入式车载行业应用 车队管理方案能有效解决车辆繁多管理困难问题,配合调度系统让命令更加精确有效执行。实时监控车辆状况、行驶路线和位置,指导驾驶员安全有序行驶,有效降低保险成本、事故概率以及轮胎和零部件的磨损与损坏。 方…...

爬虫入门——Request请求

目录 前言 一、Requests是什么? 二、使用步骤 1.引入库 2.请求 3.响应 三.总结 前言 上一篇爬虫我们已经提及到了urllib库的使用,为了方便大家的使用过程,这里为大家介绍新的库来实现请求获取响应的库。 一、Requests是什么&#xff1…...

创建一个javascript公共方法的npm包,js-tool-big-box,发布到npm上,一劳永逸

前端javascript的公共方法太多了,时间日期的,数值的,字符串的,搞复制的,搞网络请求的,搞数据转换的,几乎就是每个新项目,有的拷一拷,没有的继续写,放个utils目…...

【在线OJ系统】自定义注解实现分布式ID无感自增

实现思路 首先自定义参数注解,然后根据AOP思想,找到该注解作用的切点,也就是mapper层对于mapper层的接口在执行前都会执行该aop操作:获取到对于的方法对象,根据方法对象获取参数列表,根据参数列表判断某个…...

35. UE5 RPG制作火球术技能

接下来,我们将制作技能了,总算迈进了一大步。首先回顾一下之前是如何实现技能触发的,然后再进入正题。 如果想实现我之前的触发方式的,请看此栏目的31-33篇文章,讲解了实现逻辑,这里总结一下: …...

计算机网络 TCP/IP体系 物理层

一. TCP/IP体系 物理层 1.1 物理层的基本概念 物理层作为TCP/IP网络模型的最低层,负责直接与传输介质交互,实现比特流的传输。 要完成物理层的主要任务,需要确定以下特性: 机械特性:物理层的机械特性主要涉及网络…...

微服务相关

1. 微服务主要七个模块 中央管理平台:生产者、消费者注册,服务发现,服务治理,调用关系生产者消费者权限管理流量管理自定义传输协议序列化反序列化 2. 中央管理平台 生产者A在中央管理平台注册后,中央管理平台会给他…...

2.Vue编写一个app

1.src中重要的组成 1.1main.ts // 引入createApp用于创建应用 import { createApp } from "vue"; // 引用App根组件 import App from ./App.vue;createApp(App).mount(#app)1.2 App.vue 其中要写三种标签 <template> <!--html--> </template>…...

Java - Mysql数据类型对应

Mysql数据类型java数据类型备注整型INT/INTEGERint / java.lang.Integer–BIGINTlong/java.lang.Long–––浮点型FLOATfloat/java.lang.FloatDOUBLEdouble/java.lang.Double–DECIMAL/NUMERICjava.math.BigDecimal字符串型CHARjava.lang.String固定长度字符串VARCHARjava.lang…...

高等数学(下)题型笔记(八)空间解析几何与向量代数

目录 0 前言 1 向量的点乘 1.1 基本公式 1.2 例题 2 向量的叉乘 2.1 基础知识 2.2 例题 3 空间平面方程 3.1 基础知识 3.2 例题 4 空间直线方程 4.1 基础知识 4.2 例题 5 旋转曲面及其方程 5.1 基础知识 5.2 例题 6 空间曲面的法线与切平面 6.1 基础知识 6.2…...

论文解读:交大港大上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化学习框架(一)

宇树机器人多姿态起立控制强化学习框架论文解析 论文解读&#xff1a;交大&港大&上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化学习框架&#xff08;一&#xff09; 论文解读&#xff1a;交大&港大&上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化…...

Linux离线(zip方式)安装docker

目录 基础信息操作系统信息docker信息 安装实例安装步骤示例 遇到的问题问题1&#xff1a;修改默认工作路径启动失败问题2 找不到对应组 基础信息 操作系统信息 OS版本&#xff1a;CentOS 7 64位 内核版本&#xff1a;3.10.0 相关命令&#xff1a; uname -rcat /etc/os-rele…...

CVE-2020-17519源码分析与漏洞复现(Flink 任意文件读取)

漏洞概览 漏洞名称&#xff1a;Apache Flink REST API 任意文件读取漏洞CVE编号&#xff1a;CVE-2020-17519CVSS评分&#xff1a;7.5影响版本&#xff1a;Apache Flink 1.11.0、1.11.1、1.11.2修复版本&#xff1a;≥ 1.11.3 或 ≥ 1.12.0漏洞类型&#xff1a;路径遍历&#x…...

Linux nano命令的基本使用

参考资料 GNU nanoを使いこなすnano基础 目录 一. 简介二. 文件打开2.1 普通方式打开文件2.2 只读方式打开文件 三. 文件查看3.1 打开文件时&#xff0c;显示行号3.2 翻页查看 四. 文件编辑4.1 Ctrl K 复制 和 Ctrl U 粘贴4.2 Alt/Esc U 撤回 五. 文件保存与退出5.1 Ctrl …...

Sklearn 机器学习 缺失值处理 获取填充失值的统计值

💖亲爱的技术爱好者们,热烈欢迎来到 Kant2048 的博客!我是 Thomas Kant,很开心能在CSDN上与你们相遇~💖 本博客的精华专栏: 【自动化测试】 【测试经验】 【人工智能】 【Python】 使用 Scikit-learn 处理缺失值并提取填充统计信息的完整指南 在机器学习项目中,数据清…...

uni-app学习笔记三十五--扩展组件的安装和使用

由于内置组件不能满足日常开发需要&#xff0c;uniapp官方也提供了众多的扩展组件供我们使用。由于不是内置组件&#xff0c;需要安装才能使用。 一、安装扩展插件 安装方法&#xff1a; 1.访问uniapp官方文档组件部分&#xff1a;组件使用的入门教程 | uni-app官网 点击左侧…...

ArcGIS Pro+ArcGIS给你的地图加上北回归线!

今天来看ArcGIS Pro和ArcGIS中如何给制作的中国地图或者其他大范围地图加上北回归线。 我们将在ArcGIS Pro和ArcGIS中一同介绍。 1 ArcGIS Pro中设置北回归线 1、在ArcGIS Pro中初步设置好经纬格网等&#xff0c;设置经线、纬线都以10间隔显示。 2、需要插入背会归线&#xf…...