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

写在前面(什么是InternVL)

InternVL 是一种用于多模态任务的深度学习模型,旨在处理和理解多种类型的数据输入,如图像和文本。它结合了视觉和语言模型,能够执行复杂的跨模态任务,比如图文匹配、图像描述生成等。通过整合视觉特征和语言信息,InternVL 可以在多模态领域取得更好的表现

InternVL 模型总览

对于InternVL这个模型来说,它vision模块就是一个微调过的ViT,llm模块是一个InternLM的模型。对于视觉模块来说,它的特殊之处在Dynamic High Resolution。

Dynamic High Resolution

InternVL独特的预处理模块:动态高分辨率,是为了让ViT模型能够尽可能获取到更细节的图像信息,提高视觉特征的表达能力。对于输入的图片,首先resize成448的倍数,然后按照预定义的尺寸比例从图片上crop对应的区域。细节如图所示。

cd /root
mkdir -p model# cp 模型cp -r /root/share/new_models/OpenGVLab/InternVL2-2B /root/model/

Pixel Shuffle

Pixel Shuffle在超分任务中是一个常见的操作,PyTorch中有官方实现,即nn.PixelShuffle(upscale_factor) 该类的作用就是将一个tensor中的元素值进行重排列,假设tensor维度为[B, C, H, W], PixelShuffle操作不仅可以改变tensor的通道数,也会改变特征图的大小。

InternVL 部署微调实践

我们选定的任务是让InternVL-2B生成文生图提示词,这个任务需要VLM对图片有格式化的描述并输出。

让我们来一起完成一个用VLM模型进行冷笑话生成,让你的模型说出很逗的冷笑话吧。在这里,我们微调InterenVL使用xtuner。部署InternVL使用lmdeploy。

准备InternVL模型

我们使用InternVL2-2B模型。该模型已在share文件夹下挂载好,现在让我们把移动出来。

准备环境

这里我们来手动配置下xtuner。

  • 配置虚拟环境
conda create --name xtuner python=3.10 -y# 激活虚拟环境(注意:后续的所有操作都需要在这个虚拟环境中进行)
conda activate xtuner# 安装一些必要的库
conda install pytorch==2.1.2 torchvision==0.16.2 torchaudio==2.1.2 pytorch-cuda=12.1 -c pytorch -c nvidia -y
# 安装其他依赖
apt install libaio-dev
pip install transformers==4.39.3
pip install streamlit==1.36.0
  • 安装xtuner
    # 创建一个目录,用来存放源代码
    mkdir -p /root/InternLM/codecd /root/InternLM/codegit clone -b v0.1.23  https://github.com/InternLM/XTuner

    进入XTuner目录

cd /root/InternLM/code/XTuner
pip install -e '.[deepspeed]'
pip install lmdeploy==0.5.3
  • 安装验证
    xtuner version##命令xtuner help

    如果验证版本时为0.1.21或低于0.1.23版本,使用下面的命令进行更新

pip install --upgrade xtuner

确认一下你的版本号和我们一致哦~

准备微调数据集

我们这里使用huggingface上的zhongshsh/CLoT-Oogiri-GO据集,特别鸣谢~。

