书生浦语实训营-InternVL 多模态模型部署微调实践

news2024/9/20 18:54:00

1.什么是InternVL

InternVL 是一种用于多模态任务的深度学习模型,旨在处理和理解多种类型的数据输入,如图像和文本。它结合了视觉和语言模型,能够执行复杂的跨模态任务,比如图文匹配、图像描述生成等。

2.InternVL模型介绍

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

ViT(Vision Transformer)是一种基于Transformer架构的图像分类模型

3.Dynamic High Resolution

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

4.Pixel Shuffle

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

5.InternVL 部署微调实践

**目标:**让InternVL-2B生成文生图提示词

过程:

  1. 准备InternVL模型
cd /root
mkdir -p model

cp 模型

cp -r /root/share/new_models/OpenGVLab/InternVL2-2B /root/model/
  1. 配置虚拟环境
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
  1. 配置完torchvision等依赖后,还需要安装Xtuner
# 创建一个目录,用来存放源代码
mkdir -p /root/InternLM/code

cd /root/InternLM/code

git clone -b v0.1.23  https://github.com/InternLM/XTuner

  1. 安装Xtuner的依赖
cd /root/InternLM/code/XTuner
pip install -e '.[deepspeed]'

  1. 安装LMDeploy,帮助部署项目
pip install lmdeploy==0.5.3
xtuner version
xtuner help

  1. 准备微调数据集
    数据集我们从官网下载下来并进行去重,只保留中文数据等操作。并制作成XTuner需要的形式。并已在share里,我们一起从share里挪出数据集。
## 首先让我们安装一下需要的包【timm(PyTorch Image Models)是一个基于PyTorch的图像模型库,提供了许多流行的图像分类模型的预训练权重,包括ResNet等。Pillow是对图像进行增强】
pip install datasets matplotlib Pillow timm

## 让我们把已经准备好的数据集挪出来
cp -r /root/share/new_models/datasets/CLoT_cn_2000 /root/InternLM/datasets/

  1. 推理图片得到内容
    之后我们使用lmdeploy自带的pipeline工具进行开箱即用的推理流程,首先我们新建一个文件:
touch /root/InternLM/code/test_lmdeploy.py
cd /root/InternLM/code/
from lmdeploy import pipeline
from lmdeploy.vl import load_image

pipe = pipeline('/root/model/InternVL2-2B')

image = load_image('/root/InternLM/007aPnLRgy1hb39z0im50j30ci0el0wm.jpg')
response = pipe(('请你根据这张图片,讲一个脑洞大开的梗', image))
print(response.text)

在这里插入图片描述

  1. 微调InternVL2B
    配置参数:
#######################################################################
#                          PART 1  Settings                           #
#######################################################################
# Model
# 模型地址
path = '/root/model/InternVL2-2B'

# Data
# 数据地址
data_root = '/root/data/'
# data_path = data_root + 'LLaVA-Instruct-150K/llava_v1_5_mix665k.json'
data_path = '/root/data/screenshot_od/layout_ocr_multi.json'
image_folder = data_root + 'screenshot_od/images'
prompt_template = PROMPT_TEMPLATE.internlm2_chat
# 模型最大输出长度
max_length = 8192

# Scheduler & Optimizer
#每张卡上的batch size大小
batch_size = 8  # per_device
# 梯度累积大小
accumulative_counts = 2
# dataloader数量
dataloader_num_workers = 4
# epoch大小
max_epochs = 1
# 优化器类型
optim_type = AdamW
# official 1024 -> 4e-5
lr = 1e-6
betas = (0.9, 0.999)
weight_decay = 0.05
max_norm = 1  # grad clip
warmup_ratio = 0.03

# Save
save_steps = 1000
save_total_limit = 1  # Maximum checkpoints to keep (-1 means unlimited)

开始训练:
batchSize=4,在半卡A100 80G上完成微调

NPROC_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

在这里插入图片描述

  1. 然后进行权重合并
python3 xtuner/configs/internvl/v1_5/convert_to_official.py xtuner/configs/internvl/v2/internvl_v2_internlm2_5_8b_qlora_finetune.py /root/InternLM/work_dir/internvl_ft_run_8_filter/iter_6000.pth /root/InternLM/InternVL2-2B/

6.微调后的效果

from lmdeploy import pipeline
from lmdeploy.vl import load_image

