书生·浦语大模型全链路开源体系-第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微调大模型、多模态的内容完成。

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

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

相关文章

Mac电脑上有什么好玩的格斗游戏 《真人快打1》可以在苹果电脑上玩吗

你是不是喜欢玩格斗游戏?你是不是想在你的Mac电脑上体验一些刺激和激烈的对战?在这篇文章中,我们将介绍Mac电脑上有什么好玩的格斗游戏,以及《真人快打1》可以在苹果电脑上玩吗。 一、Mac电脑上有什么好玩的格斗游戏 格斗游戏是…

命令模式

命令模式:将一个请求封装为一个对象,从而使你可用不同的请求对客户进行参数化;对请求排队或记录请求日志,以及支持可撤销的操作。 命令模式的好处: 1、它能较容易地设计一个命令队列; 2、在需要的情况下&a…

gpt-6有望成为通用工具

OpenAI CEO山姆奥特曼(Sam Altman)在最新的博客访谈中,提到gpt-6有望成为通用工具。 奥特曼还认为,目前的模型不够聪明,“使用GPT-2进行科学研究曾被认为是不切实际的想法。而如今,虽然人们使用GPT-4进行科…

获取公募基金净值【数据分析系列博文】

摘要 从指定网址获取公募基金净值数据,快速解析并存储数据。 (该博文针对自由学习者获取数据;而在投顾、基金、证券等公司,通常有Wind、聚源、通联等厂商采购的数据) 导入所需的库:代码导入了一些常用的库…

OpenCV从入门到精通实战(八)——基于dlib的人脸关键点定位

本文使用Python库dlib和OpenCV来实现面部特征点的检测和标注。 下面是代码的主要步骤和相关的代码片段: 步骤一:导入必要的库和设置参数 首先,代码导入了必要的Python库,并通过argparse设置了输入图像和面部标记预测器的参数。…

ns3.36以后的版本中_ns3命令的原理_CMAKE的使用以及一些例子

本文主要来自于ns3的官方文档:4.3. Working with CMake — Manual,不过只包含以下部分: 4.3. 使用CMake 4.3.1. 配置项目 4.3.1.1. 使用ns3配置项目 4.3.1.2. 使用CMake配置项目 4.3.2. 手动刷新CMake缓存 4.3.3. 建设项目 4.3.3.1. 使用ns3…

生活中的洪特规则

不知道你还记不记得高中物理所学的一个奇特的物理规则:洪特规则。 洪特规则是德国人弗里德里希洪特(F.Hund)根据大量光谱实验数据总结出的一个规律,它指出电子分布到能量简并的原子轨道时,优先以自旋相同的方式分别占…

企业网站制作如何被百度收录

1、网站在百度中的整体评分 说俗点就是网站的权重,在优化过程中我们会见到很多网站出现秒收的情况,发布的文章几分钟就可以收录,这个通过SITE语法都可以去查询,那么这跟自己的网站权重以及内容更新习惯是有非常重要的关联。 我们…

【函数式接口使用✈️✈️】通过具体的例子实现函数结合策略模式的使用

目录 前言 一、核心函数式接口 1. Consumer 2. Supplier 3. Function,> 二、场景模拟 1.面向对象设计 2. 策略接口实现(以 Function 接口作为策略) 三、对比 前言 在 Java 8 中引入了Stream API 新特性,这使得函数式编程风格进…

【IoTDB 线上小课 02】开源增益的大厂研发岗面经

还有友友不知道我们的【IoTDB 视频小课】系列吗? 关于 IoTDB,关于物联网,关于时序数据库,关于开源...给我们 5 分钟,持续学习,干货满满~ 5分钟学会 大厂研发岗面试 之前的第一期小课,我们听了 I…

1.总结串口的发送和接收功能使用到的函数2.总结DMA的作用,和DMA+空闲中断的使用方式3.使用PWM+ADC光敏电阻完成光控灯的实验

1.总结串口的发送和接收功能使用到的函数 串口发送函数:HAL_StatusTypeDef HAL_UART_Transmit(UART_HandleTypeDef *huart, const uint8_t *pData, uint16_t Size, uint32_t Timeout) UART_HandleTypeDef *huart:指定要使用的串口 const uint8_t *pData&…

爬虫入门——Request请求

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

如何确保美国站群服务器的安全性?

选择服务器安全性很重要,那么如何确保美国站群服务器的安全性,rak部落小编为您整理发布如何确保美国站群服务器的安全性。 确保美国站群服务器的安全性,您可以采取以下措施: - **定期更新和升级**:保持服务器操作系统和…

基于Python大数据的微博舆情分析,微博评论情感分析可视化系统

博主介绍:✌程序员徐师兄、7年大厂程序员经历。全网粉丝12w、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 🍅文末获取源码联系🍅 👇🏻 精彩专栏推荐订阅👇…

PCB Editor简单使用

先在OrCAD软件 导出画好的图: 去PCBEditor软件: 画版图框框: 可以手动画也可以代码画,前提是使用line的操作。 命令画 x 0 0 x 1000 0 x 1000 1000 X 0 1000 X 0 0 就可以了 显示格点 修改格点: 导入…

transformer上手(9)—— 翻译任务

运用 Transformers 库来完成翻译任务。翻译是典型的序列到序列 (sequence-to-sequence, Seq2Seq) 任务,即对于每一个输入序列都会输出一个对应的序列。翻译在任务形式上与许多其他任务很接近,例如: 文本摘要 (Summarization):将长…

短视频素材在哪里找?8个视频素材免费网站大全

在当下这个视频内容越发重要的时代,获取多样化且高质量的视频素材对于提升任何视频项目的吸引力至关重要。为了帮助你探索更广阔的创意领域,这里有一系列精选的无水印视频素材网站,它们各具特色,能够为你的创作带来新的视觉体验和…

C++ 并发编程指南(11)原子操作 | 11.5、内存模型

文章目录 一、C 内存模型1、为什么需要内存模型? 前言 C 11标准中最重要的特性之一,是大多数程序员都不会关注的东西。它并不是新的语法特性,也不是新的类库功能,而是新的多线程感知内存模型。本文介绍的内存模型是指多线程编程方…

TLS v1.3 导致JetBrains IDE jdk.internal.net.http.common CPU占用高

开发环境 GoLand版本:2022.3.4 问题原因 JDK 中的 TLS v1.3 实现引起 解决办法 使用 SOCKS 代理代替HTTP代理 禁用 Space 和 Code With Me 插件 禁用 TLS v1.3,参考:https://stackoverflow.com/questions/54485755/java-11-httpclient-…

【R语言】概率密度图

概率密度图是用来表示连续型数据的分布情况的一种图形化方法。它通过在数据的取值范围内绘制一条曲线来描述数据的分布情况,曲线下的面积代表了在该范围内观察到某一数值的概率。具体来说,对于给定的连续型数据,概率密度图会使用核密度估计&a…