MiniCPM-o 2.6 是面壁智能推出的新一代端侧全模态模型。该模型MiniCPM-o 是从 MiniCPM-V 升级的最新端侧大模型系列,可以以端到端方式,接受图像、视频、文本、音频作为输入,并生成高质量文本和语音输出。
一、MiniCPM-o 2.6 基础信息简介
1.1 技术架构
端到端全模态架构:将文本、图像、音频等不同类型数据的编码和解码模块统一训练,综合考虑多模态之间的关联性,完全基于交叉熵损失,避免传统多模态模型使用中间损失函数的复杂性;
时分复用全模态流式信息处理机制(OTDM):将同时输入的多模态数据拆分为周期性时间片序列,使模型能按时间顺序处理视觉和音频信息,降低延迟,提升实时性能。
全模态流式骨干网络:负责提取不同模态的数据特征并深度融合,隐藏层设计为语音嵌入以增强语音输出质量,最终通过流式语音解码器生成自然的语音输出。
1.2 功能特性
多模态处理:可同时处理文本、图像、音频和视频等多种数据类型24。
语音功能:支持中英双语语音对话,具备情感、语速、风格控制,以及端到端声音克隆和角色扮演等功能24。
视觉能力:具有强大的视觉记忆和理解能力,如在 “三仙归洞” 游戏中能精确追踪目标位置,在复杂的记忆卡牌游戏中能准确记住每张牌的图案和位置。
多语言支持:支持 30 多种语言。
1.3 性能表现
综合得分高:在 OpenCompass 基准测试中获得 70.2 的平均分,在视觉任务上超越了 GPT-4V24。
语音能力出色:在语音理解方面超越 Qwen2 - Audio 7B,在语音生成方面超越 GLM-4 - Voice 9B,分别在语音理解和生成任务中问鼎开源 SOTA5。
视觉任务领先:在视觉领域是最强端侧视觉通用模型,在 StreamingBench 等榜单上,以实时流式全模态能力比肩 GPT-4o 和 Claude 3.5 Sonnet5。
1.4 应用场景
教育领域:可用于互动学习工具,例如为学生提供实时的多模态学习辅导,通过语音讲解、展示图片或视频等方式帮助学生理解知识。
医疗行业:在医疗影像分析、医患语音交互等方面发挥作用,如帮助医生分析医学影像,同时通过语音与患者沟通病情等。
智能家居:能够实现对家居设备的语音控制和视觉感知,如通过识别用户语音指令来控制家电开关、灯光亮度等,还能通过视觉识别判断家中是否有异常情况。
智能客服:可以作为智能客服系统,通过语音和文字与客户进行交互,快速准确地解答客户问题,提供服务支持。
1.5 开源情况
模型的开源地址已在 GitHub 和 Huggingface 平台发布,供开发者进一步探索和应用。
二、本地部署、环境搭建
本文章面向本地环境搭建进行讲解,主要记录一系列的安装步骤,避免入坑。
2.1 基本准备
习惯于使用windows python环境的同学,可以看过来了:
1. 操作系统:Windows10/11
2. 显卡配置:RTX3090左右,24G运存(最重要的还是显卡,决定推理运行的速度)
3. 安装软件:git,miniconda,Nodejs
2.2 部署模型步骤
部署路径按照:代码拉取,依赖包安装,webdriver编译,代码修改/问题解决 等几个步骤进行。
2.2.1 代码拉取
有Git就用git拉起:git clone https://github.com/OpenBMB/MiniCPM-o.git
没有Git就直接打开网址:https://github.com/OpenBMB/MiniCPM-o.git (ZIP包下载)
cd MiniCPM-o-main
遇到Git网页打不开的情况,可以安装插件Watt Toolkit:具体安装方法Baidu下,免费(勾选,点一键加速)
2.2.2 创建依赖环境
1. 虚拟环境安装并激活
conda create -n MiniCPM-o-main python=3.10
conda activate MiniCPM-o-main
2. 安装pytorch 及其他依赖
conda install pytorch==2.3.1 torchvision==0.18.1 torchaudio==2.3.1 pytorch-cuda=12.1 -c pytorch -c nvidia
pip install -r requirements_o2.6.txt
3. 尝试启动后台服务
cd web_demos/minicpm-o_2.6
python model_server.py
2.2.3 模型文件离线下载
【问题1】python 启动model_server.py模型服务,需要从help="huggingface model name or local path"拉取,要么本地有要么去HF上拉。去huggingface拉取如果遇到SSL证书问题,或者网络不可达等问题,最好是手动下载模型。
【解决1】使用Watt Toolkit 网络加速后,打开网址:Models - Hugging Face
# 修改model_server.py 模型地址(模型有10G+)
model_path ="D:/GitClone/MiniCPM/MiniCPM-o-main/openbmb/MiniCPM-o-2_6"ap.add_argument('--model',type=str ,default=model_path,help="huggingface model name or local path")
2.2.4 启动后台服务
2.2.5 其他异常处理
查阅资料的时候,有细心的小伙伴提到安装模型和加载的过程中可鞥遇到了下面的几个大坑:
【问题2】当你试图启动模型服务的时候,你会遇到这样的错误提示
ImportError:This modeling file requires the following packages that werenotfoundinyourenvironment:flash_attn. Run`pip install flash_attn`
【解决2】正常来说,就是根据提示运行如下命令:
pip install flash_attn
实际上很可能会遇到CUDA需要大于11.7的提示。为了解决这个问题,直接用编译好的文件,执行命令:(我这里有一份windows版编译好的2.6.3版的)
pip install flash_attn-2.6.3-cp310-cp310-win_amd64.whl
这里需要注意要几个点,但凡搞错一个,据说就会痛不欲生:
Python版本为3.10,Torch为2.4.0对应的cuda为cu121
如果问题指向是torch和onnxruntime的问题,请单独安装:
pip install torch==2.4.0 torchvision==0.19.0 torchaudio==2.4.0 --index-url https://download.pytorch.org/whl/cu121
pip install onnxruntime-gpu==1.20.1
【问题3】当你在运行web服务碰到错误代码说缺少key和cert的pem文件,记得用openssl生成一个
【解决3】下载OpenSSL自己生成一个,解决方法可以查看百度
生成私钥(.pem)openssl genpkey -algorithm RSA -out private_key.pem -pkeyopt rsa_keygen_bits:2048
生成自签名证书(.pem)openssl req -new -x509 -key private_key.pem -out self_signed_cert.pem -days 365
2.3 安装Web服务
2.3.1 node.js环境准备
网页服务使用了vue相关技术,需要nodejs环境,如果没有用过,需要先安装nodejs
2.3.2 运行web服务
cd web_demos/minicpm-o_2.6/web_server
npm install -g pnpm
pnpm install # install requirements
pnpm run dev # start server
包括本地local还有不同网络的IP地址。本机测试直接打开local地址,如果局域网其他电脑测试,或者手机测试,可以打开局域网地址。
2.3.2 浏览器选择
本地电脑使用IE/夸克浏览器打开https://localhost:8000/ 机器人聊天功能
本地电脑使用IE/夸克浏览器,打开https://localhost:8088/ 实时语音/视频通话功能
代码调用功能Demo: 可对接服务化接口等
import time
import torch
from PILimport Image
from transformersimport AutoModel, AutoTokenizer
torch.manual_seed(100)
model_path ="./openbmb/MiniCPM-o-2_6"
model = AutoModel.from_pretrained(model_path,trust_remote_code=True,
attn_implementation='sdpa',torch_dtype=torch.bfloat16)# sdpa or flash_attention_2, no eager
model = model.eval().cuda()
tokenizer = AutoTokenizer.from_pretrained(model_path,trust_remote_code=True)
# 记录开始时间
start_time = time.time()
image = Image.open('./demo.png').convert('RGB')
# First round chat
question ="只需要把每一行文本提取给我,每一行文本在图像中的像素坐标bounds要附加上"
msgs = [{'role':'user','content': [image, question]}]
answer = model.chat(
msgs=msgs,
tokenizer=tokenizer
)
print(answer)
三、测试效果
本视频效果仅供参考,切勿转发!
3.1 图像文本提取
3.2 实时语音通话
四、应用交流
4.1 基于图像内容检索的智能体
4.2 基于视频内容理解的智能体
欢迎关注《心灵堂》,期待技术交流!