#pipe = pipeline('/root/model/InternVL2-2B')
pipe = pipeline('/root/InternLM/InternVL2-2B')

image = load_image('/root/InternLM/256321723775630_.pic.jpg')
for i in range(20):
    response = pipe(('请你根据这张图片,讲一个脑洞大开的梗', image))
    print(response.text)

[WARNING] gemm_config.in is not found; using default GEMM algo
被穿了外套
被粘住了无法逃脱的猫猫
被子和被子同时醒来
“哥哥,你别闹了!我刚刚只是迷路而已!”
被强行拉去体验打蚊子大赛
被粘住了,别过来!
被猫爪抓伤了
已经不是第一次了,果然还是不行啊!
....

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

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

相关文章

【自由能系列(初级)】生命负熵——熵增原理与生命秩序的对抗

【通俗理解】生命负熵——熵增原理与生命秩序的对抗 关键词提炼 #生命负熵 #熵增原理 #生命秩序 #薛定谔方程 #熵减过程 #热力学第二定律 #信息熵 #生命系统建模 #负熵流 #熵平衡 第一节:生命负熵的类比与核心概念 1.1 生命负熵的类比 生命负熵可以被视为生命系…

如何打造免费体育馆场地预约系统?php vue技术实现,简易操作指南

✍✍计算机编程指导师 ⭐⭐个人介绍:自己非常喜欢研究技术问题!专业做Java、Python、微信小程序、安卓、大数据、爬虫、Golang、大屏等实战项目。 ⛽⛽实战项目:有源码或者技术上的问题欢迎在评论区一起讨论交流! ⚡⚡ Java实战 |…

Unity(2022.3.41LTS) - 脚本

目录 零.简介 一、脚本的基本概念 二、脚本的创建和使用 三、脚本的编程基础 四、与 Unity 引擎的交互 五、重要的类介绍 六、事件函数介绍 七、事件函数的执行顺序 八、脚本的优化和调试 零.简介 在 Unity 中,脚本是实现游戏逻辑和交互的重要组成部分。 …

后台框架-统一数据格式2

在上一篇中,当在Controller类中需要返回统一格式的数据时,需要实例化一个R,有时候觉得还是不够简洁,那有没有一种方法Controller中直接返回对象,但是返回的对象统一保存到如下格式的data中? ResponseBody…

P9343 一曲新词酒一杯

