- 大模型
- 多模态
- 模型量化
- 本地部署
- openBMB
【免费下载链接】MiniCPM-V-4.7-35B-A3B-FP8
MiniCPM-V 4.7-35B-A3B-FP8 是 OpenBMB 开源多模态大模型 MiniCPM-V 4.7(35B-A3B 版本)的官方FP8 量化版,原生支持单图、多图与视频理解。本文围绕视频理解,完整拆解三个核心玩法:关键帧采样(max_num_frames)、帧堆叠(stack_frames)与时序描述提示词,帮你快速让模型"看懂"视频并按时间线讲出内容。
一、先认识这位"会看视频"的模型 🎬
在动手之前,花 1 分钟了解仓库里的几个关键文件,有助于理解视频能力从何而来:
| 文件 | 作用 |
|---|---|
| README.md | 模型说明、视频推理示例、全部可调参数表 |
| config.json | 模型结构配置,含video_token_id、MoE 专家数等 |
| processor_config.json | 定义了专用的视频处理器MiniCPMV4_7VideoProcessor |
| recipe.yaml | FP8 量化配方(FP8_DYNAMIC方案) |
| generation_config.json | 生成时默认采样参数 |
三个值得新手记住的"底细":
- MoE 架构,省资源:总参数 35B,但每个 token 只激活约 3B 参数(256 个专家、每 token 选 8 个),视频这种"帧多、token 多"的场景推理成本可控;
- FP8 量化:相比 BF16 原版,权重占用更小、加载更快,视频长序列更不容易爆显存;
- 视觉编码高效:支持 4x/16x 混合视觉 token 压缩,视觉编码器内部提前压缩 token,减少后续计算量。
二、关键帧采样:视频太长怎么办?🎞️
视频动辄几百上千帧,模型不可能逐帧"看完",所以要采样:从整段视频中均匀抽出若干"关键帧"交给模型。
核心参数是max_num_frames(仅视频场景生效):
max_num_frames:从视频中采样的主帧数上限,默认 128。
几个使用建议:
- 默认值通常够用:对 1 分钟以内的视频,128 帧采样密度已经足够捕捉主要动作;
- 超长视频可适当调大
max_num_frames,但帧数越多,显存与耗时越高; - 搭配
downsample_mode控制细节:"16x"(默认):token 合并压缩,速度快、省显存,适合大多数视频任务;"4x":保留 4 倍 token,细节更清晰,适合需要读屏上文字的场景。- 注意:
downsample_mode必须同时传给apply_chat_template和model.generate,二者缺一不可;
- 视频场景两个小开关(官方推荐):
max_slice_nums=1(高分辨率切片数,视频场景建议设为 1)、use_image_id=False(关闭每帧的图片编号标签)。
三、帧堆叠 stack_frames:用"九宫格"补足时间分辨率 🧩
均匀采样的主帧之间,动作细节可能被"跳帧"丢掉。stack_frames参数就是来解决这个问题的:
stack_frames=1(默认):每秒只取 1 个主帧,不堆叠;stack_frames=N(N>1):每秒取1 个主帧 + N−1 个子帧,子帧被拼成一张网格图(类似九宫格小图),与主帧交替输入给模型。
可以这样理解:主帧是"故事主线",堆叠的子帧网格是"补充镜头",让模型在不显著增加序列长度的前提下,感知到更细的时间变化(比如快速手部动作、按钮切换)。
💡 官方推荐值:
stack_frames=3或5。短视频、动作密集的场景用 5;长视频、算力紧张时用 3。
四、动手实操:三步跑通视频理解 ⚡
第 1 步:安装依赖
pip install "transformers[torch]>=5.18.0" torchvision torchcodec⚠️ 如果你的 CUDA 是 12.x 且报
RuntimeError: Could not load libtorchcodec,把torchcodec换成av即可:pip install "transformers[torch]>=5.18.0" torchvision av(PyAV 同样支持图像与视频推理)。
第 2 步:加载模型
import torch from transformers import AutoModelForImageTextToText, AutoProcessor model_id = "openbmb/MiniCPM-V-4.7-35B-A3B-FP8" processor = AutoProcessor.from_pretrained(model_id) model = AutoModelForImageTextToText.from_pretrained( model_id, torch_dtype="auto", device_map="auto" )💡 多图/视频场景推荐使用 Flash Attention 2(
attn_implementation="flash_attention_2"),更快更省显存。
第 3 步:视频推理
messages = [ { "role": "user", "content": [ {"type": "video", "url": "你的视频文件.mp4"}, {"type": "text", "text": "Describe this video in detail. Follow the timeline " "and focus on on-screen text, interface changes, " "main actions, and scene changes."}, ], } ] downsample_mode = "16x" # 需要更细细节可改为 "4x" inputs = processor.apply_chat_template( messages, tokenize=True, add_generation_prompt=True, return_dict=True, return_tensors="pt", downsample_mode=downsample_mode, max_num_frames=128, # 关键帧采样数 stack_frames=3, # 帧堆叠:每秒 1 主帧 + 2 子帧 max_slice_nums=1, use_image_id=False, enable_thinking=False, ).to(model.device) generated_ids = model.generate( **inputs, downsample_mode=downsample_mode, max_new_tokens=2048, # 官方推荐 instruct 模式采样参数 do_sample=True, temperature=0.7, top_p=0.95, top_k=100, min_p=0.0, presence_penalty=0, repetition_penalty=1.03, ) output_text = processor.batch_decode( [out[len(inp):] for inp, out in zip(inputs.input_ids, generated_ids)], skip_special_tokens=True, ) print(output_text[0])完整可运行版本参见 README.md 的 Video Inference 小节。
时序描述提示词怎么写?✍️
想让模型输出"时间线式"描述,提示词里给出明确指令非常关键。官方示例提示词是一个很好的模板:
"Describe this video in detail.Follow the timelineand focus onon-screen text, interface changes, main actions, and scene changes."(请沿时间线详细描述视频,聚焦屏幕文字、界面变化、主要动作和场景切换)
你可以按任务自行裁剪:录屏分析就强调"界面变化 + 屏幕文字",体育赛事就强调"球员动作 + 比分变化",教程视频就强调"操作步骤顺序"。
五、视频参数速查表 📋
| 参数 | 默认值 | 视频推荐 | 说明 |
|---|---|---|---|
downsample_mode | "16x" | "16x"/"4x" | 视觉 token 压缩倍率,必须同时传给模板与generate |
max_num_frames | 128 | 按视频长度调整 | 采样主帧数上限 |
stack_frames | 1 | 3或5 | 每秒采样点数(1 主帧 + N−1 子帧拼网格) |
max_slice_nums | 9 | 1 | 高分辨率切片数上限 |
use_image_id | True | False | 是否为每帧加<image_id>标签 |
除
downsample_mode外,其余参数只需传给apply_chat_template。
六、常见问题排查 🛠️
- 细节看不清(小字、数字):把
downsample_mode从"16x"改成"4x",并适当调小max_num_frames给单帧更多 token 预算; - 动作衔接对不上、感觉"跳帧":开启帧堆叠
stack_frames=3或5; - 显存不足:优先用 FP8 权重(本仓库即是)、保持
downsample_mode="16x"、减少max_num_frames; downsample_mode传错或只传了一处:会导致视觉 token 占位数量与实际编码不一致,务必两处都传;- 输出重复啰嗦:使用官方推荐采样参数(尤其
repetition_penalty=1.03)。
写在最后 🏁
MiniCPM-V 4.7-35B-A3B-FP8 的视频理解能力来自"采样 + 堆叠 + 提示"三件套:用max_num_frames决定模型"看多少帧",用stack_frames决定"每帧之间补多少细节",再用一条强调时间线的提示词引导输出。掌握这套玩法,无论录屏分析、赛事解说还是操作教程解析,都能让模型按时间线给出结构清晰的描述。更多量化与部署细节可继续查阅 README.md 与 recipe.yaml。
- 大模型
- 多模态
- 模型量化
- 本地部署
- openBMB
【免费下载链接】MiniCPM-V-4.7-35B-A3B-FP8
相关推荐
如何用MiniCPM-V-4.7-35B-A3B-bf16做视频理解:128帧视频输入与参数设置详解
如何用MiniCPM V 4.7 35B A3B bf16做视频理解:128帧视频输入与参数设置详解 MiniCPM V 4.7 35B A3B bf16 是
MiniCPM-V-4.7-35B-A3B-DSpark如何与MiniCPM-V-4.7-35B-A3B精确配对:草稿-目标模型机制详解
MiniCPM V 4.7 35B A3B DSpark如何与MiniCPM V 4.7 35B A3B精确配对:草稿 目标模型机制详解 MiniCPM V 4
MiniCPM-V 4.6 如何完成视频推理并配置帧采样与下采样参数?
MiniCPM V 4.6 如何完成视频推理并配置帧采样与下采样参数? 这篇文章解决一个具体问题:在本地 GPU 上用 Transformers 加载 open
人工智能大模型多模态计算机视觉NLP微调openBMB
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考