Files
enginex-mlu370-vl/README.md
2025-09-18 19:09:00 +08:00

99 lines
4.9 KiB
Markdown
Raw Permalink Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# enginex-mlu370-vl
# 寒武纪 mlu370 视觉理解多模态
该模型测试框架在寒武纪mlu370 X8/X4加速卡上基于Transfomer框架适配了 gemma-3-4b-it、MiniCPM-Llama3-V-2_5 、MiniCPM_V_2_6 这3个模型。
* Gemma3-4BIT 是 Google 发布的 Gemma3 系列中参数量为 4B 的轻量 multimodal 模型支持图文输入、128K 长上下文、多语种140+ 语言),专为嵌入设备快速部署设计
* MiniCPMLlama3V2.5 是 openbmb 的 8B multimodal 模型,基于 SigLip400M 与 Llama3-8B-Instruct 构建,在 OCR 能力、多语言支持、部署效率等方面表现优秀,整体性能达到 GPT4V 级别
* MiniCPMV2.6 是 MiniCPMV 系列中最新且最强大的 8B 参数模型,具备更优的单图、多图与视频理解能力、卓越 OCR 效果、低 hallucination 率,并支持端侧设备(如 iPad实时视频理解
## Quick Start
1. 首先从modelscope上下载vlm`gemma-3-4b-it`
```bash
modelscope download --model LLM-Research/gemma-3-4b-it --local_dir /mnt/contest_ceph/wenyunqing/models/gemma-3-4b-it
```
2. 构建镜像
```bash
cd ./docker-images
docker build -t combricon-mlu370x8_test_wyq:1.0.0 -f mlu370-x8.dockerfile .
```
3. 启动docker
```bash
docker run -it --rm \
-p 10086:8000 \
--name test_wyq1 \
-v /mnt/contest_ceph/wenyunqing/models/gemma-3-4b-it:/model:rw \
--privileged combricon-mlu370x8_test_wyq:1.0.0
```
注意需要在本地使用寒武纪mlu370 芯片
4. 测试服务
4.1 加载模型
```bash
curl -X POST http://localhost:10086/load_model \
-H "Content-Type: application/json" \
-d '{"model_path":"/model","dtype":"auto"}'
```
4.2 模型推理
```bash
base64 -w 0 demo.jpeg | \
jq -Rs --arg mp "/model" --arg prompt "Describe the picture" \
'{model_path: $mp, prompt: $prompt, images: ["data:image/jpeg;base64," + .], generation: {max_new_tokens: 50, temperature: 0.7}}' | \
curl -X POST "http://localhost:10086/infer" \
-H "Content-Type: application/json" \
-d @-
```
如果本地没有安装`jq`命令,可以使用`test.json`:
```bash
curl -X POST "http://localhost:10086/infer" \
-H "Content-Type: application/json" \
-d @test.json
```
## 模型测试服务原理
尽管对于视觉多模态理解没有一个业界统一的API协议标准但我们也可以基于目前比较流行的Transfomer框架**适配**各类视觉理解多模态模型。
为了让我们的测试框架更通用一些我们基于Transfomer框架对于不同类型的模型系列adpat了一层方便对外提供http服务。
目前测试框架要求用户首先测试时指定需要测试的模型的地址mount到本地文件系统中`/model`之后通过unvicorn拉起服务。
测试过程中,外围测试环境,会首先调用“加载模型接口”:
```bash
curl -X POST http://localhost:10086/load_model \
-H "Content-Type: application/json" \
-d '{"model_path":"/model","dtype":"auto"}'
```
## 模型测试服务请求示例
准备好用于测试的图片和问题通过infer接口获取推理结果
```bash
base64 -w 0 demo.jpeg | \
jq -Rs --arg mp "/model" --arg prompt "Describe the picture" \
'{model_path: $mp, prompt: $prompt, images: ["data:image/jpeg;base64," + .], generation: {max_new_tokens: 50, temperature: 0.7}}' | \
curl -X POST "http://localhost:10086/infer" \
-H "Content-Type: application/json" \
-d @-
```
以上,图片为`demo.jpeg`,问题为`Describe the picture`,可根据需要相应替换。
## 如何使用视觉理解多模态测试框架
由于VLM相关的模型一般需要较大的存储空间为了更好的测试效率需要提前下载好模型相关文件k8s集群可以mount的持久化介质比如cephFS之后提交测试时指定模型存放的地址。
`docker-images/server.py`代码实现了一个接收图片和问题并返回回答文本和统计延迟信息的VLM HTTP 服务。
作为测试对比我们也提供a100相对应的镜像 `git.modelhub.org.cn:9443/enginex-iluvatar/a100-3.2.1-x86-ubuntu20.04-py3.10-poc-vlm-infer:0.0.1`
## 寒武纪mlu370-X8上视觉理解多模态模型运行测试结果
在mlu370-X8上对部分视觉理解多模态模型进行适配测试方式为在 Nvidia A100 和 mlu370-X8 加速卡上对10个图片相关问题回答获取运行时间
| 模型名称 | 模型类型 | 适配状态 | mlu370-X8运行时间/s | Nvidia A100运行时间/s |
| ---------- | ---------------------- | -------- | ----------------- | --------------------- |
| Gemma3-4BIT | Gemma3 系列 | 成功 | 8.8261 | 5.5634 |
| MiniCPMLlama3V2.5 | openbmb 8B multimodal | 成功 | 14.7240 | 8.2024 |
| MiniCPMV2.6 | MiniCPMV 系列 | 成功 | 9.5498 | 4.3531 |