- 人工智能
- 大模型
- 多模态
- 基础模型
- 本地部署
【免费下载链接】MiniCPM-V-4.7-35B-A3B
MiniCPM-V 4.7 是 MiniCPM-V 系列的最新模型,提供 35B-A3B 变体,其中 35B-A3B 是 MiniCPM-V 系列中的首个 MoE(混合专家)模型。它在家族现有的单图、多图和视频理解能力基础上,结合了更强的基础能力、高效的视觉编码以及端侧推理特性。
MiniCPM-V 4.7(35B-A3B)是 MiniCPM-V 系列最新的开源视觉语言大模型,也是该系列首个 MoE(混合专家)模型,支持单图、多图与视频理解。本教程面向新手,带你逐行读懂用 Python 调用 MiniCPM-V 4.7 做图像问答的完整代码,从环境安装、模型加载,到单图提问、多图对比聊天,一次讲透核心参数。
为什么选择 MiniCPM-V 4.7 35B-A3B 🤔
在动手写代码之前,先快速了解这个模型的特点,帮助你判断它是否适合你的场景:
- MoE 架构:总参数约 35B,但每个 token 只激活约 3B 参数,速度快、显存占用低;
- 图像问答能力强:单图识别、多图对比、OCR、视觉定位等任务开箱即用;
- 高效视觉编码:支持
4x/16x混合视觉 token 压缩,在"细节"与"速度"之间自由权衡; - 端侧可运行:是首个可在手机上无损流畅推理的开源 MoE 模型。
模型结构细节可以在 config.json 中查看,例如num_experts: 256、num_experts_per_tok: 8就直观体现了 MoE 路由设计;默认视觉压缩档位downsample_mode: "16x"也定义在这里。
环境安装:一条命令完成 📦
确保你的 Python 环境已安装 PyTorch,然后执行:
pip install "transformers[torch]>=5.18.0" torchvision torchcodec⚠️新手常见坑:
torchcodec在部分 CUDA 版本下会报错RuntimeError: Could not load libtorchcodec。如果你只做图像问答(不涉及视频),最简单的解决办法是把torchcodec换成av:pip install "transformers[torch]>=5.18.0" torchvision av
第一步:加载模型(逐行精讲)
import torch from transformers import AutoModelForImageTextToText, AutoProcessor model_id = "openbmb/MiniCPM-V-4.7-35B-A3B" processor = AutoProcessor.from_pretrained(model_id) model = AutoModelForImageTextToText.from_pretrained( model_id, torch_dtype="auto", device_map="auto" )逐行拆解:
| 代码 | 作用 |
|---|---|
AutoProcessor | 负责把图片 + 文本"打包"成模型能理解的输入(分词、图像编码) |
AutoModelForImageTextToText | 自动识别并加载"图像输入 → 文本输出"类的模型 |
torch_dtype="auto" | 自动选择最优精度(本模型原生为 bfloat16,见 config.json 的"dtype"字段) |
device_map="auto" | 自动把模型分发到可用的 GPU 上,多卡环境无需手动配置 |
💡 多图、高分辨率场景下建议开启 Flash Attention 2 以获得更低的显存占用:加载时额外传入
attn_implementation="flash_attention_2"。
第二步:单图问答代码逐行精讲 🖼️
下面是最核心的单图问答代码,我们逐行讲清楚:
messages = [ { "role": "user", "content": [ {"type": "image", "url": "https://huggingface.co/datasets/openbmb/DemoCase/resolve/main/refract.png"}, {"type": "text", "text": "What causes this phenomenon?"}, ], } ] downsample_mode = "16x" inputs = processor.apply_chat_template( messages, tokenize=True, add_generation_prompt=True, return_dict=True, return_tensors="pt", downsample_mode=downsample_mode, max_slice_nums=36, enable_thinking=False, ).to(model.device) generated_ids = model.generate(**inputs, downsample_mode=downsample_mode, max_new_tokens=512) generated_ids_trimmed = [ out_ids[len(in_ids):] for in_ids, out_ids in zip(inputs.input_ids, generated_ids) ] output_text = processor.batch_decode( generated_ids_trimmed, skip_special_tokens=True, clean_up_tokenization_spaces=False ) print(output_text[0])关键代码逐行解读
1)构造消息messages
消息结构与 ChatGPT 完全一致:role是角色,content是一个列表,每一项要么是image(图片 URL 或本地路径),要么是text(文字问题)。多图的写法就是在 content 里放多个 image 项(下文详述)。
2)downsample_mode:细节与速度的开关
"16x":视觉 token 压缩 16 倍,速度快、显存省,适合大多数问答;"4x":保留 4 倍更多的 token,文字识别、细节观察更准,但更慢。
⚠️最容易踩的坑:downsample_mode必须同时传给apply_chat_template和model.generate,两者不一致会导致占位符数量对不上而报错。
3)max_slice_nums=36:高分辨率图片的切片数
大图片会被切成多个小块分别编码,max_slice_nums限制最大切片数。图像问答建议设36(视频场景则用1)。
4)enable_thinking=False:关掉思考模式
本模型支持"思考链"模式,简单图像问答时关掉它可以让回答更直接、速度更快。该参数的渲染逻辑定义在 chat_template.jinja 中。
5)model.generate(..., max_new_tokens=512)
让模型生成回答,max_new_tokens限制最多生成 512 个 token,防止"话痨"。
6)裁剪输入前缀 + 解码输出
generated_ids包含"输入 + 输出"的全部 token,所以用out_ids[len(in_ids):]切掉输入部分,再交给processor.batch_decode还原成文字。这一步是新手最容易漏掉的,漏了就会看到一大段重复的输入文本。
第三步:多图聊天(Multi-Image Chat)📸
MiniCPM-V 4.7 支持在一条消息里放入多张图片做对比、找不同、跨图推理,改动只有两处:
messages = [ { "role": "user", "content": [ {"type": "image", "url": "path/to/photo_a.jpg"}, {"type": "image", "url": "path/to/photo_b.jpg"}, {"type": "text", "text": "Compare the differences between these two images."}, ], } ]多图场景的参数注意事项
| 参数 | 建议值 | 说明 |
|---|---|---|
downsample_mode | "4x" | 多图对比通常需要更多细节,用 4 倍保留率效果更好 |
max_slice_nums | 36 | 每张图独立切片,切片数上限建议保持较高 |
use_image_id | True(默认) | 在每张图片前插入<image_id>N</image_id>标签,让模型明确"图1/图2"的指代关系 |
💡 提示:
use_image_id=True时,模型回答里可以直接说"第一张图中……第二张图中……",多图指代更清晰;而视频场景反而建议设为False。
多轮对话:接着聊,图片记忆还在 🔄
多轮对话时,只需把历史消息按顺序追加进messages列表即可——上一轮的图片和回答都保留在上下文里:
# 第一轮:用户提问 + 模型回答(assistant 消息是上一轮生成结果) # 第二轮:直接在 messages 末尾追加新的 user 消息 messages.append( {"role": "user", "content": [{"type": "text", "text": "再仔细看一下左边那张图的细节"}]} ) # 重新执行 apply_chat_template + generate 即可常用参数速查表 ⚡
| 参数 | 默认值 | 适用 | 新手建议 |
|---|---|---|---|
downsample_mode | "16x" | 图像/视频 | 追求细节改"4x";注意两处都要传 |
max_slice_nums | 9 | 图像/视频 | 图像问答建议36 |
max_num_frames | 128 | 仅视频 | 视频采样帧数上限 |
stack_frames | 1 | 仅视频 | 视频建议3或5捕捉动作细节 |
use_image_id | True | 图像/视频 | 图像保持True;视频用False |
下一步可以做什么 🚀
- 视频理解:把
image换成type: "video"即可复用同一套代码; - 量化部署:显存不足时可下载 FP8 / AWQ / GPTQ / GGUF 量化版;
- 模型文件结构:16 个分片权重由 model.safetensors.index.json 统一索引,总大小约 70GB(BF16 全精度);
- 推理默认策略:采样参数(
temperature: 1.0、top_k: 20、top_p: 0.95)定义在 generation_config.json 中,一般无需修改。
掌握以上三步,你就已经能流畅使用 MiniCPM-V 4.7 完成单图问答与多图聊天了——动手跑一遍,效果超出预期 💪
- 人工智能
- 大模型
- 多模态
- 基础模型
- 本地部署
【免费下载链接】MiniCPM-V-4.7-35B-A3B
MiniCPM-V 4.7 是 MiniCPM-V 系列的最新模型,提供 35B-A3B 变体,其中 35B-A3B 是 MiniCPM-V 系列中的首个 MoE(混合专家)模型。它在家族现有的单图、多图和视频理解能力基础上,结合了更强的基础能力、高效的视觉编码以及端侧推理特性。
相关推荐
3行代码搞定图像分类!MiniCPM-V微调实战指南
3行代码搞定图像分类!MiniCPM V微调实战指南 你是否还在为端侧设备上的图像分类模型效果差、部署难而烦恼?本文将带你使用MiniCPM V模型,通过简单三
人工智能大模型多模态计算机视觉NLP微调openBMBRPCS3:5步在PC上跑通PS3老游戏
RPCS3:5步在PC上跑通PS3老游戏 RPCS3 是一个免费开源的 PlayStation 3 模拟器兼调试器,用 C++ 编写,支持 Windows、Li
虚拟化图形学调试器GraphvizOnline:让图表创作像聊天一样简单
还在为复杂的图表软件头疼吗?GraphvizOnline来拯救你了!这是一款让你在浏览器里就能画出专业级图表的在线工具,简单到连你家猫都能学会(开玩笑的,但真的
前端开发工具
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考