Ascend-SACT/MiniCPM-o-2_6
模型介绍文件和版本Pull Requests讨论分析
下载使用量0

MiniCPM-o-2_6部署指导

引言

MiniCPM-o 2.6 是一款 8B 参数的端侧全模态模型,性能比肩 GPT-4o,本文记录了该模型的开箱适配过程。它集成视觉、听觉与语音合成能力,在 OpenCompass 和 StreamingBench 等榜单上超越多个闭源模型。

其核心优势包括:领先的视觉理解,支持 180 万像素输入,OCR 能力卓越;先进的实时语音交互,支持中英文、情绪/音色控制和声音克隆;创新的多模态直播,可实时处理音视频流并支持打断。

一、运行环境准备

1、版本配套表

配套版本环境准备指导
Python3.11.14-
torch2.9.0-
torch_npu2.9.0-
vLLM- Ascend0.14.0rc1-
CANN8.5.0-

2、环境准备

整机:Atlas 800T A2

NPU:910B昇腾

部署方式:单卡部署

操作系统:openEuler 22.03 (LTS-SP2), ARM

二、推理服务部署

1、镜像下载

docker pull quay.io/ascend/vllm-ascend:v0.14.0rc1

2、模型下载

mkdir -p /opt/data/models/OpenBMB/MiniCPM-o-2_6
modelscope download --model OpenBMB/MiniCPM-o-2_6  --local_dir /opt/data/models/OpenBMB/MiniCPM-o-2_6

3、启动容器

export IMAGE=quay.io/ascend/vllm-ascend:v0.14.0rc1
docker run --rm \
--name vllm-omni-npu-v14 \
--shm-size=1g \
--device /dev/davinci0 \
--device /dev/davinci_manager \
--device /dev/devmm_svm \
--device /dev/hisi_hdc \
-v /usr/local/dcmi:/usr/local/dcmi \
-v /usr/local/bin/npu-smi:/usr/local/bin/npu-smi \
-v /usr/local/Ascend/driver/lib64/:/usr/local/Ascend/driver/lib64/ \
-v /usr/local/Ascend/driver/version.info:/usr/local/Ascend/driver/version.info \
-v /etc/ascend_install.info:/etc/ascend_install.info \
-v /root/.cache:/root/.cache \
-v /opt/data/models:/opt/data/models \
-it $IMAGE bash

4、安装torchaudio

由于MiniCPM-o-2_6具备语音输入和输出能力的全模态模型,需要使用到torchaudio。如果不安装启动服务时会报如下错误: 缺少torchaudio

安装时需要指定torchaudio的版本,否则默认安装最新的torchaudio,导致和torch\torch_npu版本不匹配

pip install torchaudio==2.9.0

5、启动服务

虽然MiniCPM-o-2_6是一个全模态大模型, 但它 是一个基于 transformers 库构建的端到端全模态理解模型,所以启动时不需要添加--omni选项

vllm serve /opt/data/models/OpenBMB/MiniCPM-o-2_6 --trust-remote-code --port 8091

6、接口调用验证

6.1 文本接口验证

curl http://localhost:8091/v1/chat/completions \
  -H "Content-Type: application/json" \
  -d '{
    "model": "/opt/data/models/OpenBMB/MiniCPM-o-2_6",
    "messages": [
      {"role": "user", "content": "介绍一下北京。"}
    ],
    "max_tokens": 300
  }'

输出示例如下: 文字接口测试

6.2 音频接口验证

使用模型自带的音频文件demo.wav文件进行验证,新建一个名为test_minicpm_audio.py的python文件,文件内容如下:

import requests
import base64

with open("/opt/data/models/OpenBMB/MiniCPM-o-2_6/assets/demo.wav", "rb") as f:
    audio_base64 = base64.b64encode(f.read()).decode()

response = requests.post(
    "http://localhost:8091/v1/chat/completions",
    json={
        "model": "/opt/data/models/OpenBMB/MiniCPM-o-2_6",
        "messages": [
            {
                "role": "user",
                "content": [
                    {"type": "text", "text": "这段音频讲了什么?"},
                    {
                        "type": "audio_url",
                        "audio_url": {"url": f"data:audio/mp3;base64,{audio_base64}"}
                    }
                ]
            }
        ],
        "max_tokens": 300
    }
)
print(response.json())

使用python test_minicpm_audio.py,输出示例如下: 音频接口测试

6.3 视频接口验证

使用模型自带的视频文件Skiing.mp4文件进行验证,新建一个名为test_minicpm_video.py的python文件,文件内容如下:

import requests
import base64

with open("/opt/data/models/OpenBMB/MiniCPM-o-2_6/assets/Skiing.mp4", "rb") as f:
    video_base64 = base64.b64encode(f.read()).decode()

response = requests.post(
    "http://localhost:8091/v1/chat/completions",
    json={
        "model": "/opt/data/models/OpenBMB/MiniCPM-o-2_6",
        "messages": [
            {
                "role": "user",
                "content": [
                    {"type": "text", "text": "这个视频里发生了什么?"},
                    {
                        "type": "video_url",
                        "video_url": {"url": f"data:video/mp4;base64,{video_base64}"}
                    }
                ]
            }
        ],
        "max_tokens": 300
    }
)

print(response.json())

使用python test_minicpm_video.py,输出示例如下: 视频接口测试