【发布】ChatGLM又开源了一个6B多模态版本

点击蓝字

c4f9348ef1697867ea884cc3d0f26b4c.jpeg

关注我们

AI TIME欢迎每一位AI爱好者的加入!

ecce8eebc8069bddde9a5dd4c2e7bd53.png

OpenAI 的GPT-4样例中展现出令人印象深刻的多模态理解能力,但是能理解图像的中文开源对话模型仍是空白。

近期,智谱AI 和清华大学 KEG 实验室开源了基于 ChatGLM-6B 的多模态对话模型 VisualGLM-6B,供大家使用。

Github 链接:

https://github.com/THUDM/VisualGLM-6B

Huggingface 链接:

https://huggingface.co/THUDM/visualglm-6b

VisualGLM-6B 可以进行图像的描述及相关知识的问答:

2df550c8da9f00649e6ad5b176aac75c.png

也能结合常识或提出有趣的观点:

8c398e8bb6bd328301f9f6821d580f9d.png 0803a04bae4efb2738141308bf55249c.png

a2218b73f603711df92423a901b66007.png

一、简介

VisualGLM-6B 是一个开源的,支持图像、中文和英文的多模态对话语言模型,语言模型基于 ChatGLM-6B,具有 62 亿参数;图像部分通过训练 BLIP2-Qformer 构建起视觉模型与语言模型的桥梁,整体模型共 78 亿参数。

VisualGLM-6B 依靠来自于 CogView 数据集的30M高质量中文图文对,与 300M 经过筛选的英文图文对进行预训练,中英文权重相同。该训练方式较好地将视觉信息对齐到 ChatGLM 的语义空间;之后的微调阶段,模型在长视觉问答数据上训练,以生成符合人类偏好的答案。

VisualGLM-6B 由 SwissArmyTransformer (简称 sat ) 库训练,这是一个支持 Transformer 灵活修改、训练的工具库,支持 Lora、P-tuning 等参数高效微调方法。本项目提供了符合用户习惯的 huggingface 接口,也提供了基于sat的接口。

不过,由于 VisualGLM-6B 仍处于v1版本,目前已知其具有相当多的局限性,如图像描述事实性/模型幻觉问题,图像细节信息捕捉不足,以及一些来自语言模型的局限性。请大家在使用前了解这些问题,评估可能存在的风险。在VisualGLM之后的版本中,将会着力对此类问题进行优化。

结合模型量化技术,用户可以在消费级的显卡上进行本地部署(INT4量化级别下最低只需8.7G显存)。

二、使用

模型推理

使用pip安装依赖

pip install -r requirements.txt

此时默认会安装deepspeed库(支持sat库训练),此库对于模型推理并非必要,同时部分Windows环境安装此库时会遇到问题。如果想绕过deepspeed安装,我们可以将命令改为

pip install -r requirements_wo_ds.txt
pip install --no-deps 'SwissArmyTransformer>=0.3.6'

如果使用Huggingface transformers库调用模型,可以通过如下代码(其中图像路径为本地路径):

from transformers import AutoTokenizer, AutoModel
tokenizer = AutoTokenizer.from_pretrained("THUDM/visualglm-6b", trust_remote_code=True)
model = AutoModel.from_pretrained("THUDM/visualglm-6b", trust_remote_code=True).half().cuda()
image_path = "your image path"
response, history = model.chat(tokenizer, image_path, "描述这张图片。", history=[])
print(response)
response, history = model.chat(tokenizer, "这张图片可能是在什么场所拍摄的?", history=history)
print(response)

如果使用SwissArmyTransformer库调用模型,方法类似,可以使用环境变量SAT_HOME决定模型下载位置。在本仓库目录下

>>> 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)
>>> response, history, cache_image = chat(None, model, tokenizer, "这张图片可能是在什么场所拍摄的?", history=history, image=cache_image)
>>> print(response)

使用 sat 库也可以轻松进行进行参数高效微调。

请注意,Huggingface模型的实现位于Huggingface的仓库中,sat模型的实现包含于本仓库中。

三、部署工具

