InternVL 多模态模型部署微调实践

目录

0 什么是MLLM

1 开发机创建与使用

2 LMDeploy部署

2.1 环境配置

 2.2 LMDeploy基本用法介绍

2.3 网页应用部署体验

3 XTuner微调实践

3.1 环境配置

 3.2.配置文件参数解读

3.3 开始微调

4.体验模型美食鉴赏能力 


0 什么是MLLM

多模态大语言模型 ( Multimodal Large Language Model) 是指能够处理和融合多种不同类型数据(如文本、图像、音频、视频等) 的大型人工智能模型。这些模型通常基于深度学习技术, 能够理解和生成多种模态的数据, 从而在各种复杂的应用场景中表现出强大的能力。

 常见的MLLM

 多模态研究的重点是不同模态特征空间的对齐

1 开发机创建与使用

创建开发机选择,镜像:Cuda12.2-conda,资源配置:50% A100 * 1

通过SSH密钥连接本地的vscode

2 LMDeploy部署

2.1 环境配置

conda create -n lmdeploy python=3.10 -y
conda activate lmdeploy
pip install lmdeploy gradio==4.44.1 timm==1.0.9

 2.2 LMDeploy基本用法介绍

我们主要通过pipeline.chat 接口来构造多轮对话管线,核心代码为:

## 1.导入相关依赖包
from lmdeploy import pipeline, TurbomindEngineConfig, GenerationConfig
from lmdeploy.vl import load_image## 2.使用你的模型初始化推理管线
model_path = "your_model_path"
pipe = pipeline(model_path,backend_config=TurbomindEngineConfig(session_len=8192))## 3.读取图片(此处使用PIL读取也行)
image = load_image('your_image_path')## 4.配置推理参数
gen_config = GenerationConfig(top_p=0.8, temperature=0.8)
## 5.利用 pipeline.chat 接口 进行对话,需传入生成参数
sess = pipe.chat(('describe this image', image), gen_config=gen_config)
print(sess.response.text)
## 6.之后的对话轮次需要传入之前的session,以告知模型历史上下文
sess = pipe.chat('What is the woman doing?', session=sess, gen_config=gen_config)
print(sess.response.text)

 lmdeploy推理的核心代码如上注释所述。

2.3 网页应用部署体验

我们可以使用UI界面先体验与InternVL对话:

拉取本教程的github仓库https://github.com/Control-derek/InternVL2-Tutorial.git:

git clone https://github.com/Control-derek/InternVL2-Tutorial.git
cd InternVL2-Tutorial

 demo.py文件中,MODEL_PATH处传入InternVL2-2B的路径,如果使用的是InternStudio的开发机则无需修改,否则改为模型路径。

启动demo:

conda activate lmdeploy
python demo.py

上述命令请在vscode下运行,因为vscode自带端口转发,可以把部署在服务器上的网页服务转发到本地。

启动后,CTRL+鼠标左键点进这个链接或者复制链接到浏览器

会看到如下界面:

点击Start Chat即可开始聊天,下方食物快捷栏可以快速输入图片,输入示例可以快速输入文字。输入完毕后,按enter键即可发送。

3 XTuner微调实践

3.1 环境配置

conda create --name xtuner-env python=3.10 -y
conda activate xtuner-env

 安装与deepspeed集成的xtuner和相关包:

pip install -U 'xtuner[deepspeed]' timm==1.0.9
pip install torch==2.4.1 torchvision==0.19.1 torchaudio==2.4.1 --index-url https://download.pytorch.org/whl/cu121
pip install transformers==4.39.0

 在InternStudio开发机的/root/xtuner路径下,即为开机自带的xtuner,先进入工作目录并激活训练环境:

cd root/xtuner
conda activate xtuner-env  # 或者是你自命名的训练环境

原始internvl的微调配置文件在路径./xtuner/configs/internvl/v2下,假设上面克隆的仓库在/root/InternVL2-Tutorial,复制配置文件到目标目录下:

cp /root/InternVL2-Tutorial/xtuner_config/internvl_v2_internlm2_2b_lora_finetune_food.py /root/xtuner/xtuner/configs/internvl/v2/internvl_v2_internlm2_2b_lora_finetune_food.py

 如果没有再拉取

git clone https://github.com/InternLM/xtuner.git

 3.2.配置文件参数解读

在第一部分的设置中,有如下参数:

  • path: 需要微调的模型路径,在InternStudio环境下,无需修改。
  • data_root: 数据集所在路径。
  • data_path: 训练数据文件路径。
  • image_folder: 训练图像根路径。
  • prompt_temple: 配置模型训练时使用的聊天模板、系统提示等。使用与模型对应的即可,此处无需修改。
  • max_length: 训练数据每一条最大token数。
  • batch_size: 训练批次大小,可以根据显存大小调整。
  • accumulative_counts: 梯度累积的步数,用于模拟较大的batch_size,在显存有限的情况下,提高训练稳定性。
  • dataloader_num_workers: 指定数据集加载时子进程的个数。
  • max_epochs:训练轮次。
  • optim_type:优化器类型。
  • lr: 学习率
  • betas: Adam优化器的beta1, beta2
  • weight_decay: 权重衰减,防止训练过拟合用
  • max_norm: 梯度裁剪时的梯度最大值
  • warmup_ratio: 预热比例,前多少的数据训练时,学习率将会逐步增加。
  • save_steps: 多少步存一次checkpoint
  • save_total_limit: 最多保存几个checkpoint,设为-1即无限制