@misc{zhong2023clot,title={Let's Think Outside the Box: Exploring Leap-of-Thought in Large Language Models with Creative Humor Generation},author={Zhong, Shanshan and Huang, Zhongzhan and Gao, Shanghua and Wen, Weushao and Lin, Liang and Zitnik, Marinka and Zhou, Pan},journal={arXiv preprint arXiv:2312.02439},year={2023}
}

数据集我们从官网下载下来并进行去重,只保留中文数据等操作。并制作成XTuner需要的形式。并已在share里,我们一起从share里挪出数据集。

## 首先让我们安装一下需要的包
pip install datasets matplotlib Pillow timm## 让我们把数据集挪出来
cp -r /root/share/new_models/datasets/CLoT_cn_2000 /root/InternLM/datasets/

让我们打开数据集的一张图看看,我们选择jsonl里的第一条数据对应的图片。首先我们先把这张图片挪动到InternLM文件夹下面。

cp InternLM/datasets/CLoT_cn_2000/ex_images/007aPnLRgy1hb39z0im50j30ci0el0wm.jpg InternLM/

哈哈,是两只猫在掐架。那我给到的冷笑话回复是什么呢?

InternVL 推理部署攻略

我们用LMDeploy来推理这张图片~看看它能不能成功解释出梗图呢?

使用pipeline进行推理
touch /root/InternLM/code/test_lmdeploy.py
cd /root/InternLM/code/

之后我们使用lmdeploy自带的pipeline工具进行开箱即用的推理流程,首先我们新建一个文件。

然后把以下代码拷贝进test_lmdeploy.py中。

from lmdeploy import pipeline
from lmdeploy.vl import load_imagepipe = pipeline('/root/model/InternVL2-2B')image = load_image('/root/InternLM/007aPnLRgy1hb39z0im50j30ci0el0wm.jpg')
response = pipe(('请你根据这张图片,讲一个脑洞大开的梗', image))
print(response.text)

运行执行推理结果。

python3 test_lmdeploy.py
推理后

推理出来有什么文字是纯随机的,并不一定和展示结果完全一致哦~

推理后我们发现直接使用2b模型不能很好的讲出梗,现在我们要对这个2b模型进行微调。

InternVL 微调攻略

准备数据集

数据集格式为:

# 为了高效训练,请确保数据格式为:
{"id": "000000033471","image": ["coco/train2017/000000033471.jpg"], # 如果是纯文本,则该字段为 None 或者不存在"conversations": [{"from": "human","value": "<image>\nWhat are the colors of the bus in the image?"},{"from": "gpt","value": "The bus in the image is white and red."}]}

这里我们也为大家准备好了可以直接进行微调的数据集。数据集就是咱们刚才复制进InternLM/datasets的数据。

配置微调参数

让我们一起修改XTuner下 InternVL的config,文件在: /root/InternLM/code/XTuner/xtuner/configs/internvl/v2/internvl_v2_internlm2_2b_qlora_finetune.py

  • 需要修改的部分

最基础修改一下模型地址和数据地址即可。

开始训练

这里使用之前搞好的configs进行训练。咱们要调整一下batch size,并且使用qlora。要不半卡不够用的 QAQ。

cd XTunerNPROC_PER_NODE=1 xtuner train /root/InternLM/code/XTuner/xtuner/configs/internvl/v2/internvl_v2_internlm2_2b_qlora_finetune.py  --work-dir /root/InternLM/work_dir/internvl_ft_run_8_filter  --deepspeed deepspeed_zero1

---------------------
合并权重&&模型转换

用官方脚本进行权重合并

如果这里你执行的epoch不是6,是小一些的数字。你可能会发现internvl_ft_run_8_filter下没有iter_3000.pth, 那你需要把iter_3000.pth切换成你internvl_ft_run_8_filter目录下的pth即可。

cd XTuner
# transfer weights
python3 xtuner/configs/internvl/v1_5/convert_to_official.py xtuner/configs/internvl/v2/internvl_v2_internlm2_2b_qlora_finetune.py /root/InternLM/work_dir/internvl_ft_run_8_filter/iter_3000.pth /root/InternLM/InternVL2-2B/

最后我们的模型在:/root/InternLM/convert_model/,文件格式:

.
|-- added_tokens.json
|-- config.json
|-- configuration_intern_vit.py
|-- configuration_internlm2.py
|-- configuration_internvl_chat.py
|-- conversation.py
|-- generation_config.json
|-- model.safetensors
|-- modeling_intern_vit.py
|-- modeling_internlm2.py
|-- modeling_internvl_chat.py
|-- special_tokens_map.json
|-- tokenization_internlm2.py
|-- tokenizer.model
`-- tokenizer_config.json

微调后效果对比

现在我们微调好啦,让我们再来试试这张图片吧!

我们把下面的代码替换进test_lmdeploy.py中,然后跑一下效果。

from lmdeploy import pipeline
from lmdeploy.vl import load_imagepipe = pipeline('/root/InternLM/InternVL2-2B')image = load_image('/root/InternLM/007aPnLRgy1hb39z0im50j30ci0el0wm.jpg')
response = pipe(('请你根据这张图片,讲一个脑洞大开的梗', image))
print(response.text)
cd /root/InternLM/codepython3 test_lmdeploy.py

效果还不错吧~哈哈哈。

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

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

相关文章

macos 10.15 catalina xcode 下载和安装

在macos 10.15 catalina系统中, 由于系统已经不再支持,所以我们无法通过应用商店来安装xcode, 需要手动下载指定版本的 xcode 版本才能安装, catalina 支持的最新xcode版本为 Xcode v12.4 (12D4e) , 其他的新版本是无法安装在Catalina系统中的. Xcode_12.4.xip下载地址 注意,下…

前端开发学习Docker记录02容器操作

docker images先查看有哪些镜像 运行nginx docker run nginx使用docker ps 可以看到有哪些镜像在运行 docker stats查看运行状态 命令总结

linux 云主机下载压缩包安装配置 maven 实录(华为云 EulerOS)

本想通过 yum install maven 直接安装的, 方便省事, 但报错说没找到, 于是只能手动安装了, 把整个过程记录了一下, 包括下载, 解压, 配置及验证的全过程, 并对用到的命令及参数作了详细说明, 需要的同学可以参考. maven 官网找到下载链接 首先要去到 maven 的官网, https://m…

国产网卡品牌崛起,做好网络信息安全的“守门人”

在信息技术日新月异的时代背景下&#xff0c;信息安全不仅关乎个人隐私保护&#xff0c;更是国家安全与经济发展的基石。LR-LINK联瑞凭借其前瞻性的视野和深厚的研发实力&#xff0c;成功自主研发出全国产化的FPGA&#xff08;现场可编程门阵列&#xff09;网闸隔离卡方案&…

AI编码公司Magic获得近5亿美元巨额投资

Magic&#xff0c;一家专注于生成式人工智能AI编码的初创公司&#xff0c;最近在AI领域取得了显著的成就。该公司通过创建模型来生成代码并自动执行软件开发任务&#xff0c;成功吸引了包括前谷歌CEO埃里克施密特在内的一系列知名投资者的关注&#xff0c;并完成了一轮3.2亿美元…

Linux 下查找运行中的 Java 进程及 .jar 文件位置

在 Linux 环境中&#xff0c;有时我们需要查找正在运行的 Java 进程以及它们对应的 .jar 文件位置。本文将介绍如何使用命令行工具来实现这一目标。 前言 在 Linux 系统中&#xff0c;我们经常需要监控正在运行的应用程序&#xff0c;特别是在出现问题时&#xff0c;了解应用程…

Hook 框架 Frida

文章目录 Hook 框架 FridaHook框架介绍下载和安装Frida 的使用手机端启动frida服务端电脑端配置简单使用python的hook方式js的hook方式 Hook 框架 Frida Hook框架介绍 Hook 框架是一种技术&#xff0c;用于在运行时拦截和修改应用程序的行为。 通过 Hook&#xff0c;你可以劫…

鸿蒙界面开发(八):Grid网格布局Badge角标组件

Badge角标组件 在目标组件的外层包裹一层Badge角标组件 支持位置&#xff1a;右上&#xff0c;左&#xff0c;右 也可以使用绝对定位实现更灵活的角标位置。 Badge({count:1,//角标数值&#xff0c;角标数值为0时不展示position:BadgePosition.RightTop,//角标位置&#xff0…

换毛季猫咪化身掉毛怪,宠物浮毛如何清理?推荐用宠物空气净化器

我家现在有三只毛孩子&#xff0c;养宠的幸福是三倍&#xff0c;除毛的烦恼也是三倍。尤其还有两只是银渐层&#xff0c;掉毛量实在是太夸张了&#xff0c;衣服、地板、水杯家里到处都是。我也每天早晚都给它们梳毛&#xff0c;卫生也定期清理&#xff0c;可还是浮毛满天飞。 …

kafka集群

cd /opt/software 把kafka压缩包拉进来 并解压到/usr下 tar -xzvf /opt/software/kafka_2.12-2.7.0.tgz -C /usr/ 改名 mv /usr/kafka_2.12-2.7.0/ /usr/kafka 配置环境变量 vim /etc/profile大写G定位到最后一行 在 o 在下一行添加kefka环境变量export JAVA_HOME/usr…

店招起名“大润發”,侵犯“大润发”商标权赔偿8000元!

近日某干果店招为“大润發水果干果批发”的店铺&#xff0c;因侵犯“大润发”注册商标专用权&#xff0c;赔偿原告所属主体共计人民币8000元&#xff0c;有些人起店招名称喜欢傍大牌&#xff0c;这样很容易侵犯商标权。 有些聪明的人会想&#xff0c;大牌商标是繁体&#xff0c…

ssrf实现

一、SSRF &#xff08;Server-side Request Forge, 服务端请求伪造&#xff09; 1、概念&#xff1a; 它是一种由攻击者构造形成由服务端发起请求的一个安全漏洞。一般情况下&#xff0c;SSRF攻击的目标是从外网无法访问的内部系统。正是因为它是由服务端发起的&#xff0c;所…

【GPT】Coze使用开放平台接口-【4】创建机器人

在前面三篇&#xff0c;我们分别创建了插件&#xff0c;插件里面添加了多个工具。接着&#xff0c;我们把插件添加到工作流内&#xff0c;成为一个开放平台API的调用节点&#xff0c;从而创建出一条业务流。分别是&#xff0c;语音伪造检测工作流&#xff0c;以及通话语音内容分…

【JVM】亿级流量调优(二)

亿级流量调优 指针压缩 -XX:-UseCompressedOops指针压缩技术只有64位机器才有。jdk6以后引入的技术&#xff0c;默认是开启的 关闭指针压缩的情况下 通过HSDB用Memory Viewer查看该对象在内存中的分配地址发现类型指针占8字节&#xff0c;0x3其实是数组的长度&#xff0c;前…

全面解析:动态住宅代理的关键优势

在大数据时代的背景下&#xff0c;代理IP成为了很多企业顺利开展的重要工具。代理IP地址可以分为住宅代理IP地址和数据中心代理IP地址。选择住宅代理IP的好处是可以实现真正的高匿名性&#xff0c;而使用数据中心代理IP可能会暴露自己使用代理的情况。 住宅代理IP是指互联网服务…

代码随想录第十天——LeetCode 150. 逆波兰表达式求值、239. 滑动窗口最大值、347.前 K 个高频元素

150. 逆波兰表达式求值 力扣题目链接(opens new window) 根据 逆波兰表示法&#xff0c;求表达式的值。 有效的运算符包括 , - , * , / 。每个运算对象可以是整数&#xff0c;也可以是另一个逆波兰表达式。 说明&#xff1a; 整数除法只保留整数部分。 给定逆波兰表达式总是…

夜深了,赶紧根据软件系统建模建设一个房屋租赁服务系统,坐上收租大佬宝座,走上人生巅峰

目录 案例 【题目】 【问题 1】(12 分) 【问题 2】(5 分) 【问题 3】(8 分) 【答案】 【问题 1】答案 【问题 2】答案 【问题 3】答案 相关推荐 案例 阅读以下关于软件系统建模的叙述&#xff0c;在答题纸上回答问题 1 至问题 3。 【题目】 某公司欲建设一个房屋租赁服务…

如何在你vs code和ide编译器使用AI

vs code举例。先看效果图 2个步骤轻松拥有 1、注册豆包AI账号&#xff1a;点击注册 2、在vs code中安装&#xff1a; 第一种方法&#xff1a;快速安装 第二种方法&#xff1a;手动安装, 第1步&#xff1a;安装 Visual Studio Code 后&#xff0c;左侧导航栏上点击扩展。 第2步…

【C/C++】C语言中的内存分布

在C语言中&#xff0c;内存分布主要可以分为以下几个区域&#xff1a; 栈&#xff08;Stack&#xff09;&#xff1a;由编译器自动分配和释放&#xff0c;存放函数的参数值、局部变量的值等。 堆&#xff08;Heap&#xff09;&#xff1a;一般由程序员分配和释放&#xff0c;若…

SpringBoot异常处理原理分析

springboot默认机制 错误处理的自动配置都在ErrorMvcAutoConfiguration中&#xff0c;两大核心机制&#xff1a; SpringBoot 会自适应处理错误&#xff0c;响应页面或JSON数据 SpringMVC的错误处理机制依然保留&#xff0c;MVC处理不了&#xff0c;才会交给boot进行处理 发生…