【GLM部署实战】探索 CogVLM2:多模态智能的前沿技术与应用实践


引言

在人工智能的多模态范畴,将视觉信息与语言处理加以融合的技术正在急速演进。CogVLM2 作为此趋势的典型代表,乃是一款开源的视觉语言模型,其通过对视觉和语言信息的有效整合,极大地增强了模型在多模态任务里的表现水平。本文将会详尽阐述 CogVLM2 的技术特性、功能应用,并且为您提供切实可行的实践指南。

一、CogVLM2概览

CogVLM2 由智谱 A1 推出,系新一代的多模态大模型,于视觉和语言理解层面实现了显著的性能提升。它支持高达 8K 的文本长度以及 1344*1344 分辨率的图像输入,拥有强大的文档图像理解能力。该模型运用 50 亿参数的视觉编码器和 70 亿参数的视觉专家模块,借助深度融合策略,优化了视觉与语言模态的交互,在强化视觉理解的同时,保障了语言处理能力。CogVLM2 的开源版本支持中英文双语,模型参数规模为 19 亿,但实际推理时激活的参数量约为 120 亿,呈现出在多模态任务中的高效性能。

CogVLM2 开源了多款语言模型,均基于 Meta-Llama-3-8B-Instruct 模型进行微调,具备如下特点:

  • 显著提升关键指标,例如 TextVQA 和 DocVQA 等。
  • 支持长达 8K 的文本长度。
  • 支持高达 1344x1344 分辨率的图像。
  • 提供支持中英文双语的开源模型版本。
    在这里插入图片描述

CogVLM2 的技术突出之处在于其强大的跨模态理解能力,能够处理长文本和高分辨率图像,并且支持中英文双语,这使其在多语言环境中具备广泛的应用潜能。

二、模型架构

CogVLM2 的模型架构在承继上一代模型的基础上展开了优化与创新,具体特点如下:

  1. 视觉编码器:CogVLM2 运用了一个具备 50 亿参数的视觉编码器,负责对输入图像实施特征提取与编码操作。
  2. 视觉专家模块:于大语言模型中整合了一个拥有 70 亿参数的视觉专家模块,该模块凭借独特的参数设定,精细地构建了视觉与语言序列的交互模型。
  3. 深度融合策略:CogVLM2 采用了深度融合策略,促使视觉模态与语言模态能够更为紧密地相结合,进而在增强模型视觉理解能力的同时,维持了其在语言处理方面的优势。
  4. MLP Adapter:模型中应用了 MLP(多层感知器)Adapter,用于调节和适配不同模态之间的特征。
  5. 降采样模块:为了更优地处理和理解高分辨率的文档或网页图片,CogVLM2 在视觉编码器之后引入了一个专门的降采样模块,能够有效地提取关键信息,降低输入到语言模型中的序列长度。
  6. Word Embedding:模型涵盖了 Word Embedding 层,用于将文本转化为模型能够理解的数值型向量。
  7. 多专家模块结构:CogVLM2 规划了多专家模块结构,使得在进行推理时,实际激活的参数量仅约 120 亿,这种设计既保障了模型的性能,又提升了推理效率。
  8. 语言基座模型:CogVLM2 选用了 Meta-Llama-3-8B-Instruct 作为语言基座模型,为模型赋予了强大的语言理解和生成能力。

三、模型性能

CogVLM2 的团队在一系列多模态基准上实施了定量评估,这些基准涵盖了 TextVQA、DocVQA、ChartQA、OCRbench、MMMU、MMVet、MMBench 等等。从下面的表格能够明晰,CogVLM2 的两个模型,虽然具有相对较小的模型规模,然而在多个基准中获取了 SOTA 性能;而在其他性能方面,也能够达成与闭源模型(诸如 GPT-4V、Gemini Pro 等)相近的水平。
在这里插入图片描述

四. 模型在线体验

在线地址:http://cogvlm2-online.cogviewai.cn:7861/
在这里插入图片描述

五. 模型部署实践

1、资源准备

最低配置要求
Python: 3.10.12 以上版本。
操作系统: 建议使用 Linux 操作系统运行以避免xformers库安装问题。建议使用 NVIDIA GPU 以防止兼容性问题。
GPU要求如下表格所示
在这里插入图片描述

2、源码下载

从Github仓库下载模型源码(推理实践的客户端源代码)

git clone https://github.com/THUDM/CogVLM2.git

3、安装依赖

在开始使用CogVLM2之前,请确保安装了所有必要的Python库。可以通过以下命令安装transformers库和其他依赖:

pip install transformers
pip install -r requirements.txt  # requirements.txt 包含在CogVLM2项目中

4、模型下载

本次测试由于资源有限,下载量化版本的模型进行测试。
CogVLM2模型可以从从国内的魔塔(modelscope)下载,也可以从huggingface下载(这里主要下载模型权重相关文件) 。
modelscope下载地址:https://modelscope.cn/models/ZhipuAI/cogvlm2-llama3-chinese-chat-19B-int4
Huggingface下载地址:https://huggingface.co/THUDM/cogvlm2-llama3-chinese-chat-19B-int4

import torch
from modelscope import snapshot_download

