You need to enable JavaScript to run this app.
导航

[模型组]Qwen-VL-Chat 大模型

最近更新时间2024.04.10 10:20:03

首次发布时间2024.04.10 10:20:03

Qwen-VL-Chat 是一个官方模型组,它包含 3 个独立模型和 1 个 Ensemble 模型。Ensemble 模型将 3 个独立模型封装为一个工作流。本模型组允许您向一体机私有化部署 Qwen-VL-Chat 大模型,在边缘侧获取大模型服务。

背景信息

Qwen-VL 是阿里云研发的大规模视觉语言模型(Large Vision Language Model,LVLM)。Qwen-VL 可以以图像、文本、检测框作为输入,并以文本和检测框作为输出。Qwen-VL-Chat 是 Qwen-VL 系列的 Chat 模型。

模型组基本信息

模型列表

本模型组包含 4 个模型。其中,Ensemble 模型中封装了其他模型,定义了模型组的整体工作流。使用过程中,您只需部署 Ensemble 模型,无需关注中间的处理过程。
下表罗列了本模型组包含的所有模型。您可以在边缘智能控制台的 官方模型 列表访问这些模型。

模型名称

模型基本信息

Qwen-VL-Chat PreProcess

图片

Qwen-VL-Chat LLM

图片

Qwen-VL-Chat PostProcess

图片

Qwen-VL-Chat

图片

Ensemble 模型输入

名称

类型

形状

说明

QUERY

STRING

-1

提示词(prompt)文本。

REQUEST_OUTPUT_LEN

INT32

-1

输出的最大长度。

IMAGE

STRING

-1

输入的图片。图片采用 base64 编码格式。

Ensemble 模型输出

名称

类型

形状

说明

text_output

STRING

-1

LLM 响应的文本内容。

cum_log_probs

FP32

-1

在生成每个新 token 时,模型计算出该 token 的对数概率(log probability)。

output_log_probs

FP32

-1,-1

类似于 cum_log_probs,但特指输出 token(即生成的文本)的对数概率。

context_logits

FP32

-1,-1

模型基于输入上下文计算出的这些原始分数。

generation_logits

FP32

-1,-1,-1

与 context_logits 对应,指在生成新 token 的过程中计算出的 logits 分数。

Ensemble 模型版本

本模型提供 2 个可部署版本。

版本名称

最大批处理大小

硬件架构要求

其他说明

V1_3090_WithoutFile

取值范围:1~100。

只能部署到具有 RTX 3090 显卡的一体机上。

此版本不包含 Qwen-VL-Chat 大模型文件。您必须先在一体机上挂载 Qwen-VL-Chat 大模型文件,然后才可以部署此版本。

V2_3090_WithFile

取值范围:1~100。

只能部署到具有 RTX 3090 显卡的一体机上。

此版本包含 Qwen-VL-Chat 大模型文件。部署过程中涉及大模型文件的下载,部署用时较长。

部署模型服务

部署不同版本的方法不同。根据要部署的版本,执行相应操作。

部署 V1_3090_WithoutFile 版本

部署此版本前,您必须先在一体机的 /etc/vei_infer 目录手动挂载所需的大模型文件。