LoRA相关参数:

  • r: 低秩矩阵的秩,决定了低秩矩阵的维度。
  • lora_alpha 缩放因子,用于调整低秩矩阵的权重。
  • lora_dropout dropout 概率,以防止过拟合。

3.3 开始微调

运行命令,开始微调:

xtuner train internvl_v2_internlm2_2b_lora_finetune_food --deepspeed deepspeed_zero2
xtuner train /root/xtuner/xtuner/configs/internvl/v2/internvl_v2_internlm2_2b_lora_finetune_food.py --deepspeed deepspeed_zero2

 看到有日志输出,即为启动成功:

微调后,把模型checkpoint的格式转化为便于测试的格式:

python xtuner/configs/internvl/v1_5/convert_to_official.py xtuner/configs/internvl/v2/internvl_v2_internlm2_2b_lora_finetune_food.py ./work_dirs/internvl_v2_internlm2_2b_lora_finetune_food/iter_640.pth ./work_dirs/internvl_v2_internlm2_2b_lora_finetune_food/lr35_ep10/

如果修改了超参数,iter_xxx.pth需要修改为对应的想要转的checkpoint。 ./work_dirs/internvl_v2_internlm2_2b_lora_finetune_food/lr35_ep10/为转换后的模型checkpoint保存的路径。

4.体验模型美食鉴赏能力 

 修改MODEL_PATH为刚刚转换后保存的模型路径:

就像在第2节中做的那样,启动网页应用:

cd /root/InternVL2-Tutorial
conda activate lmdeploy
python demo.py

 对比展示:

1.微调之前输出是饺子,不正确;微调之后输出是肠粉,正确

2.微调前输出是红烧肉,错误;微调后输出是宫保鸡丁,正确

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

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

相关文章

pgSQL-timescaledb复制表出现的问题

今日在工作中,需要复制一张timescaledb表,pgAdmin上复制一直未成功,或者我找错位置了。 1.我使用Navicate连接pgSQL,连上后选中相应表,右键复制结构即可 2.复制结构后,到pgAdmin中,将对应表下的…

Docker:技术架构的演进之路

前言 技术架构是指在软件开发和系统构建中,为了满足业务需求和技术要求,对系统的整体结构、组件、接口、数据流以及技术选型等方面进行的详细设计和规划。它是软件开发过程中的重要组成部分,为开发团队提供了明确的指导和规范,确…

A029-基于Spring Boot的物流管理系统的设计与实现

🙊作者简介:在校研究生,拥有计算机专业的研究生开发团队,分享技术代码帮助学生学习,独立完成自己的网站项目。 代码可以查看文章末尾⬇️联系方式获取,记得注明来意哦~🌹 赠送计算机毕业设计600…

【flutter】flutter2升级到3.

文章目录 背景flutter2-3升级的修改之处界面效果其它 背景 以这个 https://github.com/aa286211636/Flutter_QQ 为例子, 升级下看看 flutter2-3升级的修改之处 flatButton变为TextButton设备屏幕尺寸获取: Screen.width(context)变为MediaQuery.of(context).size…

自由学习记录(21)

感觉反而 还复杂一点,关系并不纯粹,游戏里用的少...的确 是知道为什么游戏不用了 理解思想就可以了,实际操作也是动态的分析,硬套某种模式也不是怎么很合适 MVC的了解应该是差不多了,重点还是实际中的使用了 所以删了…

力扣-Mysql-3322- 英超积分榜排名 III(中等)

一、题目来源 3322. 英超积分榜排名 III - 力扣(LeetCode) 二、数据表结构 表:SeasonStats --------------------------- | Column Name | Type | --------------------------- | season_id | int | | team_id …

2023年高校大数据挑战赛A题中文文本纠错求解全过程文档及程序

2023年高校大数据挑战赛 A题 中文文本纠错 原题再现: 中文文本纠错的任务主要是针对中文文本中出现的错误进行检测和纠正,属于人工智能自然语言处理的研究子方向。中文文本纠错通常使用的场景有政务公文、裁判文书、新闻出版等,中文文本纠错…

catchadmin-webman 宝塔 部署

1:宝塔的php 中删除禁用函数 putenv 问题: 按照文档部署的时候linux(php) vue (本地) 无法访问后端api/login 的接口 。 解决办法: webman 没有配置nginx 反向代理 配置就能正常访问了

力扣515:在每个树行中找最大值