# snapshot_download函数用于下载模型
model_dir = snapshot_download(
    'ZhipuAI/cogvlm2-llama3-chinese-chat-19B-int4',  # 模型名称
    cache_dir='/root/autodl-tmp',  # 缓存目录
    revision='master'  # 版本号
)

5、快速开始

完整测试代码样例如下:

import torch
from PIL import Image
from transformers import AutoModelForCausalLM, AutoTokenizer

MODEL_PATH = "THUDM/cogvlm2-llama3-chinese-chat-19B-int4"
DEVICE = 'cuda' if torch.cuda.is_available() else 'cpu'
TORCH_TYPE = torch.bfloat16 if torch.cuda.is_available() and torch.cuda.get_device_capability()[
    0] >= 8 else torch.float16

tokenizer = AutoTokenizer.from_pretrained(
    MODEL_PATH,
    trust_remote_code=True
)
model = AutoModelForCausalLM.from_pretrained(
    MODEL_PATH,
    torch_dtype=TORCH_TYPE,
    trust_remote_code=True,
    low_cpu_mem_usage=True,
).eval()

text_only_template = "A chat between a curious user and an artificial intelligence assistant. The assistant gives helpful, detailed, and polite answers to the user's questions. USER: {} ASSISTANT:"

while True:
    image_path = input("image path >>>>> ")
    if image_path == '':
        print('You did not enter image path, the following will be a plain text conversation.')
        image = None
        text_only_first_query = True
    else:
        image = Image.open(image_path).convert('RGB')

    history = []

    while True:
        query = input("Human:")
        if query == "clear":
            break

        if image is None:
            if text_only_first_query:
                query = text_only_template.format(query)
                text_only_first_query = False
            else:
                old_prompt = ''
                for _, (old_query, response) in enumerate(history):
                    old_prompt += old_query + " " + response + "\n"
                query = old_prompt + "USER: {} ASSISTANT:".format(query)
        if image is None:
            input_by_model = model.build_conversation_input_ids(
                tokenizer,
                query=query,
                history=history,
                template_version='chat'
            )
        else:
            input_by_model = model.build_conversation_input_ids(
                tokenizer,
                query=query,
                history=history,
                images=[image],
                template_version='chat'
            )
        inputs = {
            'input_ids': input_by_model['input_ids'].unsqueeze(0).to(DEVICE),
            'token_type_ids': input_by_model['token_type_ids'].unsqueeze(0).to(DEVICE),
            'attention_mask': input_by_model['attention_mask'].unsqueeze(0).to(DEVICE),
            'images': [[input_by_model['images'][0].to(DEVICE).to(TORCH_TYPE)]] if image is not None else None,
        }
        gen_kwargs = {
            "max_new_tokens": 2048,
            "pad_token_id": 128002,
        }
        with torch.no_grad():
            outputs = model.generate(**inputs, **gen_kwargs)
            outputs = outputs[:, inputs['input_ids'].shape[1]:]
            response = tokenizer.decode(outputs[0])
            response = response.split("<|end_of_text|>")[0]
            print("\nCogVLM2:", response)
        history.append((query, response))

6、CLI 调用模型

运行本代码以开始在命令行中对话。请注意,模型必须在一张GPU上载入

CUDA_VISIBLE_DEVICES=0 python cli_demo.py

如果有多张GPU,可以通过以下代码执行多卡拉起模型,并将模型的不同层分布在不同的GPU上。

python cli_demo_multi_gpu.py

7、Web端调用模型

chainlit run web_demo.py

拉起对话后,你将能和模型进行对话,效果如下:

8、OpenAI API 测试

openai_api_demo.py提供了一个简单的示例,通过以下代码拉起模型,之后,就可以使用 OpenAI API格式的方式请求和模型的对话。

python openai_api_demo.py

开发人员可以通过以下代码来调用模型:

python openai_api_request.py

结语

CogVLM2 作为新一代的视觉语言模型,不但在技术层面达成了重大突破,并且在实际应用中彰显出广泛的适用性。伴随人工智能技术的持续进步,CogVLM2 有希望在多模态领域创造出更多的创新成果和可能性。本文的目的在于为读者提供一个全面且深入的 CogVLM2 模型介绍,期望能够唤起更多开发者和研究人员的兴趣,携手共同推动 AI 技术的发展。

在这里插入图片描述

🎯🔖更多专栏系列文章:AI大模型提示工程完全指南AI大模型探索之路(零基础入门)AI大模型预训练微调进阶AI大模型开源精选实践AI大模型RAG应用探索实践🔥🔥🔥 其他专栏可以查看博客主页📑

😎 作者介绍:我是寻道AI小兵,资深程序老猿,从业10年+、互联网系统架构师,目前专注于AIGC的探索。
📖 技术交流:欢迎关注【小兵的AI视界】公众号或扫描下方👇二维码,加入技术交流群,开启编程探索之旅。
💘精心准备📚500本编程经典书籍、💎AI专业教程,以及高效AI工具。等你加入,与我们一同成长,共铸辉煌未来。
如果文章内容对您有所触动,别忘了点赞、⭐关注,收藏!加入我,让我们携手同行AI的探索之旅,一起开启智能时代的大门!

评论 13
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值