命令行 Demo

python cli_demo.py

程序会自动下载sat模型,并在命令行中进行交互式的对话,输入指示并回车即可生成回复,输入 clear 可以清空对话历史,输入 stop 终止程序。

2b1d635232b8c856be8705d038e73ba1.png

程序提供如下超参数控制生成过程与量化精度:

usage: cli_demo.py [-h] [--max_length MAX_LENGTH] [--top_p TOP_P] [--top_k TOP_K] [--temperature TEMPERATURE] [--english] [--quant {8,4}]
optional arguments:-h, --help            show this help message and exit--max_length MAX_LENGTHmax length of the total sequence--top_p TOP_P         top p for nucleus sampling--top_k TOP_K         top k for top k sampling--temperature TEMPERATUREtemperature for sampling--english             only output English--quant {8,4}         quantization bits

我们也提供了继承自ChatGLM-6B的打字机效果命令行工具,此工具使用Huggingface模型:

python cli_demo_hf.py

网页版 Demo

ed52d6a742f29ac4957eb36b1298987e.png

我们提供了一个基于 Gradio 的网页版 Demo,首先安装 Gradio:pip install gradio。然后下载并进入本仓库运行web_demo.py:

git clone https://github.com/THUDM/VisualGLM-6B
cd VisualGLM-6B
python web_demo.py

程序会自动下载sat模型,并运行一个 Web Server,并输出地址。在浏览器中打开输出的地址即可使用。--quant 4使用4比特量化减少显存占用。

我们也提供了继承自ChatGLM-6B的打字机效果网页版工具,此工具使用Huggingface模型:

python web_demo_hf.py

API部署

首先需要安装额外的依赖 pip install fastapi uvicorn,然后运行仓库中的 api.py:

python api.py

程序会自动下载sat模型,默认部署在本地的 8080 端口,通过 POST 方法进行调用。下面是用curl请求的例子,一般而言可以也可以使用代码方法进行POST。

echo "{\"image\":\"$(base64 path/to/example.jpg)\",\"text\":\"描述这张图片\",\"history\":[]}" > temp.json
curl -X POST -H "Content-Type: application/json" -d @temp.json http://127.0.0.1:8080

得到的返回值为

{"response":"这张图片展现了一只可爱的卡通羊驼,它站在一个透明的背景上。这只羊驼长着一张毛茸茸的耳朵和一双大大的眼睛,它的身体是白色的,带有棕色斑点。","history":[('描述这张图片', '这张图片展现了一只可爱的卡通羊驼,它站在一个透明的背景上。这只羊驼长着一张毛茸茸的耳朵和一双大大的眼睛,它的身体是白色的,带有棕色斑点。')],"status":200,"time":"2023-05-16 20:20:10"}

四、模型量化

在Huggingface实现中,模型默认以 FP16 精度加载,运行上述代码需要大概 15GB 显存。如果你的 GPU 显存有限,可以尝试以量化方式加载模型。使用方法如下:

# 按需修改,目前只支持 4/8 bit 量化。下面将只量化ChatGLM,ViT 量化时误差较大
model = AutoModel.from_pretrained("THUDM/visualglm-6b", trust_remote_code=True).quantize(8).half().cuda()

在sat实现中,需先传参将加载位置改为cpu,再进行量化。方法如下,详见cli_demo.py:

from sat.quantization.kernels import quantize
model = quantize(model.transformer, args.quant).cuda()
# 指定 model.transformer 只量化 ChatGLM,ViT 量化时误差较大

五、局限性

本项目正处于V1版本视觉和语言模型的参数、计算量都较小,我们总结了如下主要存在的改进方向:

  • 图像描述事实性/模型幻觉问题。在生成图像长描述的时候,距离图像较远时,语言模型的将占主导,有一定可能根据上下文生成并不存在于图像的内容。

  • 属性错配问题。在多物体的场景中,部分物体的某些属性,经常被错误安插到其他物体上。

  • 分辨率问题。本项目使用了224*224的分辨率,也是视觉模型中最为常用的尺寸;然而为了进行更细粒度的理解,更大的分辨率和计算量是必要的。


