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.微调前输出是红烧肉,错误;微调后输出是宫保鸡丁,正确


                

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

干货分享之Python爬虫与代理

嗨伙伴们,今天是干货分享哦,可千万不要错过。今天小蝌蚪教大家使用phthon时学会巧妙借用代理ip来更好地完成任务。 让我们先了解一下为什么说咱们要用爬虫代理ip呢,那是因为很多网站为了防止有人过度爬取数据,对自身资源造成损害…

鸿蒙学习生态应用开发能力全景图-赋能套件(1)

文章目录 赋能套件鸿蒙生态应用开发能力全景图 赋能套件 鸿蒙生态白皮书: 全面阐释了鸿蒙生态下应用开发核心理念、关键能力以及创新体验,旨在帮助开发者快速、准确、全面的了解鸿蒙开发套件给开发者提供的能力全景和未来的愿景。 视频课程: 基于真实的开发场景,提供向导式…

netcat工具安装和使用

netcat是一个功能强大的网络实用工具,可以从命令⾏跨⽹络读取和写⼊数据。 netcat是为Nmap项⽬编写的,是⽬前分散的Netcat版本系列的经典。 它旨在成为可靠的后端⼯具,可⽴即为其他应⽤程序和⽤户提供⽹络连接。 一,下载安装 1&a…

【PHP】ThinkPHP基础

下载composer ComposerA Dependency Manager for PHPhttps://getcomposer.org/ 安装composer 查看composer是否安装 composer composer --version 安装 ThinkPHP6 如果你是第一次安装的话,首次安装咱们需要打开控制台: 进入后再通过命令,在命令行下面&a…

【HarmonyOS】应用实现读取剪切板内容(安全控件和自读取)

【HarmonyOS】应用实现读取粘贴板内容(安全控件和自读取) 前言 三方应用 读取系统剪切板是比较常见的功能。可以实现功能入口的快捷激活跳转,以及用户粘贴操作的简化,增强用户的体验感。 但是在用户日渐注重隐私的今天,系统对于剪切板权限的…

飞牛云fnOS本地部署WordPress个人网站并一键发布公网远程访问

文章目录 前言1. Docker下载源设置2. Docker下载WordPress3. Docker部署Mysql数据库4. WordPress 参数设置5. 飞牛云安装Cpolar工具6. 固定Cpolar公网地址7. 修改WordPress配置文件8. 公网域名访问WordPress 前言 本文旨在详细介绍如何在飞牛云NAS上利用Docker部署WordPress&a…

解析安卓镜像包和提取DTB文件的操作日志

概述 想查看一下安卓的镜像包里都存了什么内容 步骤 使用RKDevTool_v3.15对RK3528_DC_HK1_RBOX_K8_Multi_WIFI_13_20230915.2153.img解包 路径: 高级(Advancing) > 固件(firmware) > 解包(unpacking)得到\Output\Android\Image boot.imguboot.imgsuper.img 处理boot.…

LeetCode 热题100(八)【二叉树】(3)

目录 8.11二叉树展开为链表(中等) 8.12从前序与中序遍历序列构造二叉树(中等) 8.13路径总和III(中等) 8.14二叉树的最近公共祖先(中等) 8.15二叉树中的最大路径和(困…

FPGA实现PCIE3.0视频采集转SDI输出,基于XDMA+GS2971架构,提供工程源码和技术支持

目录 1、前言工程概述免责声明 2、相关方案推荐我已有的PCIE方案本博已有的 SDI 编解码方案本博客方案的PCIE2.0版本 3、PCIE基础知识扫描4、工程详细设计方案工程设计原理框图电脑端视频QT上位机XDMA配置及使用XDMA中断模块FDMA图像缓存Native视频时序生成RGB转BT1120SDI转HDM…

纽约大学:指导LLM提出澄清性问题

📖标题:Modeling Future Conversation Turns to Teach LLMs to Ask Clarifying Questions 🌐来源:arXiv, 2410.13788 🌟摘要 🔸大型语言模型(LLM)必须经常对高度模糊的用户请求做出…

STM32F1学习——I2C通信

一、I2C通信一带多 在学习通信的时候,我们常会听到串口通信。但串口通信只限定两个设备之间,如果有多个设备,通信的两个设备就要连接上,接线复杂。所以有了总线式通信,在一条总线上可以连接多个设备,这些根…

当你想要conda安装遇到UnavailableInvalidChannel: HTTP 404 NOT FOUND for channel的问题

想要装个虚拟环境,结果遇到404。 看了第一个GitHub帖子中的一句话 UnavailableInvalidChannel: The channel is not accessible or is invalid. Navigator not launching. Issue #9473 conda/conda GitHub 想说那我就把这个not found的channel删掉吧&#xff…

Jmeter中的前置处理器(一)

前置处理器 1--JSR223 PreProcessor 功能特点 自定义数据处理:使用脚本语言处理请求数据,实现高度定制化的数据处理和生成。动态数据生成:在请求发送前生成动态数据,如随机数、时间戳等。变量设置:设置和修改 JMeter…

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

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

使用CNN进行验证码识别:深度学习与图像预处理教程

验证码(CAPTCHA)广泛用于区分人类和自动化程序(如机器人),通常由扭曲的字母、数字或符号组成。为了实现验证码的自动识别,深度学习尤其是卷积神经网络(CNN)非常有效。本文将带你一起…

基于 Python Django 的二手房间可视化系统分析

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

探索 Sentinel 服务容错

Sentinel 是阿里巴巴开源的一款高可用防护组件,主要用于分布式系统中的流量控制、熔断降级和系统负载保护。它在 Java 微服务架构中扮演着重要的角色,帮助开发者确保系统的稳定性和可靠性。 以下是 Sentinel 的一些关键特性: 流量控制(Flow Control):通过对请求进行限流…

DBeaver 连接 OceanBase Oracle 租户

DBeaver 是一款通用的数据库工具软件,支持任何具有JDBC驱动程序的数据库。DBeaver 需要 Java 运行环境的支持。截稿时 DBeaver 24.0.0 版本默认提供的 OceanBase 驱动是连接 MySQL 的,想连接 Oracle 租户需要新建一个驱动器使用。 下载数据库驱动包 1、…

Dubbo 3.x源码(24)—Dubbo服务引用源码(7)接口级服务发现订阅refreshInterfaceInvoker

基于Dubbo 3.1,详细介绍了Dubbo服务的发布与引用的源码。 此前我们学习了Dubbo3.1版本的MigrationRuleHandler这个处理器,它用于通过动态更改规则来控制迁移行为。MigrationRuleListener的onrefer方法是Dubbo2.x 接口级服务发现与Dubbo3.x应用级服务发现…

企业如何提高招聘能力?

企业如何提高招聘能力? 许多企业在进行招聘工作时,常常会遇到各种问题和挑战。尽管付出了大量的时间和精力,但结果却并不总是如人意。例如,企业可能会经历一次又一次的面试,却仍然找不到一个能够适应岗位要求的合适人…