VisualGLM-6B——原理与部署

VisualGLM-6B技术原理介绍

VisualGLM-6B 是一种多模态预训练模型,它旨在将视觉和语言模型进行结合,使得语言模型能够理解图像信息并与文本对话无缝结合。为了更好地理解 VisualGLM-6B 的内容,我们可以从以下几个方面来解析它的原理、结构、训练和微调等内容。

一、多模态预训练背景

多模态预训练模型的目标是将图像和文本信息结合使得模型可以处理同时包含这两种信息的任务,比如描述图像、问答或生成相关内容。常见的多模态预训练思路有以下两种:

多模态预训练思路一(CogView 思路)

  • 核心思想:将图像看作一种特殊的语言,把它们编码成序列进行处理。具体方法是将图像分成若干小块(像素块),每个块转化为一个token(符号),然后使用像 GPT 这样的语言模型进行训练和生成。

  • 优点:模型能够直接利用已有的语言模型架构,处理图像生成和描述等任务。

  • 缺点:由于图像本身的复杂性,将图像分成token的过程中会有信息丢失。此外,为了描述一张高分辨率图像,需要大量的token,这会导致训练和推理的效率低下。

多模态预训练思路二(VisualGLM 思路)

  • 核心思想:将图像特征对齐到预训练语言模型,使得模型能够理解和利用图像语义信息。这种方法通过特定的视觉编码器(如 ViT)提取图像的高级特征,然后将这些特征对齐到语言模型的输入。

  • 优点:充分利用了语言模型的强大能力,并且能够无缝地与多轮对话等语言任务结合。相比直接将图像看作语言的方式,这种方法更高效。

  • 缺点:在提取图像特征的过程中,会损失部分底层信息,导致图像细节的理解不够充分。

二、ChatGLM-6B 简介

ChatGLM-6B 是一个开源的中英双语语言模型,具有62亿参数。它在多轮对话、问答生成等任务中表现出色。VisualGLM-6B 基于 ChatGLM-6B 进行了扩展,使其能够处理图像和文本的多模态任务。

三、VisualGLM-6B 的结构与训练

模型架构

VisualGLM-6B 的架构主要包括以下三个部分:

  • ViT(Vision Transformer):用于提取图像的视觉特征。

  • Q-Former:作为中间模块,将 ViT 提取的视觉特征转化为语言模型可以理解的表示。

  • ChatGLM-6B:语言模型部分,用于生成文本或回答问题。

在训练过程中,ViT 和 ChatGLM-6B 的参数几乎是冻结的,主要对 Q-Former 进行微调。这样做是为了防止“灾难性遗忘”,即模型在新任务上的微调会导致原有能力的丧失。

训练目标

训练 VisualGLM-6B 时,使用以下两种损失函数:

  • 自回归损失:让模型根据图像生成与之对应的正确文本。

  • 对比损失:确保输入 ChatGLM-6B 的视觉特征与对应文本的语义特征对齐,从而提高模型的理解能力。

训练数据

VisualGLM-6B 使用了多种数据集进行训练,包括:

  • CogView 积累的 3000 万中文图文对

  • 精选的 LAION 和 CC12M 的 1 亿英文图文对

  • 其他公开数据集的视觉问答指令数据。

  • 自己构建的高质量视觉问答指令微调数据。

四、微调与使用

VisualGLM-6B 提供了多种微调方式,能够在不同资源和数据条件下进行优化。常见的微调方法包括:

LORA(Low-Rank Adaptation)

  • 在 ChatGLM-6B 的部分层中加入低秩矩阵,使模型在低资源情况下进行微调。

  • 优点是微调效率高,显存占用小。

  • 适用于通用任务的微调。

QLORA(Quantized LORA)

  • 对模型的线性层进行量化(如 4-bit),进一步降低显存占用。

  • 适用于显存资源有限的场景。

P-Tuning

  • 通过在模型中加入可学习的前缀(Prompt),将其与模型的输入结合进行训练。

  • 适用于特定场景的微调,但不适合通用任务。

五、安装与使用

VisualGLM-6B 使用了 SwissArmyTransformer(SAT)库,该库能够简化 Transformer 模型的开发和训练。使用时可以按以下步骤操作:

import argparse
from transformers import AutoTokenizer
tokenizer = AutoTokenizer.from_pretrained("THUDM/chatglm-6b", trust_remote_code=True)
from model import chat, VisualGLMModel# 加载模型
model, model_args = VisualGLMModel.from_pretrained('visualglm-6b',
args=argparse.Namespace(fp16=True, skip_init=True))# 添加自动回归模块
from sat.model.mixins import CachedAutoregressiveMixin
model.add_mixin('auto-regressive', CachedAutoregressiveMixin())# 加载图像并进行推理
image_path = "your image path or URL"
response, history, cache_image = chat(image_path, model, tokenizer,
"描述这张图片。"
,
history=[])
print(response)

六、未来展望

VisualGLM-6B 在未来可以有以下几个改进方向:

  • 中文OCR能力:进一步提升对中文文本的识别和理解。

  • 表格理解能力:在表格数据的理解和问答上进行扩展。

  • 高分辨率图像处理:提升对高分辨率图像的描述能力。

  • 更准确的描述和遵循指令:进一步提升模型在多轮对话和复杂场景下的表现。

VisualGLM-6B 通过将 ViT、Q-Former 和 ChatGLM-6B 结合,实现了对图像和语言的双重理解能力。在架构上采用了模块化设计,使得模型能够在有限的资源下进行有效训练和推理。未来,它在中文OCR、表格理解、高分辨率图像描述等方面还有很大的提升空间。

VisualGLM-6B部署

项目地址:GitHub - THUDM/VisualGLM-6B: Chinese and English multimodal conversational language model | 多模态中英双语对话语言模型

一、配置虚拟环境

首先配好配好conda还有虚拟环境:

wget [https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh](https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh)bash Miniconda3-latest-Linux-x86_64.shsudo su - rootconda update condaconda listconda create -n visualglm python==3.10.6conda activate visualglmconda install pytorch torchvision torchaudio pytorch-cuda=11.8 -c pytorch -c nvidiagit clone --recursive https://github.com/THUDM/VisualGLM-6B; cd VisualGLM-6Bpip install wandb
pip install bitsandbytes
sudo apt-get install git-lfs
git lfs install

然后下载VisualGLM-6B运行所需的各种文件,并安装相关依赖:

git clone https://github.com/THUDM/VisualGLM-6B.gitpip install requirements.txt# 或者采用阿里的镜像源,会快一点
pip install -i https://mirrors.aliyun.com/pypi/simple/ -r requirements.txt

接下来,关于模型文件的下载,可以从THUDM/visualglm-6b at main (huggingface.co)下载所有文件,因为hugging face是国外的网站,所以直接在云服务器上拉取基本上都会显示网络连接超时,开了学术加速成功可能性大一些。如果不行的话就只能一个一个文件的下载到本地,然后再一点点上传到云服务器了,大概会花三四个小时的时间。

当然,还有另一种解决办法,不用下载到本地再上传,可以选择从魔塔直接拉取:

git clone https://www.modelscope.cn/ZhipuAI/visualglm-6b.git

二、推理

下载完模型文件之后,就可以开始尝试推理模型

推理模型主要分为三种方式:测试、多轮对话测试(demo)、网页版测试。

由于是部署在云服务上,我的网页版测试虽然成功,但是无法打开本地8080网址,就不作展示,主要讲讲前两种方式。

运行 python test.py的含义是直接测试读片能力,运行python cli_demo.py是测试命令行demo,应该就是多轮对话。

1、测试test

注意,使用的Huggingface模型,所有都执行带-hf的文件

还需要注意,修改transformers的版本如下,否则不兼容:

pip install transformers==4.33.2 -i https://mirrors.aliyun.com/pypi/simple/

接下来自己创建一个新的python文件,注意,文件中的相关模型文件路径都需要修改成你自己的路径,建议使用绝对路径:

from transformers import AutoTokenizer, AutoModel
tokenizer = AutoTokenizer.from_pretrained("/root/autodl-tmp/THUDM/models/XrayGLM-300", trust_remote_code=True)
model = AutoModel.from_pretrained("/root/autodl-tmp/THUDM/models/XrayGLM-300", trust_remote_code=True).half().cuda()
image_path = "/root/autodl-tmp/VisualGLM-6B/examples/4.jpeg"
response, history = model.chat(tokenizer, image_path, "描述这张图片。", history=[])
print(response)
response, history = model.chat(tokenizer, image_path, "这张图片可能是在什么场所拍摄的?", history=history)
print(response)

