MiniCPM-V 2.6 实战解析:8B 参数开源多模态大模型的单图、多图与视频理解能力全指南
【免费下载链接】MiniCPM-VA Pocket-Sized MLLM for Ultra-Efficient Image and Video Understanding on Your Phone项目地址: https://gitcode.com/GitHub_Trending/mi/MiniCPM-V
本指南围绕 MiniCPM-V 系列第三代旗舰模型MiniCPM-V 2.6(2024-08-06 开源)展开,完整解读其 SigLip-400M + Qwen2-7B 的 8B 参数架构、六大核心能力与四组权威评测结果,并基于本仓库源码给出可复现的多轮对话、多图理解、少样本上下文学习、视频理解代码示例,以及 vLLM / llama.cpp / Ollama / int4 量化 / 多 GPU 推理 / Gradio WebUI 等完整部署方案。读完本文,你将掌握如何在本仓库代码基础上快速跑通 MiniCPM-V 2.6 的全部核心用法,并理解其 "Pocket-Sized" 端侧高效设计背后的原理。
模型总览与架构设计
MiniCPM-V 2.6 是 MiniCPM-V 系列中(截至 2025-01-13 归档时)最新、性能最强的模型,其核心架构由三部分组成:
- 视觉编码器:SigLip-400M,负责将图像转换为视觉特征;
- 大语言模型底座:Qwen2-7B,承担文本理解与生成;
- 重采样器(Resampler),负责将视觉特征压缩为更少的视觉 token 输入语言模型,这是 MiniCPM-V 系列一贯的高效设计(仓库中 chat.py 的多 GPU 加载逻辑对
vpm(视觉编码器)、resampler、llm三部分做了显式设备分配,印证了这一模块化结构)。
与上一代 MiniCPM-Llama3-V 2.5 相比,2.6 在性能上显著提升,并首次引入多图理解与视频理解能力。从源码结构看(chat.py 的MiniCPMV2_6类),其推理接口以AutoModel.from_pretrained('openbmb/MiniCPM-V-2_6', trust_remote_code=True)加载,属于典型的 "remote code + transformers" 生态,开发者可以直接复用 Hugging Face / ModelScope 上发布的权重。
六大核心能力亮点
官方文档将 MiniCPM-V 2.6 的能力概括为六个维度:
- 领先的单图性能:在最新版 OpenCompass 榜单(综合 8 个主流多模态评测基准)平均得分 65.2,以 8B 量级在单图理解上超越 GPT-4o mini、GPT-4V、Gemini 1.5 Pro、Claude 3.5 Sonnet 等主流闭源模型。
- 多图理解与上下文学习:支持多图对话与推理,在 Mantis-Eval、BLINK、Mathverse mv、Sciverse mv 等多图基准上取得最佳水平,并展现出优秀的少样本上下文学习(In-Context Learning)能力。
- 视频理解:接受视频输入,可进行对话并提供覆盖时空信息的密集描述;在 Video-MME(有/无字幕)上均超过 GPT-4V、Claude 3.5 Sonnet 与 LLaVA-NeXT-Video-34B。
- 强 OCR 与可信行为:支持任意长宽比、最高 180 万像素(如 1344×1344)的图像;OCRBench 得分超越 GPT-4o、GPT-4V、Gemini 1.5 Pro;基于 RLAIF-V 与 VisCPM 技术,Object HalBench 幻觉率显著低于 GPT-4o/GPT-4V;支持英语、中文、德语、法语、意大利语、韩语等多种语言。
- 卓越的 token 密度:处理 180 万像素图像仅产生640 个视觉 token,比大多数模型少约 75%,直接改善推理速度、首 token 延迟、内存与功耗,可支撑 iPad 等端侧设备上的实时视频理解。
- 易于使用:支持 llama.cpp / Ollama 本地 CPU 推理、int4 与 GGUF 量化(16 种尺寸)、vLLM 高吞吐推理、领域微调、Gradio WebUI Demo 及在线 Demo 六种使用方式。
Token 密度定义:最大分辨率下的像素数 / 视觉 token 数。MiniCPM-V 2.6 在最大分辨率下可达2822(表中标注
+项),远高于多数 34B 级别开源模型(如 LLaVA-NeXT-Yi-34B 为 157)。
性能评测:四组权威基准数据
单图评测(OpenCompass、MME、OCRBench 等 12 项基准)
下表完整列出 MiniCPM-V 2.6 与闭源、开源主流模型的单图对比(带*的项使用思维链 CoT 提示评估,其中 MME 仅对 Cognition 子集使用;+为 Token Density;闭源模型的 Token Density 按其 API 计费方式估算,属上界估计):
| Model | Size | Token Density | OpenCompass | MME | MMVet | OCRBench | MMMU val | MathVista mini | MMB1.1 test | AI2D | TextVQA val | DocVQA test | HallusionBench | Object HalBench |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| GPT-4o | - | 1088 | 69.9 | 2328.7 | 69.1 | 736 | 69.2 | 61.3 | 82.2 | 84.6 | - | 92.8 | 55.0 | 17.6 |
| Claude 3.5 Sonnet | - | 750 | 67.9 | 1920.0 | 66.0 | 788 | 65.9 | 61.6 | 78.5 | 80.2 | - | 95.2 | 49.9 | 13.8 |
| Gemini 1.5 Pro | - | - | 64.4 | 2110.6 | 64.0 | 754 | 60.6 | 57.7 | 73.9 | 79.1 | 73.5 | 86.5 | 45.6 | - |
| GPT-4o mini | - | 1088 | 64.1 | 2003.4 | 66.9 | 785 | 60.0 | 52.4 | 76.0 | 77.8 | - | - | 46.1 | 12.4 |
| GPT-4V | - | 1088 | 63.5 | 2070.2 | 67.5 | 656 | 61.7 | 54.7 | 79.8 | 78.6 | 78.0 | 87.2 | 43.9 | 14.2 |
| Step-1V | - | - | 59.5 | 2206.4 | 63.3 | 625 | 49.9 | 44.8 | 78.0 | 79.2 | 71.6 | - | 48.4 | - |
| Qwen-VL-Max | - | 784 | 58.3 | 2281.7 | 61.8 | 684 | 52.0 | 43.4 | 74.6 | 75.7 | 79.5 | 93.1 | 41.2 | 13.4 |
| LLaVA-NeXT-Yi-34B | 34B | 157 | 55.0 | 2006.5 | 50.7 | 574 | 48.8 | 40.4 | 77.8 | 78.9 | 69.3 | - | 34.8 | 12.6 |
| Mini-Gemini-HD-34B | 34B | 157 | - | 2141.0 | 59.3 | 518 | 48.0 | 43.3 | - | 80.5 | 74.1 | 78.9 | - | - |
| Cambrian-34B | 34B | 1820 | 58.3 | 2049.9 | 53.2 | 591 | 50.4 | 50.3 | 77.8 | 79.5 | 76.7 | 75.5 | 41.6 | 14.7 |
| GLM-4V-9B | 13B | 784 | 59.1 | 2018.8 | 58.0 | 776 | 46.9 | 51.1 | 67.9 | 71.2 | - | - | 45.0 | - |
| InternVL2-8B | 8B | 706 | 64.1 | 2215.1 | 54.3 | 794 | 51.2 | 58.3 | 79.4 | 83.6 | 77.4 | 91.6 | 45.0 | 21.3 |
| MiniCPM-Llama-V 2.5 | 8B | 1882 | 58.8 | 2024.6 | 52.8 | 725 | 45.8 | 54.3 | 72.0 | 78.4 | 76.6 | 84.8 | 42.4 | 10.3 |
| MiniCPM-V 2.6 | 8B | 2822 | 65.2 | 2348.4* | 60.0 | 852* | 49.8* | 60.6 | 78.0 | 82.1 | 80.1 | 90.8 | 48.1* | 8.2 |
多图评测(Mantis-Eval、BLINK、Mathverse mv、Sciverse mv、MIRB)
| Model | Size | Mantis Eval | BLINK val | Mathverse mv | Sciverse mv | MIRB |
|---|---|---|---|---|---|---|
| GPT-4V | - | 62.7 | 54.6 | 60.3 | 66.9 | 53.1 |
| LLaVA-NeXT-Interleave-14B | 14B | 66.4 | 52.6 | 32.7 | 30.2 | - |
| Emu2-Chat | 37B | 37.8 | 36.2 | - | 27.2 | - |
| CogVLM | 17B | 45.2 | 41.1 | - | - | - |
| VPG-C | 7B | 52.4 | 43.1 | 24.3 | 23.1 | - |
| VILA 8B | 8B | 51.2 | 39.3 | - | 36.5 | - |
| InternLM-XComposer-2.5 | 8B | 53.1* | 48.9 | 32.1* | - | 42.5 |
| InternVL2-8B | 8B | 59.0* | 50.9 | 30.5* | 34.4* | 56.9* |
| MiniCPM-V 2.6 | 8B | 69.1 | 53.0 | 84.9 | 74.9 | 53.8 |
(带*项为作者对官方发布权重自行评测的结果。)
视频评测(Video-MME 与 Video-ChatGPT 五维度)
| Model | Size | Video-MME w/o subs | Video-MME w subs | Correctness | Detail | Context | Temporal | Consistency |
|---|---|---|---|---|---|---|---|---|
| Claude 3.5 Sonnet | - | 60.0 | 62.9 | - | - | - | - | - |
| GPT-4V | - | 59.9 | 63.3 | - | - | - | - | - |
| LLaVA-NeXT-7B | 7B | - | - | 3.39 | 3.29 | 3.92 | 2.60 | 3.12 |
| LLaVA-NeXT-34B | 34B | - | - | 3.29 | 3.23 | 3.83 | 2.51 | 3.47 |
| CogVLM2-Video | 12B | - | - | 3.49 | 3.46 | 3.23 | 2.98 | 3.64 |
| LongVA | 7B | 52.4 | 54.3 | 3.05 | 3.09 | 3.77 | 2.44 | 3.64 |
| InternVL2-8B | 8B | 54.0 | 56.9 | - | - | - | - | - |
| InternLM-XComposer-2.5 | 8B | 55.8 | - | - | - | - | - | - |
| LLaVA-NeXT-Video | 32B | 60.2 | 63.0 | 3.48 | 3.37 | 3.95 | 2.64 | 3.28 |
| MiniCPM-V 2.6 | 8B | 60.9 | 63.6 | 3.59 | 3.28 | 3.93 | 2.73 | 3.62 |
少样本上下文学习(TextVQA、VizWiz、VQAv2、OK-VQA)
下表对比 Flamingo(80B)、IDEFICS(80B)、OmniCorpus(7B)、Emu2(37B)、MM1(30B)与 MiniCPM-V 2.6(8B)在不同 shot 下的表现(*表示按 Flamingo 方式使用 0 张图像样本 + 2 个额外文本样本;+表示使用未经 SFT 的预训练权重评测):
| Model | Size | Shot | TextVQA val | VizWiz test-dev | VQAv2 test-dev | OK-VQA val |
|---|---|---|---|---|---|---|
| Flamingo | 80B | 0* | 35.0 | 31.6 | 56.3 | 40.6 |
| Flamingo | 80B | 4 | 36.5 | 39.6 | 63.1 | 57.4 |
| Flamingo | 80B | 8 | 37.3 | 44.8 | 65.6 | 57.5 |
| IDEFICS | 80B | 0* | 30.9 | 36.0 | 60.0 | 45.2 |
| IDEFICS | 80B | 4 | 34.3 | 40.4 | 63.6 | 52.4 |
| IDEFICS | 80B | 8 | 35.7 | 46.1 | 64.8 | 55.1 |
| OmniCorpus | 7B | 0* | 43.0 | 49.8 | 63.2 | 45.5 |
| OmniCorpus | 7B | 4 | 45.4 | 51.3 | 64.5 | 46.5 |
| OmniCorpus | 7B | 8 | 45.6 | 52.2 | 64.7 | 46.6 |
| Emu2 | 37B | 0 | 26.4 | 40.4 | 33.5 | 26.7 |
| Emu2 | 37B | 4 | 48.2 | 54.6 | 67.0 | 53.2 |
| Emu2 | 37B | 8 | 49.3 | 54.7 | 67.8 | 54.1 |
| MM1 | 30B | 0 | 26.2 | 40.4 | 48.9 | 26.7 |
| MM1 | 30B | 8 | 49.3 | 54.7 | 70.9 | 54.1 |
| MiniCPM-V 2.6+ | 8B | 0 | 43.9 | 33.8 | 45.4 | 23.9 |
| MiniCPM-V 2.6+ | 8B | 4 | 63.6 | 60.5 | 65.5 | 50.1 |
| MiniCPM-V 2.6+ | 8B | 8 | 64.6 | 63.4 | 68.2 | 51.4 |
从上述数据可以看出,MiniCPM-V 2.6 的核心亮点在于:以 8B 参数在单图、多图、视频三大任务上都追平甚至超过 34B/80B 级模型与闭源旗舰,同时保持极高的视觉 token 密度(2822,即每 token 编码更多像素),是"小尺寸 + 高性能 + 高吞吐"的典型代表。仓库根目录的 assets/radar_final.png 以雷达图形式直观展示了其综合能力分布。
环境准备与模型加载
MiniCPM-V 2.6 通过transformers的AutoModel+trust_remote_code=True加载,视觉/语言模块由仓库 remote code 提供。推荐使用 NVIDIA GPU(CUDA)或 Apple Silicon(MPS)环境,加载时建议:
model = AutoModel.from_pretrained('openbmb/MiniCPM-V-2_6', trust_remote_code=True, attn_implementation='sdpa', torch_dtype=torch.bfloat16) # sdpa 或 flash_attention_2,不支持 eagerattn_implementation可选sdpa或flash_attention_2(需安装 flash-attn),以获得内存与速度收益;- 官方 Demo(web_demos/web_demo_2.6.py)在普通单卡场景使用
torch.bfloat16加载,在int4量化路径下则不额外指定attn_implementation(int4 权重通过 bitsandbytes 加载); - 视频理解需要额外安装
decord(pip install decord)。
实战一:多轮对话(Multi-turn Conversation)
以下代码来自官方文档,演示单图 + 多轮追问的完整流程,测试图片为仓库内的 assets/airplane.jpeg:
import torch from PIL import Image from transformers import AutoModel, AutoTokenizer torch.manual_seed(0) model = AutoModel.from_pretrained('openbmb/MiniCPM-V-2_6', 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('openbmb/MiniCPM-V-2_6', trust_remote_code=True) image = Image.open('./assets/airplane.jpeg').convert('RGB') # 第一轮对话 question = "Tell me the model of this aircraft." msgs = [{'role': 'user', 'content': [image, question]}] answer = model.chat( image=None, msgs=msgs, tokenizer=tokenizer ) print(answer) # 第二轮对话:将历史上下文追加进 msgs,形成多轮上下文 msgs.append({"role": "assistant", "content": [answer]}) msgs.append({"role": "user", "content": ["Introduce something about Airbus A380."]}) answer = model.chat( image=None, msgs=msgs, tokenizer=tokenizer ) print(answer)运行后第一轮输出大致为:
"The aircraft in the image is an Airbus A380, which can be identified by its large size, double-deck structure, and the distinctive shape of its wings and engines. ..."第二轮则能在保持图像上下文的同时回答关于 A380 的延伸知识。注意两点:多轮对话时msgs中累积user/assistant历史即可保持上下文;model.chat(image=None, msgs=msgs, ...)中图像直接嵌入msgs的content列表,image参数置None即可(这是 2.6 的统一接口约定,与 2.5 传image=的旧接口不同,见 chat.py 中MiniCPMV2_6对两种消息格式的兼容处理)。
实战二:多图理解(Multi-image Understanding)
多图理解是 2.6 相对 2.5 的全新能力:只需把多张PIL.Image顺序放入一条 user 消息的content列表,模型即可跨图对比、推理:
import torch from PIL import Image from transformers import AutoModel, AutoTokenizer model = AutoModel.from_pretrained('openbmb/MiniCPM-V-2_6', 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('openbmb/MiniCPM-V-2_6', trust_remote_code=True) image1 = Image.open('image1.jpg').convert('RGB') image2 = Image.open('image2.jpg').convert('RGB') question = 'Compare image 1 and image 2, tell me about the differences between image 1 and image 2.' msgs = [{'role': 'user', 'content': [image1, image2, question]}] answer = model.chat( image=None, msgs=msgs, tokenizer=tokenizer ) print(answer)官方展示的多图场景(如对比两辆自行车细节、对照菜单点餐、阅读多段代码)可参见仓库示例图 assets/minicpmv2_6/multi_img-bike.png、assets/minicpmv2_6/multi_img-menu.png 与 assets/minicpmv2_6/multi_img-code.png。从 WebUI 源码(web_demos/web_demo_2.6.py)可见,多图对话在服务端同样被组织为单条 user 消息的多元素content,与上述 Python API 完全一致。
实战三:少样本上下文学习(Few-shot In-Context Learning)
2.6 的 ICL 能力使其能在不微调的情况下,仅凭几组"图像-答案"演示样本学会新任务。以下示例教会模型从图像中提取"生产日期"字段:
import torch from PIL import Image from transformers import AutoModel, AutoTokenizer model = AutoModel.from_pretrained('openbmb/MiniCPM-V-2_6', 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('openbmb/MiniCPM-V-2_6', trust_remote_code=True) question = "production date" image1 = Image.open('example1.jpg').convert('RGB') answer1 = "2023.08.04" image2 = Image.open('example2.jpg').convert('RGB') answer2 = "2007.04.24" image_test = Image.open('test.jpg').convert('RGB') # 交替插入 (图像, 答案) 演示对,最后给出测试图像 msgs = [ {'role': 'user', 'content': [image1, question]}, {'role': 'assistant', 'content': [answer1]}, {'role': 'user', 'content': [image2, question]}, {'role': 'assistant', 'content': [answer2]}, {'role': 'user', 'content': [image_test, question]} ] answer = model.chat( image=None, msgs=msgs, tokenizer=tokenizer ) print(answer)仓库中的 ICL 示例图 assets/minicpmv2_6/ICL-Mem.png、assets/minicpmv2_6/ICL-elec.png 展示了该能力在更多领域的应用;WebUI 的 "Few Shot" 标签页(web_demos/web_demo_2.6.py)正是对这一流程的图形化封装,支持逐条添加演示样本后再生成。
实战四:视频理解(Video Understanding)
视频输入通过decord解码为均匀采样的帧序列,再按多图方式送入模型。关键参数是MAX_NUM_FRAMES(默认 64,显存不足时调小)与解码参数use_image_id=False、max_slice_nums=2:
import torch from PIL import Image from transformers import AutoModel, AutoTokenizer from decord import VideoReader, cpu # pip install decord model = AutoModel.from_pretrained('openbmb/MiniCPM-V-2_6', 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('openbmb/MiniCPM-V-2_6', trust_remote_code=True) MAX_NUM_FRAMES=64 # if cuda OOM set a smaller number def encode_video(video_path): def uniform_sample(l, n): gap = len(l) / n idxs = [int(i * gap + gap / 2) for i in range(n)] return [l[i] for i in idxs] vr = VideoReader(video_path, ctx=cpu(0)) sample_fps = round(vr.get_avg_fps() / 1) # FPS,按 1 秒 1 帧采样 frame_idx = [i for i in range(0, len(vr), sample_fps)] if len(frame_idx) > MAX_NUM_FRAMES: frame_idx = uniform_sample(frame_idx, MAX_NUM_FRAMES) frames = vr.get_batch(frame_idx).asnumpy() frames = [Image.fromarray(v.astype('uint8')) for v in frames] print('num frames:', len(frames)) return frames video_path="video_test.mp4" frames = encode_video(video_path) question = "Describe the video" msgs = [ {'role': 'user', 'content': frames + [question]}, ] # 视频解码参数 params = {} params["use_image_id"] = False params["max_slice_nums"] = 2 # 如果 cuda OOM 且视频分辨率大于 448x448 可设为 1 answer = model.chat( image=None, msgs=msgs, tokenizer=tokenizer, **params ) print(answer)参数含义与源码印证:
use_image_id:是否在视觉 token 前插入图像 ID 标记。视频场景建议False(官方文档与 WebUI 均如此设置);max_slice_nums:单帧最大切块数,控制高分辨率帧的切片编码数量,2为默认,显存不足且分辨率高于 448×448 时可降为1;- WebUI 实现(web_demos/web_demo_2.6.py)在视频场景还会设置
max_inp_length = 4352(即 4096 + 256,为视频帧预留上下文),并根据已积累帧数是否超过 16 自动切换max_slice_nums为 1 或 2,可作为显存调优的参考; - 官方演示在 iPad Pro 上以原始屏幕录制运行实时视频理解(见 assets/gif_cases/ai.gif、assets/gif_cases/beer.gif、assets/gif_cases/ticket.gif、assets/gif_cases/wfh.gif 等端侧实机演示动图),这得益于其 640 token / 180 万像素的超高 token 密度设计。
部署方案一:vLLM 高吞吐推理
官方文档明确声明 MiniCPM-V 2.6 支持vLLM,用于高吞吐、内存高效的批量推理(尤其适合服务化部署)。仓库 README.md 的发布记录确认了 vLLM 生态的持续跟进(2.0/2.5 时代已接入,2.6 在发布即获得 vLLM 支持)。具体启动命令随 vLLM 版本演进而变化,建议以当时官方 vLLM 对 MiniCPM-V 2.6 的支持文档为准;加载权重路径同样使用openbmb/MiniCPM-V-2_6(或本地下载后的目录)。需要说明的是:本仓库当前 README 中给出的vllm serve示例针对更新的 MiniCPM-V 4.5 / MiniCPM-o 4.5 模型,2.6 部署时请以 2.6 发布时的 vLLM 版本说明为准。
部署方案二:llama.cpp 与 Ollama CPU 推理
- llama.cpp:官方支持在本地设备上进行高效的 CPU 推理(MiniCPM-V 2.6 于 2024-08-17 被官方 llama.cpp 完全支持),配合 GGUF 量化模型使用;
- Ollama:通过 OpenBMB 维护的 Ollama 分支 / 官方仓库一键拉取运行,适合桌面端快速体验;
- 量化模型:官方提供int4(GPU 上约 7GB 显存)与GGUF(CPU 上约 6GB 内存)两种量化格式、共 16 种尺寸,覆盖从低端 CPU 到中端 GPU 的部署场景,具体见下文"模型库"表格。
部署方案三:多 GPU 推理(源码级解析)
当单卡显存不足(如双卡各 10GB)时,仓库在 chat.py 与 web_demos/web_demo_2.6.py 中提供了基于accelerate的多卡切分方案,核心要点如下:
- 先用
init_empty_weights()以空权重实例化模型,再通过infer_auto_device_map自动生成设备映射,no_split_module_classes指定不可切分的模块类['SiglipVisionTransformer', 'Qwen2DecoderLayer']; - 首尾层同卡约束:
llm.lm_head必须与llm.model.embed_tokens放到同一张卡;视觉编码器vpm与resampler也归入首卡; - 层级手工均衡:示例代码将
llm.model.layers.8~16这批中间层显式映射到第二张卡(以llm.model.layers.26所在设备为锚点),以平衡两卡负载; - 最后用
load_checkpoint_and_dispatch(model, model_path, dtype=torch.bfloat16, device_map=device_map)加载权重并分发。
该切分逻辑同样被 web_demos/web_demo_2.6.py 的
--multi-gpus命令行参数复用,说明官方 Demo 原生支持双卡(各 10GB)运行。
部署方案四:Gradio WebUI Demo(单图/多图/视频/Few-Shot 一站式体验)
仓库为 2.6 提供了开箱即用的 Gradio WebUI(web_demos/web_demo_2.6.py),支持四种交互模式:单图对话、多图对话、视频对话、少样本上下文学习。启动方式:
# NVIDIA GPU python web_demos/web_demo_2.6.py --device cuda # Apple Silicon / AMD GPU(Mac,MPS) PYTORCH_ENABLE_MPS_FALLBACK=1 python web_demos/web_demo_2.6.py --device mps # 双卡各 10GB 显存 python web_demos/web_demo_2.6.py --device cuda --multi-gpus其内置解码参数(web_demos/web_demo_2.6.py)非常值得在自定义调用时借鉴:
| 解码方式 | 参数 | 说明 |
|---|---|---|
| Beam Search | sampling=False, num_beams=3, repetition_penalty=1.2, max_new_tokens=2048 | 确定性更强的束搜索 |
| Sampling | sampling=True, top_p=0.8, top_k=100, temperature=0.7, repetition_penalty=1.05, max_new_tokens=2048 | 默认推荐的随机采样 |
此外 WebUI 还在视频场景下自动叠加max_inp_length=4352、use_image_id=False、max_slice_nums动态调节逻辑,并支持 Regenerate(重新生成)与 Clear History(清空历史)。如果你需要把 2.6 封装成 HTTP 服务,chat.py 的MiniCPMV2_6类已实现基于 base64 图像 + JSON 消息的接口约定,可直接作为服务端核心复用。
模型库(Model Zoo)
| 模型 | 设备 | 资源 | 简介 | 下载 |
|---|---|---|---|---|
| MiniCPM-V 2.6 | GPU | 17 GB | 端侧单图、多图、视频理解全能模型 | Hugging Face:openbmb/MiniCPM-V-2_6;ModelScope:OpenBMB/MiniCPM-V-2_6 |
| MiniCPM-V 2.6 gguf | CPU | 6 GB | GGUF 量化版,更低内存占用、更高推理效率 | Hugging Face:openbmb/MiniCPM-V-2_6-gguf;ModelScope:OpenBMB/MiniCPM-V-2_6-gguf |
| MiniCPM-V 2.6 int4 | GPU | 7 GB | int4 量化版,更低显存占用 | Hugging Face:openbmb/MiniCPM-V-2_6-int4;ModelScope:OpenBMB/MiniCPM-V-2_6-int4 |
选择建议:单卡 24GB 以上直接跑 bfloat16 原版;显存紧张(8~16GB)优先 int4;无 GPU 环境用 GGUF + llama.cpp/Ollama。注意 int4 版本在 Mac(MPS)上因 bitsandbytes 不支持而无法运行(见 web_demos/web_demo_2.6.py)。
微调与生态
- SWIFT:官方宣布 MiniCPM-V 2.6 支持基于 ms-swift 框架微调,仓库提供对应文档 docs/swift_train_and_infer.md,可针对新领域/任务做 LoRA 或全参微调;
- LLaMA-Factory:仓库提供 docs/llamafactory_train_and_infer.md 说明用 LLaMA-Factory 完成训练与推理对接;
- 仓库自带 finetune 脚本:
finetune/目录(finetune/finetune.py、finetune/trainer.py、finetune/dataset.py)提供完整微调管线,内置 ZeRO-2/ZeRO-3 配置(ds_config_zero2.json/ds_config_zero3.json)与 LoRA 启动脚本 finetune/finetune_lora.sh,其设计与 MiniCPM-V 系列一脉相承,可作为理解 2.6 微调流程的参考(具体超参与数据集格式以对应文档为准)。
模型权重与代码均以 Apache-2.0 协议开源。如需在本地复现本仓库的 Demo 与推理脚本,可先获取仓库代码(
git clone https://gitcode.com/GitHub_Trending/mi/MiniCPM-V),再按上文各节命令运行;依赖清单见 requirements.txt。
总结
MiniCPM-V 2.6 是"小模型、大能力"路线的代表作:8B 参数在 OpenCompass(65.2)、OCRBench(852)、MME(2348.4)等关键基准上对标甚至超越闭源旗舰;多图对比、少样本 ICL、视频理解三大新能力均处于开源第一梯队;而 640 token / 180 万像素的超高 token 密度使其能真正跑进 iPad 等端侧设备。配合本仓库提供的多 GPU 切分、Gradio WebUI、vLLM/llama.cpp/Ollama 生态与量化版本,开发者从个人电脑到服务端、从单卡到多卡都能找到合适的落地路径。若需查阅更多能力展示与多图/视频案例,可浏览 assets/minicpmv2_6 目录下的官方示例图集。
【免费下载链接】MiniCPM-VA Pocket-Sized MLLM for Ultra-Efficient Image and Video Understanding on Your Phone项目地址: https://gitcode.com/GitHub_Trending/mi/MiniCPM-V
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考