书生·浦语大模型全链路开源体系-第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 进行大模型微调的步骤:
-
环境安装:假如我们想要用 XTuner 这款简单易上手的微调工具包来对模型进行微调的话,那我们最最最先开始的第一步必然就是安装XTuner!安装基础的工具是一切的前提,只有安装了 XTuner 在我们本地后我们才能够去思考说具体怎么操作。
-
前期准备:那在完成了安装后,我们下一步就需要去明确我们自己的微调目标了。我们想要利用微调做一些什么事情呢,那我为了做到这个事情我有哪些硬件的资源和数据呢?假如我们有对于一件事情相关的数据集,并且我们还有足够的算力资源,那当然微调就是一件水到渠成的事情。就像 OpenAI 不就是如此吗?但是对于普通的开发者而言,在资源有限的情况下,我们可能就需要考虑怎么采集数据,用什么样的手段和方式来让模型有更好的效果。
-
启动微调:在确定了自己的微调目标后,我们就可以在 XTuner 的配置库中找到合适的配置文件并进行对应的修改。修改完成后即可一键启动训练!训练好的模型也可以仅仅通过在终端输入一行指令来完成转换和部署工作!
XTuner 微调小助手认知
环境安装
执行以下命令,创建一个新的conda虚拟环境。
/root/share/install_conda_env_internlm_base.sh xtuner0.1.17
新的虚拟环境创建完成。
执行以下命令,安装 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]'
xtuner安装完成。
前期准备
执行以下命令,创建微调的工作目录、准备微调用的数据集。
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
执行以下命令,复制微调需要用到的配置文件。
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
修改配置文件internlm2_chat_1_8b_qlora_sales_e3.py
,主要指定模型路径和数据集路径。
启动微调
当所有准备工作的完成后,可以执行以下命令开始启动微调。
xtuner train ./internlm2_chat_1_8b_qlora_sales_e3.py
模型加载。
数据集加载。
开始微调,并评估微调结果。
微调完成后,会得到work_dirs
目录,该目录下的*.pth
文件就是微调的结果。
模型格式转换
模型转换的本质其实就是将原本使用 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
转换完成后,会得到Huggingface格式的文件,在hf
目录下。
模型合并
对于 LoRA 或者 QLoRA 微调出来的模型其实并不是一个完整的模型,而是一个额外的层(adapter)。那么训练完的这个层最终还是要与原模型进行组合才能被正常的使用。
而对于全量微调的模型(full)其实是不需要进行整合这一步的,因为全量微调修改的是原模型的权重而非微调一个新的 adapter ,因此是不需要进行模型整合的。
在 XTuner 中也是提供了一键整合的指令。
xtuner convert merge ./internlm2-chat-1_8b ./hf ./merged --max-shard-size 2GB
整合完成后的模型在merged
目录下,这是一个具有完整结构的模型目录。
微调结果验证
整合完成后,可以对微调结果进行验证。
在 XTuner 中也直接的提供了一套基于 transformers 的对话代码,让我们可以直接在终端与 Huggingface 格式的模型进行对话操作。我们只需要准备我们刚刚转换好的模型路径并选择对应的提示词模版(prompt-template)即可进行对话。假如 prompt-template 选择有误,很有可能导致模型无法正确的进行回复。
在命令行模式下,执行以下命令即可进行结果验证。
xtuner chat ./merged --prompt-template internlm2_chat
我们也可以创建streamlit应用,通过Web端进行验证。
通过命令启动streamlit应用。
streamlit run sreamlit_demo.py
建立SSH隧道,实现端口转发之后,打开浏览器,访问应用。
输入对话内容,可以看到微调效果。
将认知助手上传至OpenXLab
在OpenXLab,点击创建
,创建模型
,进入创建模型界面。
在模型配置界面输入模型的详细信息,点击立即创建,创建一个空的模型仓库。
通过模型文件页的下载按钮,可以获取到模型仓库的地址。
通过密钥管理菜单,创建一个Git访问令牌,权限设置为可写。
通过带密钥的仓库地址,克隆模型仓库到开发机,将本地合并后的merged
目录下的所有文件复制到克隆的仓库目录sales-chat-1_8b
下,并使用git命令添加所有文件并进行提交。
提交以后,OpenXLab中模型仓库的模型文件如下。
将认知助手应用部署到OpenXLab
首先,在Github上创建一个项目仓库,将项目文件上传到仓库中,文件包含:
├─OpenXLab-IntelligentSalesAssistant
│ ├─app.py # 应用默认启动文件为app.py,应用代码相关的文件包含模型推理、前端配置代码
│ ├─requirements.txt # 安装运行所需要的 Python 库依赖(pip 安装)
│ ├─packages.txt # 安装运行所需要的 Debian 依赖项( apt-get 安装)
| ├─README.md # 编写应用相关的介绍性的文档
│ └─...
在OpenXLab,点击创建
,创建应用
。
在弹出的对话框中,选择应用类型是Streamlit。
在详情页面,输入应用的详细信息、指定Github仓库地址、选择应用协议和硬件资源等信息,点击立即创建。
接下来,等待代码拉取、构建、应用启动。
应用启动完成后,即可正常访问使用。
应用地址:https://openxlab.org.cn/apps/detail/AI-Labs/IntelligentSalesAssistant
使用XTuner微调多模态LLM
前期准备
激活用于微调的虚拟环境,创建一个新的目录,复制官方提供的多模态微调配置脚本,用于进行多模态微调。
准备一幅用于微调的图片。
准备对于该图片的微调数据集。
对微调配置脚本进行修改,主要修改其中的模型路径、数据集路径、图片路径等信息。
启动微调
执行命令启动微调。
xtuner train llava_internlm2_chat_1_8b_qlora_finetune.py
加载模型。
加载数据集。
执行微调并进行评估。
微调完成后,在work_dirs
目录下会生成一个*.pth
文件,这个就是微调的结果文件。
结果验证
微调前的模型验证
执行命令,将微调前的*.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
转换完成。
通过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
可以看到,微调前的模型只会标注图片。
微调后的模型验证
执行命令,将微调后的*.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
转换完成。
通过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
可以看到,,微调后的模型认识了该图片,并且能够描述、回答关于该图片的信息。
至此,使用XTuner微调大模型、多模态的内容完成。
相关文章:

书生·浦语大模型全链路开源体系-第4课
书生浦语大模型全链路开源体系-第4课 书生浦语大模型全链路开源体系-第4课相关资源XTuner 微调 LLMXTuner 微调小助手认知环境安装前期准备启动微调模型格式转换模型合并微调结果验证 将认知助手上传至OpenXLab将认知助手应用部署到OpenXLab使用XTuner微调多模态LLM前期准备启动…...
HTML优化SEO
在网站开发中,除了关注设计和用户体验,SEO(搜索引擎优化)也是提升网站流量和可见度的关键。合理的HTML结构和元素运用能够帮助搜索引擎更好地理解页面内容,从而提高搜索排名。以下是一些基于HTML的SEO优化技巧…...

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语句,送给数据库执行------>数据库将执行的结果返回给后台ÿ…...
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是什么࿱…...

创建一个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在中央管理平台注册后,中央管理平台会给他…...

测试微信模版消息推送
进入“开发接口管理”--“公众平台测试账号”,无需申请公众账号、可在测试账号中体验并测试微信公众平台所有高级接口。 获取access_token: 自定义模版消息: 关注测试号:扫二维码关注测试号。 发送模版消息: import requests da…...

K8S认证|CKS题库+答案| 11. AppArmor
目录 11. AppArmor 免费获取并激活 CKA_v1.31_模拟系统 题目 开始操作: 1)、切换集群 2)、切换节点 3)、切换到 apparmor 的目录 4)、执行 apparmor 策略模块 5)、修改 pod 文件 6)、…...
spring:实例工厂方法获取bean
spring处理使用静态工厂方法获取bean实例,也可以通过实例工厂方法获取bean实例。 实例工厂方法步骤如下: 定义实例工厂类(Java代码),定义实例工厂(xml),定义调用实例工厂ÿ…...
06 Deep learning神经网络编程基础 激活函数 --吴恩达
深度学习激活函数详解 一、核心作用 引入非线性:使神经网络可学习复杂模式控制输出范围:如Sigmoid将输出限制在(0,1)梯度传递:影响反向传播的稳定性二、常见类型及数学表达 Sigmoid σ ( x ) = 1 1 +...
Hive 存储格式深度解析:从 TextFile 到 ORC,如何选对数据存储方案?
在大数据处理领域,Hive 作为 Hadoop 生态中重要的数据仓库工具,其存储格式的选择直接影响数据存储成本、查询效率和计算资源消耗。面对 TextFile、SequenceFile、Parquet、RCFile、ORC 等多种存储格式,很多开发者常常陷入选择困境。本文将从底…...

七、数据库的完整性
七、数据库的完整性 主要内容 7.1 数据库的完整性概述 7.2 实体完整性 7.3 参照完整性 7.4 用户定义的完整性 7.5 触发器 7.6 SQL Server中数据库完整性的实现 7.7 小结 7.1 数据库的完整性概述 数据库完整性的含义 正确性 指数据的合法性 有效性 指数据是否属于所定…...

[大语言模型]在个人电脑上部署ollama 并进行管理,最后配置AI程序开发助手.
ollama官网: 下载 https://ollama.com/ 安装 查看可以使用的模型 https://ollama.com/search 例如 https://ollama.com/library/deepseek-r1/tags # deepseek-r1:7bollama pull deepseek-r1:7b改token数量为409622 16384 ollama命令说明 ollama serve #:…...
MySQL 部分重点知识篇
一、数据库对象 1. 主键 定义 :主键是用于唯一标识表中每一行记录的字段或字段组合。它具有唯一性和非空性特点。 作用 :确保数据的完整性,便于数据的查询和管理。 示例 :在学生信息表中,学号可以作为主键ÿ…...

算术操作符与类型转换:从基础到精通
目录 前言:从基础到实践——探索运算符与类型转换的奥秘 算术操作符超级详解 算术操作符:、-、*、/、% 赋值操作符:和复合赋值 单⽬操作符:、--、、- 前言:从基础到实践——探索运算符与类型转换的奥秘 在先前的文…...
【HarmonyOS 5】鸿蒙中Stage模型与FA模型详解
一、前言 在HarmonyOS 5的应用开发模型中,featureAbility是旧版FA模型(Feature Ability)的用法,Stage模型已采用全新的应用架构,推荐使用组件化的上下文获取方式,而非依赖featureAbility。 FA大概是API7之…...