MiniCPM-V MiniCPM-V & o Cookbook

MiniCPM-V 4.7 — llama.cpp

说明

MiniCPM-V 4.7 已合入官方 llama.cpp(PR #29416)。 请使用该 PR 之后(含)的 checkout 构建。

GGUF 格式变化: 4.7 使用 canvas M-RoPE,新增了 GGUF 元数据键 (rope.section_order)与 mmproj 张量(v.tok_embd_sep)。用旧版 convert_hf_to_gguf.py 转出的 GGUF,在新构建里会加载成功但 M-RoPE 计算错误(或因缺 mmproj 张量直接失败)。 请始终使用官方 4.7 GGUF,或用当前脚本重新转换。

MiniCPM-V 4.7 提供两个尺寸,使用对应的一套 GGUF:

尺寸 LLM 文件 mmproj
1B MiniCPM-V-4_7-1B-Q4_K_M.gguf mmproj-model-f16.gguf
35B-A3B MiniCPM-V-4_7-35B-A3B-Q4_K_M.gguf mmproj-model-f16.gguf

1. 构建 llama.cpp

git clone https://github.com/ggml-org/llama.cpp.git
cd llama.cpp

用 CMake 构建(详见 build 文档):

CPU / Metal:

cmake -B build
cmake --build build --config Release

CUDA:

cmake -B build -DGGML_CUDA=ON
cmake --build build --config Release

2. GGUF 文件

方式一:下载官方 GGUF

从以下地址下载语言模型 GGUF 与视觉投影(mmproj):

每个仓库提供完整的 K-quant 档位(F16、Q8_0、Q6_K、Q5_K_M、Q5_K_S、Q5_1、Q5_0、Q4_K_M、Q4_K_S、Q4_1、Q4_0)以及两个 mmproj(mmproj-model-f16.gguf、mmproj-model-f16-4x.gguf)。35B-A3B 仓库额外提供 mix_q3gud_im(14.4 GiB 的 imatrix 混合量化,推荐用于显存受限设备)。

方式二:从 PyTorch 模型转换

下载 PyTorch 权重(如 openbmb/MiniCPM-V-4.7-1B),在当前版本的 llama.cpp 里运行标准脚本:

# 1) 转换语言模型 + 视觉 merger
python ./convert_hf_to_gguf.py /path/to/MiniCPM-V-4.7-1B \
    --outfile /path/to/MiniCPM-V-4.7-1B/MiniCPM-V-4_7-1B-F16.gguf \
    --outtype f16

# 2) 转换视觉投影(mmproj)
python ./convert_hf_to_gguf.py /path/to/MiniCPM-V-4.7-1B \
    --mmproj \
    --outfile /path/to/MiniCPM-V-4.7-1B/mmproj-model-f16.gguf

导出 4× 视觉变体:复制模型目录,把其 preprocessor_config.json 里的 "downsample_mode" 改成 "4x",再跑一次 --mmproj,--outfile mmproj-model-f16-4x.gguf。

3. 模型推理

重要

近期 llama.cpp 默认 --reasoning 为 auto,会依据对话模板开启思考。v4.7 模板默认开启思考, 因此普通问答请显式传 --reasoning off。

cd build/bin/

# F16 权重(1B)
./llama-mtmd-cli \
    -m  /path/to/MiniCPM-V-4.7-1B/MiniCPM-V-4_7-1B-F16.gguf \
    --mmproj /path/to/MiniCPM-V-4.7-1B/mmproj-model-f16.gguf \
    -c 8192 --temp 0.7 --top-p 0.8 --top-k 100 --repeat-penalty 1.05 \
    --reasoning off \
    --image xx.jpg -p "What is in the image?"

# 量化 INT4 权重(35B-A3B)
./llama-mtmd-cli \
    -m  /path/to/MiniCPM-V-4.7-35B-A3B/MiniCPM-V-4_7-35B-A3B-Q4_K_M.gguf \
    --mmproj /path/to/MiniCPM-V-4.7-35B-A3B/mmproj-model-f16.gguf \
    -c 8192 --temp 0.7 --top-p 0.8 --top-k 100 --repeat-penalty 1.05 \
    --reasoning off \
    --image xx.jpg -p "What is in the image?"

# 交互模式
./llama-mtmd-cli \
    -m  /path/to/MiniCPM-V-4.7-1B/MiniCPM-V-4_7-1B-Q4_K_M.gguf \
    --mmproj /path/to/MiniCPM-V-4.7-1B/mmproj-model-f16.gguf \
    -c 8192 --temp 0.7 --top-p 0.8 --top-k 100 --repeat-penalty 1.05 \
    --reasoning off \
    --image xx.jpg -i

开启思考(重 OCR / 推理任务)用 --reasoning on(--jinja 默认已开):

./llama-mtmd-cli \
    -m  /path/to/MiniCPM-V-4.7-1B/MiniCPM-V-4_7-1B-Q4_K_M.gguf \
    --mmproj /path/to/MiniCPM-V-4.7-1B/mmproj-model-f16.gguf \
    -c 8192 --image xx.jpg --jinja --reasoning on -p "What is in the image?"

参数参考:

参数 说明
-m, --model 语言模型 GGUF 路径
--mmproj 视觉投影 GGUF 路径
--image 输入图片路径
-p, --prompt 提示词
-c, --ctx-size 最大上下文长度
-rea, --reasoning [on\|off\|auto] 是否开启思考。默认 auto(读模板)。普通问答用 off
--jinja 使用模型 Jinja 对话模板(近期构建默认开启)