给定一棵二叉树的根节点 root &#xff0c;请找出该二叉树中每一层的最大值。 示例1&#xff1a; 输入: root [1,3,2,5,3,null,9] 输出: [1,3,9]示例2&#xff1a; 输入: root [1,2,3] 输出: [1,3]提示&#xff1a; 二叉树的节点个数的范围是 [0,104]-231 < Node.val &l…

<项目代码>YOLOv8 番茄识别<目标检测>

YOLOv8是一种单阶段&#xff08;one-stage&#xff09;检测算法&#xff0c;它将目标检测问题转化为一个回归问题&#xff0c;能够在一次前向传播过程中同时完成目标的分类和定位任务。相较于两阶段检测算法&#xff08;如Faster R-CNN&#xff09;&#xff0c;YOLOv8具有更高的…

__VUE_PROD_HYDRATION_MISMATCH_DETAILS__ is not explicitly defined

VUE_PROD_HYDRATION_MISMATCH_DETAILS 未明确定义。您正在运行 Vue 的 esm-bundler 构建&#xff0c;它期望这些编译时功能标志通过捆绑器配置全局注入&#xff0c;以便在生产捆绑包中获得更好的tree-shaking优化。 Vue.js应用程序正在使用ESM&#xff08;ECMAScript模块&#…

《FreeRTOS列表和列表项篇》

FreeRTOS列表和列表项 1. 什么是列表和列表项&#xff1f;1.1 列表list1.2 列表项list item 2. 列表和列表项的初始化2.1 列表的初始化2.2 列表项的初始化 3. 列表项的插入4. 列表项末尾插入5. 列表项的删除6. 列表的遍历 列表和列表项是FreeRTOS的一个数据结构&#xff0c;是F…

MySQL进阶-索引的组合索引

练习题目 题目链接难度SQL进阶-索引的组合索引★★★☆☆ SQL思路 SQL进阶-索引的组合索引 初始化数据 drop table if exists user_profile; CREATE TABLE user_profile ( id int NOT NULL, device_id int NOT NULL, gender varchar(14) NOT NULL, age int , university va…

【iStat Menus for MacBook状态栏菜单系统监控工具--安装教程【简单操作,随时了解电脑情况】

Mac分享吧 文章目录 iStat Menus for MacBook状态栏菜单系统监控软件 效果图展示一、iStat Menus 状态栏菜单系统监控软件 Mac电脑版——v6.73(1240)1️⃣&#xff1a;下载软件2️⃣&#xff1a;安装软件3️⃣&#xff1a;软件自定义配置 安装完成&#xff01;&#xff01;&am…

netmap.js:基于浏览器的网络发现工具

netmap.js是一款基于浏览器&#xff0c;用于提供主机发现和端口扫描功能的网络发现工具。 netmap.js的执行速度也非常的快&#xff0c;由于其使用了es6-promise-pool&#xff0c;因此它可以有效地运行浏览器允许的最大并发连接数。 动机 由于我正需要一个基于浏览器的端口扫…

计算机网络 (2)计算机网络的类别

计算机网络的类别繁多&#xff0c;根据不同的分类原则&#xff0c;可以得到各种不同类型的计算机网络。 一、按覆盖范围分类 局域网&#xff08;LAN&#xff09;&#xff1a; 定义&#xff1a;局域网是一种在小区域内使用的&#xff0c;由多台计算机组成的网络。覆盖范围&#…

modbus协议 Mthings模拟器使用

进制转换 HEX 16进制 (0、1、2、3、4、5、6、7、8、9、A、B、C、D、E、F表示0-15) dec 10进制 n(16进制) -> 10 abcd.efg(n) d*n^0 c*n^1 b*n^2 a*n^3 e*n^-1 f*n^-2 g*n^-3&#xff08;10&#xff09; 10 -> n(16进制) Modbus基础概念 高位为NUM_H&…

飞腾平台Arm NN软件栈安装使用指南

【写在前面】 飞腾开发者平台是基于飞腾自身强大的技术基础和开放能力&#xff0c;聚合行业内优秀资源而打造的。该平台覆盖了操作系统、算法、数据库、安全、平台工具、虚拟化、存储、网络、固件等多个前沿技术领域&#xff0c;包含了应用使能套件、软件仓库、软件支持、软件适…

基于JavaSpringboot个人博客

一、作品包含 源码数据库设计文档万字全套环境和工具资源部署教程 二、项目技术 前端技术&#xff1a;Html、Css、Js、Vue、Element-ui 数据库&#xff1a;MySQL 后端技术&#xff1a;Java、Spring Boot、MyBatis 三、运行环境 开发工具&#xff1a;IDEA 数据库&#xf…

鸿蒙next ui安全区域适配(刘海屏、摄像头挖空等)

目录 相关api 团结引擎对于鸿蒙的适配已经做了安全区域的适配,也考虑到了刘海屏和摄像机挖孔的情况,在团结引擎内可以直接使用Screen.safeArea 相关api