Skip to content

使用 AidGen 部署 VLM

介绍

端侧部署视觉多模态大模型 (Vision Language Model, VLM) 指将原本在云端运行的大模型压缩、量化并部署到本地设备上,实现离线、低时延的自然语言理解与生成。本章节以 AidGen 推理引擎为基础,演示如何在边缘设备上完成多模态大模型的部署、加载与对话流程。

在本案例中,多模态大模型推理运行在设备端,通过 C++ 代码调用相关接口接收用户输入并实时返回对话结果。

  • 设备:Rhino Pi-X1
  • 系统:Ubuntu 22.04
  • 模型:Qwen2.5-VL-3B (392x392)

支持平台

平台运行方式
Rhino Pi-X1Ubuntu 22.04, AidLux

准备工作

  1. Rhino Pi-X1 硬件

  2. Ubuntu 22.04 系统或 AidLux 系统

案例部署

步骤一:安装 AidGen SDK

bash
# 安装 AidGen SDK
sudo aid-pkg update
sudo aid-pkg -i aidgen-sdk

# 拷贝测试代码
cd /home/aidlux
cp -r /usr/local/share/aidgen/examples/cpp/aidmlm ./

步骤二:模型获取

bash
# 安装 aidllm 工具
sudo aid-pkg -i aidgense

# 下载模型
aidllm pull api aplux/Qwen2.5-VL-3B-392x392-8550

# 将模型资源移动至目录下
mv /opt/aidlux/app/aid-openai-api/res/models/Qwen2.5-VL-3B-392x392-8550/* /home/aidlux/aidmlm

步骤三:配置文件创建

bash
cd /home/aidlux/aidmlm
vim config3b_392.json

创建如下 json 配置文件

json
{
    "vision_model_path":"veg.serialized.bin.aidem",
    "pos_embed_cos_path":"position_ids_cos.raw",
    "pos_embed_sin_path":"position_ids_sin.raw",
    "vocab_embed_path":"embedding_weights_151936x2048.raw",
    "window_attention_mask_path":"window_attention_mask.raw",
    "full_attention_mask_path":"full_attention_mask.raw",
    "llm_path_list":[
        "qwen2p5-vl-3b-qnn231-qcs8550-cl2048_1_of_6.serialized.bin.aidem",
        "qwen2p5-vl-3b-qnn231-qcs8550-cl2048_2_of_6.serialized.bin.aidem",
        "qwen2p5-vl-3b-qnn231-qcs8550-cl2048_3_of_6.serialized.bin.aidem",
        "qwen2p5-vl-3b-qnn231-qcs8550-cl2048_4_of_6.serialized.bin.aidem",
        "qwen2p5-vl-3b-qnn231-qcs8550-cl2048_5_of_6.serialized.bin.aidem",
        "qwen2p5-vl-3b-qnn231-qcs8550-cl2048_6_of_6.serialized.bin.aidem"
    ]
}

文件分布如下:

bash
/home/aidlux/aidmlm
├── CMakeLists.txt
├── test_qwen25vl_abort.cpp
├── test_qwen25vl.cpp
├── demo.jpg
├── embedding_weights_151936x2048.raw
├── full_attention_mask.raw
├── position_ids_cos.raw
├── position_ids_sin.raw
├── qwen2p5-vl-3b-qnn231-qcs8550-cl2048_1_of_6.serialized.bin.aidem
├── qwen2p5-vl-3b-qnn231-qcs8550-cl2048_2_of_6.serialized.bin.aidem
├── qwen2p5-vl-3b-qnn231-qcs8550-cl2048_3_of_6.serialized.bin.aidem
├── qwen2p5-vl-3b-qnn231-qcs8550-cl2048_4_of_6.serialized.bin.aidem
├── qwen2p5-vl-3b-qnn231-qcs8550-cl2048_5_of_6.serialized.bin.aidem
├── qwen2p5-vl-3b-qnn231-qcs8550-cl2048_6_of_6.serialized.bin.aidem
├── veg.serialized.bin.aidem
├── window_attention_mask.raw

步骤四:编译运行

bash
sudo apt update
sudo apt-get install libfmt-dev nlohmann-json3-dev

mkdir build && cd build
cmake .. && make

mv test_qwen25vl /home/aidlux/aidmlm/

# 编译成功后运行
cd /home/aidlux/aidmlm/
./test_qwen25vl "qwen25vl3b392" "config3b_392.json" "demo.jpg" "请描述一下图中场景"

test_qwen25vl.cpp 测试代码中针对不同类型模型定义了 model_type 用于执行文件的第一个参数。目前支持以下类型模型:

ModelType
Qwen2.5-VL-3B (392X392)qwen25vl3b392
Qwen2.5-VL-3B (672X672)qwen25vl3b672
Qwen2.5-VL-7B (392X392)qwen25vl7b392
Qwen2.5-VL-7B (672X672)qwen25vl7b672
  • 运行结果如下