还有VisualGLM-6B的各种文件,凡涉及到模型文件的都建议做出路径修改,改成你自己文件的绝对路径。当发生报错“找不到……文件”/“无法从hugging face网页拉取……文件”,而你的模型文件里面又确实已经包含了该文件时,一般都是文件路径出错。

另外,图片路径官方其实给出了部分图片在如下目录,可以直接用:

运行test.py文件:python test.py

2、多轮对话命令行demo

注意,如果运行cli_demo.py文件,发现出现了如下报错:

AttributeError: 'ChatGLMTokenizer' object has no attribute'sp_tokenizer'. Did you mean: '_tokenize'?return self.sp_tokenizer.num_tokens

解决方法:修改 tokenization_chatglm.py文件中的ChatGLMTokenizer类,将该类中关于 __init__ 方法的定义中的 super.__init__ 放到 __init__ 方法的最后。

之前提到过,当你下载上传的模型是hugging face的时候,运行cli demo_hf.py,而不是cli_demo.py。同时注意更改模型文件路径:

多轮对话demo命令行成功!

clear表示重新开启一个新对话,而stop表示停止对话:

注意问答的时候输入要小心,否则会报错:

最后,其实官方已经在某站发过了该模型的相关讲解视频,主要是关于该模型的技术背景介绍以及模型的部署和微调的大致流程,可参考:【官方教程】VisualGLM技术讲解_哔哩哔哩_bilibili

同时,官方的报告文件下载: https://pan.baidu.com/s/1gfdpyfT6EVnygMPDO_iwvQ?pwd=8wpc

提取码: 8wpc

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

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

相关文章

Mac小白必看,快速帮助新手入门的五款软件

刚转MacOS的小白是不是还不知道如何选择软件,MacOS与win有着很大的区别,对于新手来说,想要快速上手Mac的使用,少不了一款好的软件工具,今天给大家推荐五款适合刚转Mac的小白使用的好用工具。 1. iShot:截图…

IPD变革中,数据治理是关键

IPD变革中,数据治理是关键 2024-09-29 14:41汉捷咨询 华为轮值董事长徐直军先生在回顾IPD变革时,提到:“华为IPD变革前期,对数据的关注不够,没有系统梳理产品的信息架构和数据标准,也没有对业务流中的数据…

国内旅游:现状与未来趋势分析

在当今社会快速发展的背景下,国内旅游更是呈现出蓬勃的发展态势。中国,这片拥有悠久历史、灿烂文化和壮丽山河的广袤土地,为国内旅游的兴起与发展提供了得天独厚的条件。 本报告将借助 DataEase 强大的数据可视化分析能力,深入剖…

数据库入门不再难:克服学习障碍的实用技巧与演示

文章目录 摘要引言常见的学习困难及解决方法理解抽象的数据库概念SQL语句的构建与优化理解事务与并发控制 实用的学习技巧与工具推荐推荐学习资源数据库设计与实践的常用技巧 实战演练常见问题解答总结未来展望参考资料 摘要 数据库学习对于初学者来说,往往会面临诸…

优思学院|六西格玛黑带是什么?取得六西格玛黑带证书有何作用?

1. 六西格玛黑带是什么? 六西格玛黑带(Black Belt)是六西格玛项目中的高级专业人员,负责领导跨职能团队,使用统计分析工具和方法,深入分析业务流程中的问题并制定改进方案。黑带要具备扎实的六西格玛知识&…

HTTP协议代码实现

目录 一. 服务端模块实现 二. HTTP协议模块实现 2.1 HTTP请求部分: 2.2 HTTP响应部分: 2.3 工厂类部分: 2.4 HTTP服务端部分: 2.5 回头处理业务处理函数: 三. 调用服务端模块实现 四. 具体效…

【含文档】基于Springboot+Vue的高校奖助学金系统(含源码+数据库+lw)

1.开发环境 开发系统:Windows10/11 架构模式:MVC/前后端分离 JDK版本: Java JDK1.8 开发工具:IDEA 数据库版本: mysql5.7或8.0 数据库可视化工具: navicat 服务器: SpringBoot自带 apache tomcat 主要技术: Java,Springboot,mybatis,mysql,vue 2.视频演示地址 3.功能 系统定…

柯桥学英语商务口语中老外最爱说的“what‘s up“是什么意思?回答错超尴尬!