步骤1:挂载大模型文件到一体机

  1. 远程登录一体机。
  2. 访问一体机的 /etc/vei_infer 目录。
  3. /etc/vei_infer 目录挂载如下大模型文件:
    • build 过后的 llm engine 文件夹(对于 Qwen-VL-Chat 模型,文件夹名称为 qwen_engine
    • build 过后的 vit engine 文件夹(对于 Qwen-VL-Chat 模型,文件夹名称为 vit_engine
    • tokenizer 文件夹(对于 Qwen-VL-Chat 模型,文件夹名称为 qwen_vl_tokenizer
      图片

步骤2:部署模型服务

参考 部署模型服务进行模型服务的部署。在 部署模型服务 参数配置页面,修改以下配置:

说明

下表中未包含的配置项无需修改,统一使用默认值。

类型

配置项

说明

基本信息

一体机

选择支持 GPU 的一体机。

服务名称

设置一个服务名称。服务名称在一台一体机上必须保持唯一。

模型信息

模型

选择 Qwen-VL-Chat

模型版本

选择 V1_3090_WithoutFile

服务配置

HTTP端口

指定一个一体机上空闲的端口。

GRPC端口

指定一个一体机上空闲的端口。

高级配置

参数配置

根据大模型文件的实际挂载路径修改以下示例代码,然后将修改后的代码粘贴到 参数配置 输入框。需要修改的字段包括:

  • gpt_model_path:将它的值修改为 llm engine 文件夹的挂载路径。
  • vit_dir:将它的值修改为 vit engine 文件夹下 .plan 文件的路径。
  • tokenizer_dir:将值修改为 tokenizer 文件夹的挂载路径。
{
    "tokenizer_dir": "/etc/vei_infer/qwen_vl_tokenizer",
    "vit_dir": "/etc/vei_infer/vit_engine/visual_encoder_fp16.plan",
    "gpt_model_path": "/etc/vei_infer/qwen_engine",
    "add_special_tokens": "False",
    "tokenizer_type": "auto",
    "skip_special_tokens": "True",
    "max_beam_width": "${max_beam_width}",
    "FORCE_CPU_ONLY_INPUT_TENSORS": "no",
    "gpt_model_type": "inflight_fused_batching",
    "max_tokens_in_paged_kv_cache": "${max_tokens_in_paged_kv_cache}",
    "max_attention_window_size": "${max_attention_window_size}",
    "batch_scheduler_policy": "max_utilization",
    "kv_cache_free_gpu_mem_fraction": "0.5",
    "enable_trt_overlap": "${enable_trt_overlap}",
    "exclude_input_in_output": "${exclude_input_in_output}",
    "enable_kv_cache_reuse": "${enable_kv_cache_reuse}",
    "normalize_log_probs": "${normalize_log_probs}",
    "enable_chunked_context": "${enable_chunked_context}",
    "gpu_device_ids": "${gpu_device_ids}"
}

部署 V2_3090_WithoutFile 版本

参考 部署模型服务进行模型服务的部署。在 部署模型服务 参数配置页面,修改以下配置:

说明

下表中未包含的配置项无需修改,统一使用默认值。

类型

配置项

说明

基本信息

一体机

选择支持 GPU 的一体机。

服务名称

设置一个服务名称。服务名称在一台一体机上必须保持唯一。

模型信息

模型

选择 Qwen-VL-Chat

模型版本

选择 V2_3090_WithFile

服务配置

HTTP端口

指定一个一体机上空闲的端口。

GRPC端口

指定一个一体机上空闲的端口。

高级配置

参数配置

设置为以下代码:

{
    "tokenizer_dir": "/models/m-official-29/1/qwen_vl_tokenizer",
    "vit_dir": "/models/m-official-29/1/visual_encoder_fp16.plan",
    "gpt_model_path": "/models/m-official-30/1/",
    "add_special_tokens": "False",
    "tokenizer_type": "auto",
    "skip_special_tokens": "True",
    "max_beam_width": "${max_beam_width}",
    "FORCE_CPU_ONLY_INPUT_TENSORS": "no",
    "gpt_model_type": "inflight_fused_batching",
    "max_tokens_in_paged_kv_cache": "${max_tokens_in_paged_kv_cache}",
    "max_attention_window_size": "${max_attention_window_size}",
    "batch_scheduler_policy": "max_utilization",
    "kv_cache_free_gpu_mem_fraction": "0.5",
    "enable_trt_overlap": "${enable_trt_overlap}",
    "exclude_input_in_output": "${exclude_input_in_output}",
    "enable_kv_cache_reuse": "${enable_kv_cache_reuse}",
    "normalize_log_probs": "${normalize_log_probs}",
    "enable_chunked_context": "${enable_chunked_context}",
    "gpu_device_ids": "${gpu_device_ids}"
}

验证

完成模型服务部署后,您可以使用客户端脚本进行模型的调用。以下是 Client 脚本的示例。

import requests
import base64

server = "<server_ip:port>" # 修改为模型服务的服务地址(可从模型服务详情中获取)
prompt = """描述一下图片的内容""" # 修改为要使用的提示词(prompt)
img_path = "./cat.jpeg" # 修改为要读取的图片地址
max_ouput_len = 500

url = "http://%s/v2/models/m-official-32/generate" % server
def request_qwen_vl(query, path):
    data = {
        "QUERY": query,
        "REQUEST_OUTPUT_LEN": max_ouput_len,
        "IMAGE": base64.b64encode(open(path, 'rb').read()).decode('utf-8')
    }
    response = requests.post(url, json=data)
    return response.json()['text_output']

print(request_qwen_vl(prompt, img_path))