import java.util.Scanner;public class Main {static int fun(Scanner sc) {int n, m;int res -1;int k 0;n sc.nextInt();// n个杯子m sc.nextInt();// m次操作boolean[] a new boolean[n];boolean[] v new boolean[n];for (int i 0; i < m; i) {int o, x;o sc.ne…

科研绘图系列:R语言组合图形绘图

介绍 柱状图、箱线图和棒棒图组合 加载R包 # Library library(ggplot2) library(dplyr) library(forcats)读取数据 data <- data.frame(name=c("north","south","south-east","north-west","south-west","north…

【Pytorch】一文向您详尽解析 with torch.no_grad(): 的高效用法

【Pytorch】一文向您详尽解析 with torch.no_grad(): 的高效用法 下滑即可查看博客内容 &#x1f308; 欢迎莅临我的个人主页 &#x1f448;这里是我静心耕耘深度学习领域、真诚分享知识与智慧的小天地&#xff01;&#x1f387; &#x1f393; 博主简介&#xff1a;985高…

机器学习与人工智能在未来建筑行业的应用:项目案例与分析

作者主页: 知孤云出岫 目录 作者主页:前言1. 项目背景1.1 行业挑战1.2 人工智能与机器学习的引入 2. 项目案例&#xff1a;智能建筑能耗管理系统2.1 项目介绍2.2 技术实现2.2.1 数据采集与预处理2.2.2 能耗预测模型构建2.2.3 控制策略优化 2.3 实施效果 3. 其他应用案例3.1 建…

产品经理角度分析:朋友圈点赞与评论仅共同好友可见

你有没有在刷朋友圈时&#xff0c;看到某位朋友发了条状态&#xff0c;下面一堆点赞和评论&#xff0c;然后他自己来个“统一回复下&#xff0c;感谢大家”&#xff1f; 这种现象就像是在朋友圈里开了个小型新闻发布会&#xff0c;大家在台下疯狂举手&#xff0c;结果发言人最后…

揭秘排行榜系统:如何在高并发场景下实现高效更新!

大家好,我是你们的技术分享伙伴小米!今天我们来聊聊一个非常有趣的话题——如何设计一个排行榜。在这个互联网时代,无论是游戏、学习平台,还是各种社交应用,排行榜都是用户互动和竞争的核心功能之一。而如何设计一个高效、实时更新的排行榜,是一个充满挑战性的问题。今天…

约瑟夫环和一元多项式

约瑟夫环 一、问题描述 假设有 n 个人围成一圈&#xff0c;从第一个人开始报数&#xff0c;报数到 m 的人将被淘汰出圈&#xff0c;然后从下一个人开始继续从 1 报数&#xff0c;如此重复&#xff0c;直到最后只剩下一个人。求最后剩下的这个人的编号。 二、问题分析 可…

最新Vmware17的WIn10虚拟机开箱即用,免安装

这篇文章分享的Vmware安装Win10的教程&#xff0c;如过有些懒得装Win10的同学可以会直接使用我的WIn10镜像压缩包打开即可 Win10镜像压缩包下载 tips&#xff1a;⬆️⬆️包含Vmware17安装包 使用方法&#xff0c;打开Vmware

Native开发与逆向第五篇 - hook log打印

开发demo 新建native项目&#xff0c;实现log打印字符串。 下载地址&#xff1a;https://download.csdn.net/download/u013170888/89698015 #include <android/log.h> #define LOGI(...) __android_log_print(ANDROID_LOG_INFO, "JNI_LOG", __VA_ARGS__)exte…

TQRFSOC开发板47DR ADC输入采集环境搭建(一)

本章内容实现在ubuntu18.04与20.04系统中&#xff0c;搭建RFSOC ADC采样解析应用的环境搭建与测试。 第一步&#xff0c;安装所需要的apt包&#xff0c;需要的软件有&#xff1a;python-tk&#xff0c;virtualenv和python&#xff0c;在ubuntu20.04系统中python需要安装python2…

Nginx: 高可用和与虚拟路由冗余协议VRRP原理

Nginx 服务的高可用 1 &#xff09;服务可用 假定是这样一个最传统的一个CS模式的一个客户服务器模式 这里有用户和一台服务器服务器可能是mysql, 也可能是webserver, 或其他服务器 想实现服务可用的一个三要素 1.1 ) server 需要公网的ip地址以及申请一个域名1.2 ) 需要服务软…

Vue3 进阶教程:一文详解 el-table 组件的二次封装技巧!

开发后台管理系统&#xff0c;在业务上接触的最多就是表单&#xff08;输入&#xff09;和表格&#xff08;输出&#xff09;了。对于使用 Vue 框架进行开发的同学来说&#xff0c;组件库 Element 是肯定会接触的&#xff0c;而其中的 el-table 和 el-form 更是管理系统中的常客…

华为云征文|华为云Flexus X实例docker部署srs6并调优,协议使用webrtc与rtmp

华为云征文&#xff5c;华为云Flexus X实例docker部署srs6并调优&#xff0c;协议使用webrtc与rtmp 什么是华为云Flexus X实例 华为云Flexus X实例云服务是新一代开箱即用、体验跃级、面向中小企业和开发者打造的高品价比云服务产品。Flexus云服务器X实例是新一代面向中小企业…

MES系统如何实现产品追溯功能

MES系统&#xff08;Manufacturing Execution System&#xff0c;制造执行系统&#xff09;的产品追溯功能是现代制造业中不可或缺的一部分&#xff0c;它通过记录和分析生产过程中产生的数据&#xff0c;实现了对产品、原材料、设备等信息的追踪和溯源。以下是对MES系统产品追…

网络安全的历史

如今&#xff0c;网络安全几乎成为各大公司和利益相关者关注的焦点。但在早期&#xff0c;网络安全的概念非常模糊。 直到多年以后&#xff0c;由于网络攻击和危险实体威胁的频繁发生&#xff0c;网络安全的发展才受到重视。这些措施的发展成为了网络安全的演变。 网络安全起…

基于django框架下个人着装助理系统/基于python的服装服装搭配系统

摘要 随着科学技术的发展和人们生活质量的改善&#xff0c;人们对于着装的要求也会越来越高。为了能够更好的管理着装&#xff0c;个人着装助理系统被开发处理方便人们对着装的管理。 本个人着装助理系统采用编程语言Python&#xff0c;开源框架Django实现系统的架构&#xff…