硬核招聘

欢迎优秀的人

一起用技术改变世界

5fc10a3037edef9e2a6856607ad5a553.jpeg

往期精彩文章推荐

a8ddfe1ab43f473b9ef44d4e22913068.jpeg

记得关注我们呀!每天都有新知识!

 关于AI TIME 

AI TIME源起于2019年,旨在发扬科学思辨精神,邀请各界人士对人工智能理论、算法和场景应用的本质问题进行探索,加强思想碰撞,链接全球AI学者、行业专家和爱好者,希望以辩论的形式,探讨人工智能和人类未来之间的矛盾,探索人工智能领域的未来。

迄今为止,AI TIME已经邀请了1000多位海内外讲者,举办了逾550场活动,超600万人次观看。

2b4d4bcc1afc6e9b581ebd92202a6091.png

我知道你

在看

~

0b6e017ada44cecfa8a21f8f0145b622.gif

点击 阅读原文 查看!

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

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

相关文章

html实现短信验证的功能,怎样实现短信验证功能

怎样实现短信验证功能 现在很多的app都集成了短信验证码的功能,一般都是用于注册登录或者找回密码.市面上提供短信验证码SDK产品的有很多家,由朋友介绍,我使用了Mob的SMSSDK来集成一下! 首先看了下他们的官方文档,步骤写的很清晰,集成很简单,于是马上写个小demo先试试. 首先是下…

发送验证码

需求: 1.发送按钮点击后,会被禁用; 2.被点击后,按钮里面的内容会变化成1分钟的倒计时; 3.待发送按钮被触发后才可以点击提交按钮,需在验证码框里填写0505,用弹窗提示成功。 实现原理&#xff1…

验证码短信是如何实现的?怎么用短信平台发送验证码短信?

验证码短信在用户注册、用户登录、身份验证等诸多场景运用广泛,用户在输入手机号码后就会接收到平台/商家发送的验证码短信,那么验证码短信是怎么发送的?怎么用短信平台发送验证码短信? 短信验证码需要通过短信验证码接口实现,由于自己开发和运维成本高,通常是通过第三方…

短信发送验证码实现验证

写在前面   你们好,我是小庄。很高兴能和你们一起学习短信发送功能。如果您对Java感兴趣的话可关注我的动态.   写博文是一种习惯,在这过程中能够梳理和巩固知识点。 实现思路:前台将手机号码发送到后台,后台设置随机数&#…

短信接口被恶意调用?企业短信防火墙+【中昱维信】短信验证码【Java】

短信接口被恶意调用?企业短信防火墙【中昱维信】短信验证码【Java】 一、企业短信防火墙的实现1.1 简介1.2 第一步:获取防火墙帐号密钥1.3 第二步:下载防火墙服务器1.4 第三步:业务系统前后端接入1.5丰富可视化实时风险大盘&#…

短信验证码的登录流程

点击上方 "编程技术圈"关注, 星标或置顶一起成长 后台回复“大礼包”有惊喜礼包! 每日英文 Empty heart, is the best gift; alone the way, is the most beautiful scenery. 放空的心,是最好的礼物;独走的路,是最美的风…

App发送短信验证码实现

前言: 现如今,电话是接外卖和快递的,短信是用来收验证码的。那么像一般的App里面使用手机号验证码方式进行注册或登录是怎样实现的呢?这篇文章可能帮到你。 1.寻找合适的短信平台 因为三大运营商的限制摆在那里,凭个人…

GPT+时代来临:OpenAI开放GPT3.5模型,1000token仅1毛钱

GPT3.5 Model API 使用指南 今天OpenAI公司开放了最新的GPT3.5模型:gpt-3.5-turbo,也就是目前网页版的ChatGPT使用的模型。而此前OpenAI开放的最新的模型text-davinci-003则是基于GPT3模型构建的。并且价格十分便宜:1000 token/0.002美元&am…

『2023北京智源大会』开幕式以及基础模型前沿技术论坛

