CogVLM模型部署与应用指南

CogVLM是一个强大的多模态模型,能够处理文本和图像数据。通过CogVLM,用户可以提出与图像相关的问题,模型将结合图像内容给出答案。在定性测试中,CogVLM展现出了比LLaVA和BakLLaVA更强的性能,并且与Qwen-VL和GPT-4 with Vision的性能相当。

CogVLM的能力范围广泛,包括但不限于视觉问答(VQA)、文档VQA、零样本目标检测、文档OCR和普通OCR。这些功能使得CogVLM在制造业、物流等多个行业中都有潜在的应用价值,例如检查叉车是否靠近传送带或读取运输集装箱上的序列号。

要在本地硬件上部署CogVLM,推荐使用Roboflow Inference,这是一个开源的计算机视觉推理服务器,支持运行基础模型如CogVLM以及自己训练的模型(例如YOLOv8模型)。本指南将带了解如何在本地硬件上部署和使用CogVLM,包括安装Roboflow Inference和创建一个Python脚本,该脚本可以向本地部署的CogVLM模型发送请求。

可以根据本指南在任何云平台上部署CogVLM,如AWS、GCP和Azure。在本指南中,在配备NVIDIA T4 GPU的GCP Compute Engine实例上部署了CogVLM。

CogVLM可以通过不同程度量化来运行。量化是一种使大型机器学习模型变小的方法,以便在较低的RAM需求下运行。模型量化程度越高,运行速度越快,但准确度越低。

通过Roboflow Inference运行CogVLM时,可以选择三种量化程度:

  • 无量化:运行完整模型,需要80GB的GPU RAM。可以在80GB的NVIDIA A100上运行此模型。
  • 8位量化:运行模型的准确度低于无量化,需要32GB的GPU RAM。可以在具有足够虚拟RAM的A100上运行此模型。
  • 4位量化:运行模型的准确度低于8位量化,需要16GB的GPU RAM。可以在NVIDIA T4上运行此模型。

应根据可用硬件和应用所需的准确度水平来选择模型大小。为了获得最准确的结果,请使用未量化的CogVLM。在本指南中,将使用4位量化,以便在T4上运行模型。

要部署CogVLM,将使用Roboflow Inference。Inference使用Docker创建隔离环境,在其中可以运行视觉模型。使用Inference部署的模型具有HTTP接口,可以通过该接口发送请求。

首先,在机器上安装Docker。如果尚未安装Docker,请按照官方Docker安装说明为操作系统设置Docker。

接下来,需要安装Inference Python包和CLI。可以使用这些包设置Inference Docker容器。运行以下命令安装所需的包:

pip install inference inference-cli

要启动Inference服务器,请运行:

inference server start

注意:此命令会检测机器上是否存在GPU,并相应地拉取正确的Docker镜像。如果没有GPU,此命令将拉取特定于CPU的Docker镜像,该镜像中不包含CogVLM

首次运行此命令时,将从Docker Hub下载Docker容器。一旦机器上有了容器,容器将开始运行。Inference服务器将在以下地址可用:

http://localhost:9001

使用Inference部署的所有模型都有专用的HTTP路由。在本指南中,将使用CogVLM路由向CogVLM模型发送请求。一旦下载了模型权重,就可以离线运行CogVLM。

创建一个新的Python文件,并添加以下代码:

import base64 import os from PIL import Image import requests PORT = 9001 API_KEY = "" IMAGE_PATH = "forklift.png" def encode_base64(image_path): with open(image_path, "rb") as image: x = image.read() image_string = base64.b64encode(x) return image_string.decode("ascii") prompt = "Read the text in this image." infer_payload = { "image": { "type": "base64", "value": encode_base64(IMAGE_PATH), }, "api_key": API_KEY, "prompt": prompt, } results = requests.post( f"http://localhost:{PORT}/llm/cogvlm", json=infer_payload, ) print(results.json())

这段代码将向/llm/cogvlm路由发送HTTP请求。此路由接受文本和图像,这些将被发送到CogVLM进行处理。此路由返回一个包含模型文本响应的JSON对象。

在上面的代码中,将ROBOFLOW_API_KEY替换为Roboflow API密钥。image.png替换为想要用来发送请求的图像。prompt替换为想要问的问题。

让在下面的叉车图像上运行代码,并问问题“叉车是否靠近传送带?”:

{'response': 'yes, there is a forklift close to a conveyor belt, and it appears to be transporting a stack of items onto it.', 'time': 12.89864671198302}

模型返回了正确的答案。在使用的NVIDIA T4 GPU上,推理大约需要12.9秒。让问问题“工人是否戴着手套?”。模型返回:

{'response': 'No, the forklift worker is not wearing gloves.', 'time': 10.490668170008576}

模型返回了正确的响应。模型计算响应大约需要10.5秒。

当询问上图中的工人是否戴着安全帽时,模型回答说“是的,工人戴着安全帽。”这是不正确的。

与所有多模态语言模型一样,模型性能将取决于提供的图像、提示以及应用到模型的量化程度。量化了这个模型,以便在T4上运行模型,但如果没有这种量化,模型的性能会更好。

CogVLM是一个大型多模态模型(LMM)。可以向CogVLM询问有关图像的问题并获取响应。CogVLM能够执行不同的计算机视觉任务,从识别图像中物体的存在到读取图像中的字符再到零样本目标检测。

沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485