“Whats up?” 在看美剧或者和老外聊天的时候 我们总能听到这句话 那你知道这句老外很爱说的 “whats up”是什么意思吗? 快和小编一起来学习吧~ 01 whats up 怎么理解? 很多人觉得Whats up就是更地道的“How are you”,嗯………

【vue3】防抖与节流

1.防抖 (多次触发 只执行最后一次) 作用: 高频率触发的事件,在指定的单位时间内,只响应最后一次,如果在指定的时间内再次触发,则重新计算时间防抖类似于英雄联盟回城6秒,如果回城中被打断&…

怎么查看员工电脑安装了什么软件

1、使用专业监控软件:安装如金刚钻信息网站行为审计系统、WorkWin等专业的电脑监控软件。这些软件能够实时监控员工的电脑操作,包括安装的软件、运行的程序等。通过软件的管理端,您可以轻松查看员工电脑上安装的所有软件,并可以设…

Library介绍(二)

时序弧(timing arc) 描述2个节点延迟信息的数据,可以分为net delay和cell delay两大类。 Net delay: drive cell output pin和drived cell input pin之间的net delay,取决于net rc和drive cell驱动能力及drived cell的load。 C…

为什么需要数字集群手持终端?应用优势

在当今社会,无论是应急响应、企业运营还是政府管理,高效、可靠的通讯手段都是成功的关键因素。数字集群手持终端,作为现代通信技术的代表,正成为提升通信效率和确保信息安全的强大工具。据统计,我国的数字集群网络已发…

红蓝攻防实战技术———实战化运营体系的落地

大家好,我是herosunly。985院校硕士毕业,现担任算法研究员一职,热衷于大模型算法的研究与应用。曾担任百度千帆大模型比赛、BPAA算法大赛评委,编写微软OpenAI考试认证指导手册。曾获得阿里云天池比赛第一名,CCF比赛第二…

ZYNQ:点亮LED灯

FPGA 开发流程 1、需求分析:分析需要实现什么功能 2、系统设计:对系统进行设计,需要哪些模块,实现什么功能,数据流怎么走,带宽、工作频率怎么样 3、硬件选项:根据功能、性能需求选择合适的FPGA…

安防区域保护:无线电干扰设备技术详解

在安防区域保护中,无线电干扰设备技术扮演着重要角色,它主要用于通过发射特定频率的无线电波来干扰无人机或其他无线电设备的通信链路、导航信号或控制信号,以达到削弱、阻断甚至控制这些设备运行的目的。以下是对无线电干扰设备技术的详细解…

宝塔环境下MinDoc的安装教程

安装 本教程只适用于CentOS 7,其它系统教程参考:Github地址。 1、下载MinDoc并解压 访问https://github.com/mindoc-org/mindoc/releases下载最新版本并解压 #创建一个目录 mkdir mindoc && cd mindoc#一般宝塔带wget和unzip,如果…

大数据新视界 --大数据大厂之Cassandra 分布式数据库在大数据中的应用与调优

💖💖💖亲爱的朋友们,热烈欢迎你们来到 青云交的博客!能与你们在此邂逅,我满心欢喜,深感无比荣幸。在这个瞬息万变的时代,我们每个人都在苦苦追寻一处能让心灵安然栖息的港湾。而 我的…

Open WebUI部署自己的大模型

相关代码地址见文末 1. 概述 Text Generation WebUI 是一个基于网页的界面,提供使用不同语言模型(如Transformers、Llama、ExLlamav2等)进行文本生成的功能。该软件支持以下主要功能: 模型加载:支持从多种框架加载单个或多个LoRA。LoRA微调:在支持的加载器上进行低秩适…

ArcgisEngine开发中,Ifeatureclass.Addfield 报错0x80040655处理方法

1、ArcgisEngine开发中,Ifeatureclass.Addfield 报错0x80040655。如下图所示。 2、经分析,这是由于字段类型错误,经检查,是由于字段名为中文名,超出shp格式的最大字段长度量,看资料说是5个中文字符&#xf…

关于BSV区块链覆盖网络的常见问题解答(上篇)

​​发表时间:2024年9月20日 在BSV区块链上的覆盖网络服务为寻求可扩展、安全、高效交易处理解决方案的开发者和企业家开辟了新的视野。 作为开创性的曼达拉升级的一部分,覆盖网络服务提供了一个强大的框架,用于管理特定类型的交易和数据访问…