『2023北京智源大会』开幕式以及基础模型前沿技术论坛 文章目录 一. 黄铁军丨智源研究院院长1. 大语言模型2. 大语言模型评测体系FlagEval3. 大语言模型生态(软硬件)4. 三大路线通向 AGI(另外2条路径) 二. Towards Machines that can Learn, Reason, and Plan(杨立昆丨图灵奖得…

超级AI大脑:全能型学习助理

有句话说在知识的海洋里渴死,说的就是面对海量知识不知如何获取 进而可以理解为不知道如何学习 而现在我们迎来了一个超级大脑, 一个几乎帮助你深度学习的全能助理。 你可以询问超级AI大脑任何内容,回答常常会令你惊喜: 文案创作&…

前沿系列--Transform架构[架构分析+代码实现]

文章目录 前言总体架构总体任务使用 输入部分EmbeddingPosition Encodingwhy实现 注意部分注意力机制/自注意力掩码作用如何工作形状解释 完整实现多头注意力实现Norm处理 FeedForward 以及连接编码器解码器中间层组装 输出层模型组装总结 前言 Transform这玩意的大名我想就不…

android 如何修改系统语言

最近有需求需要去编程实现根据选择去修改系统语言, 根据查资料看setting源码有两种方式, 在这里记录一下. 修改系统语言或者控制系统开关机等操作即使声明了对应权限还是会报错, 这是因为这些操作需要系统权限,这里也会介绍如何使用android studio对应用进行系统签名. 一.如何…

goland 界面变成中文 修改回英文界面

新版本会自动装中文插件 主界面 文件->设置 打开 设置对话框 点击 插件 选择已安装 取消勾选 中文插件 确定 重新启动即可 恢复到原始的英文界面

Android多语言切换/适配——以英语为例

近期在做一个背单词APP来作为毕业设计,在app里面想设计一个切换语言为英语的功能,记录一下本次实现的效果以及步骤。 文章目录 实现效果中文模式英文模式 实现原理实现步骤1、创建相关的value文件夹和string.xml文件2、 在对应的string文件中选择合适的翻…

Android 10.0修改语言设置简体中文(中国)为简体中文(中国大陆)

Android Q中 Settings的语言设置选择列表中简体中文下,默认显示为中国、香港、台湾和新加坡: 如果想修改其显示为中国大陆,就必须修改ICU资源的配置。 ICU ICU 是开源项目, 提供了最新的unicode标准,字符集转换&…

设置日语输入法遇到的各种问题

一旦开始学习日语,就忍不住想在自己的电脑上输入日文,按照网上的各种说法,将win10自带的输入法添加了日语的语言包之后,还有各种小问题,于是又在网上各种搜索,花了不少时间。在此整理一下日语输入遇到的各种…

postman设置成中文

介绍: Postman一款非常流行的API调试工具。其实,开发人员用的更多。因为测试人员做接口测试会有更多选择,例如Jmeter、soapUI等。不过,对于开发过程中去调试接口,Postman确实足够的简单方便,而且功能强大。用户在开发…

postman怎么设置中文

很多小伙伴想问postman怎么如何设置中文?,但问题这个小工具没有人开发,期待业内大神开发一个吧。下面给大家分享下postman设置中文遇到的问题,一起来学习下吧。 postman怎么设置中文 postman设置中文方法 1.进入postman官网,可以…

【Android进阶】17、设置中文:语言地区的本地化、国际化

文章目录 为了国际化的需求我们设置中文版和英文版两个版本的 res/values/strings.xml,通过设置地区,让os自动找对应版本。 在 res 下添加 strings.xml,设置 Locale 为中文,效果如下: 生成后的文件如下图: 其实文件放置在 res/values-zh/strings.xml 中,如下: 在 res/…

百模大战,谁是下一个ChatGPT?

“不敢下手,现在中国还没跑出来一家绝对有优势的大模型,上层应用没法投,担心押错宝。”投资人Jucy(化名)向光锥智能表示,AI项目看得多、投的少是这段时间的VC常态。 ChatGPT点燃AI大爆炸2个月中&#xff0…