MiniCPM-OCR
MiniCPM-V 多模态系列
| 版本 | 参数量 | HuggingFace | ModelScope |
|---|---|---|---|
| MiniCPM-OCR 1.0 | 1.3B | MiniCPM-OCR-1.0 | MiniCPM-OCR-1.0 |
| MiniCPM-OCR 1.0-DSpark | 0.3B | MiniCPM-OCR-1.0-DSpark | MiniCPM-OCR-1.0-DSpark |
| MiniCPM-OCR Jev | 2.2B | MiniCPM-OCR-Jev | MiniCPM-OCR-Jev |
MiniCPM-OCR 1.0
文档解析需要两个进程:SDK 负责版面检测与结果组装,识别服务运行模型。本页先启动识别后端,再到推理解析文档。
环境要求
官方 vLLM 教程使用 Linux x86_64、Python 3.12、NVIDIA GPU 与 ≥580 驱动(CUDA 13),已在 RTX 5090 32 GB 上验证。环境、源码编译、权重与缓存合计建议预留至少 40 GB 磁盘。这是已验证配置,不能直接视为最低显存需求。
vLLM
克隆仓库,使用官方脚本安装匹配的 vLLM 与 Transformers 源码版本:
git clone https://github.com/OpenBMB/MiniCPM-OCR.git
cd MiniCPM-OCR
apt-get update
apt-get install -y software-properties-common
add-apt-repository -y ppa:ubuntu-toolchain-r/test
apt-get update
apt-get install -y gcc-13 g++-13 libdw-dev libelf-dev
bash scripts/install.sh vllm
在仓库根目录打开新的终端,启动服务:
source .venv-vllm/bin/activate
export CC=gcc-13 CXX=g++-13
export CUDA_HOME="$(python -c 'import sysconfig; print(sysconfig.get_path("purelib") + "/nvidia/cu13")')"
export PATH="$CUDA_HOME/bin:$PATH"
vllm serve openbmb/MiniCPM-OCR-1.0 \
--served-model-name minicpm-ocr \
--host 127.0.0.1 \
--port 18499 \
--max-model-len 40960 \
--max-num-batched-tokens 40960 \
--max-num-seqs 32 \
--limit-mm-per-prompt '{"image":36,"video":0}' \
--attention-backend FLASH_ATTN \
--mm-encoder-attn-backend FLASH_ATTN \
--mm-processor-kwargs '{"downsample_mode":"4x"}' \
--gpu-memory-utilization 0.85 \
--trust-request-mm-kwargs \
--speculative-config '{
"method": "dspark",
"model": "openbmb/MiniCPM-OCR-1.0-DSpark",
"num_speculative_tokens": 15,
"enable_adaptive_verification": false
}' \
--default-chat-template-kwargs '{"enable_thinking":false}'
DSpark 加速使用配套的 MiniCPM-OCR-1.0-DSpark 草稿模型。使用普通解码时,删除整个 --speculative-config 参数及 JSON 值;SDK 调用所需的 --trust-request-mm-kwargs 应保留。
curl -fsS http://127.0.0.1:18499/v1/models
确认模型列表中包含 minicpm-ocr 后,再运行推理页的 SDK 或 API 示例。
SGLang
SGLang 通过 OpenAI 兼容接口提供 MiniCPM-OCR 服务,并支持使用配套的目标模型与草稿模型开启 DSpark 解码。SDK 在独立环境中运行,通过 HTTP 连接服务。
本节沿用 vLLM 的环境结构与 SDK 设置,命令面向 Linux x86_64、NVIDIA GPU 与 Python 3.12。该配置下的 SGLang 端到端部署仍待验证。
准备源码
MiniCPM-OCR 1.0 的 SGLang 支持由 PR #45799 提供,截至 2026 年 10 月 26 日仍在评审中。本节使用该 PR 的提交 aaab6bfc3de5354b052f2e96d5e566d70b9f69a2,来自 model/MiniCPM-OCR-1.0 分支。
以下命令均在 MiniCPM-OCR 仓库根目录执行:
git clone https://github.com/sgl-project/sglang.git sources/sglang
git -C sources/sglang fetch origin pull/45799/head
git -C sources/sglang checkout aaab6bfc3de5354b052f2e96d5e566d70b9f69a2
若 sources/sglang 已存在,跳过 clone,只执行 fetch 与 checkout。
准备 SDK 环境
按推理页的说明,在 .minicpm-ocr 中安装 SDK 与 GPU 版 PaddlePaddle。若该环境已为 vLLM 安装过,直接复用即可。
仅用 CPU 做版面检测时,步骤相同,只需把 paddlepaddle-gpu 的安装命令替换为:
python -m pip install "paddlepaddle==3.2.1"
安装服务环境
仓库 pyproject.toml 中的 sglang profile 会安装 sources/sglang/python 与 CUDA 13 组件。PyTorch 2.14.1、Transformers 5.19.0 等 SGLang 依赖来自源码自身的 python/pyproject.toml。由于 vLLM profile 需要不同版本的 PyTorch,安装脚本使用独立的 .venv-sglang 环境。
在 Ubuntu 22.04 上准备系统构建依赖,以 root 身份运行,或给 APT 命令加 sudo:
apt-get update
apt-get install -y software-properties-common build-essential pkg-config libssl-dev curl ca-certificates protobuf-compiler
add-apt-repository -y ppa:ubuntu-toolchain-r/test
apt-get update
apt-get install -y gcc-13 g++-13 libdw-dev libelf-dev
CUDA 13 通常要求驱动 ≥580。受支持但驱动较旧的 GPU 可按 FAQ 配置兼容库,并在安装、服务与 GPU SDK 三个终端中设置对应环境变量。
安装服务环境:
bash scripts/install.sh sglang
source .venv-sglang/bin/activate
安装脚本会创建或复用 .venv-sglang,按需安装 rustup,并选择 SGLang 源码锁定的 Rust 版本(该提交为 1.92),同时准备 CUDA 编译器与库链接。若驱动的 libcuda.so.1 不在 /usr/lib/x86_64-linux-gnu,安装前将 OCR_LIBCUDA 设为其路径;使用驱动兼容库时,保持 FAQ 中配置的值。
检查环境:
uv pip check
"$(python -c 'import sysconfig; print(sysconfig.get_path("purelib") + "/nvidia/cu13/bin/nvcc")')" --version
python -c 'import sglang; print(sglang.__file__)'
python -c 'import torch, transformers; print("torch", torch.__version__, "CUDA", torch.version.cuda, "transformers", transformers.__version__); x = torch.ones(1, device="cuda"); print(torch.cuda.get_device_name(0), (x + 1).item())'
SGLang 路径应指向 sources/sglang/python/sglang,NVCC 应报告 CUDA 13.0。SGLang 的安装使用其自身依赖列表;教程中供 vLLM 使用的 Transformers 适配 checkout 不会在此安装。
准备模型
下载 SDK 使用的 PP-DocLayoutV3 版面模型,或复用为 vLLM 准备好的目录:
mkdir -p models
curl -fL -o ./models/PP-DocLayoutV3_infer.tar \
https://paddle-model-ecology.bj.bcebos.com/paddlex/official_inference_model/paddle3.0.0/PP-DocLayoutV3_infer.tar
tar xf ./models/PP-DocLayoutV3_infer.tar -C ./models
下载 MiniCPM-OCR-1.0 目标模型及其配套的 MiniCPM-OCR-1.0-DSpark 草稿模型:
source .venv-sglang/bin/activate
hf download openbmb/MiniCPM-OCR-1.0 --local-dir ./models/MiniCPM-OCR-1.0
hf download openbmb/MiniCPM-OCR-1.0-DSpark --local-dir ./models/MiniCPM-OCR-1.0-DSpark
模型已存在时直接复用。下文 --model-path 指向目标模型目录,--speculative-draft-model-path 指向配套草稿模型目录,SDK 的 layout.model_dir 指向版面模型目录。
启动服务
在仓库根目录打开服务终端。单卡机器上,先结束 SDK 运行并停掉之前的推理服务,再启动 SGLang,以释放显存。
使用较旧的驱动时,需在本终端按 FAQ 设置兼容库环境变量后再启动服务。激活 .venv-sglang 不会恢复其他终端的环 境变量。
source .venv-sglang/bin/activate
export PATH="${CARGO_HOME:-$HOME/.cargo}/bin:$PATH"
export RUSTUP_TOOLCHAIN=1.92
export CC=gcc-13 CXX=g++-13
export CUDA_HOME="$(python -c 'import sysconfig; print(sysconfig.get_path("purelib") + "/nvidia/cu13")')"
export PATH="$CUDA_HOME/bin:$PATH"
CUDA_VISIBLE_DEVICES=0 python -m sglang.launch_server \
--model-path ./models/MiniCPM-OCR-1.0 \
--served-model-name minicpm-ocr \
--host 127.0.0.1 --port 18499 \
--context-length 40960 \
--max-running-requests 32 \
--mem-fraction-static 0.85 \
--speculative-algorithm DSPARK \
--speculative-draft-model-path ./models/MiniCPM-OCR-1.0-DSpark \
--default-chat-template-kwargs '{"enable_thinking":false}'
--speculative-algorithm DSPARK 开启 DSpark。SGLang 从草稿模型配置读取块大小并推导验证窗口,不要把 vLLM 的 --speculative-config JSON 复制到该命令。
首次启动时源码可能编译 Rust 缓存扩展,需保持 Cargo 目录在 PATH 中并使用 Rust 1.92;即使安装脚本已完成,系统 Cargo 也可能更旧。重新激活虚拟环境会重置 PATH,激活后需重跑上述 export。
服务就绪后,在另一终端确认:
curl --noproxy 127.0.0.1 -f http://127.0.0.1:18499/v1/models
返回的模型列表应包含 minicpm-ocr。
用 SDK 解析文档
在仓库根目录另开终端:
source .minicpm-ocr/bin/activate
minicpmvocr parse --config sdk/minicpmvocr/configs/minicpmvocr.yaml \
--backend openai \
--server-url http://127.0.0.1:18499 \
--model minicpm-ocr \
--set layout.model_dir="$PWD/models/PP-DocLayoutV3_infer" \
--set layout.device=cuda:0 \
--set pipeline.queue_mode=concurrent \
--set engine.max_model_len=40960 \
--set pipeline.max_workers=32 \
--set pipeline.merge_cross_page_tables=false \
--set pipeline.overlap_layout=true \
--input doc.pdf --output doc.md
输入可以是 PDF、PNG 或 JPG;PDF 会完整解析,加 --set input.limit=1 可只检查第一页。SDK 的模型名称需与服务端的 --served-model-name 一致。
pipeline.overlap_layout=true 让版面检测与识别并行执行;pipeline.max_workers=32 限制的是识别请求并发数而非页数,应按服务能力调整;关闭版面重叠时 pipeline.queue_mode 才会生效。--backend openai 指定 SGLang 使用的 OpenAI 兼容客户端。
CPU 版面检测时,使用前面配置的 CPU PaddlePaddle 环境,激活 .minicpm-ocr,并把 --set layout.device=cuda:0 换成 --set layout.device=cpu。
GPU 选择:cuda:0 指 SDK 进程可见的第一块 GPU。
常见问题
| 现象 | 排查 |
|---|---|
提示未知的 minicpm_ocr 模型类型或架构 | 确认源码处于锁定的 PR 提交,且安装在 .venv-sglang 中 |
| CUDA 驱动报错 | 检查驱动兼容性,以及 FAQ 中的兼容库环境变量 |
找不到 nvcc 或缺少 NVCC 链接文件 | 恢复启动服务时的 CUDA_HOME 与 PATH;编译器文件不完整时重跑 bash scripts/install.sh sglang |
NVCC 报告未知选项 --compress-mode=size | 恢复服务命令中的 CUDA_HOME 与 PATH,再重启服务 |
Rust 缓存编译失败,出现 edition2024 或 Cargo 退出码 101 | 查看第一个编译器报错;使用 edition2024 时恢复启动服务时的 Cargo PATH 与 RUSTUP_TOOLCHAIN,cargo --version 应显示 1.92.0 |
| 显存不足 | 降低 --max-running-requests、SDK worker 数或 --context-length,并保持 engine.max_model_len 与服务一致 |
| 输出中出现思考标签 | 启动服务时保留 --default-chat-template-kwargs '{"enable_thinking":false}' |
其他硬件平台与服务选项见 SGLang 文档。
llama.cpp
llama.cpp 使用 GGUF 权重在 CPU 与本地 GPU 上推理,适合资源受限或离线部署的场景。
环境要求
- 硬件:支持 AVX2 的 CPU,或 NVIDIA / AMD GPU
- 内存:≥16 GB 系统内存
- 存 储:F16 模型与视觉投影器约 2.5 GB
GGUF 权重
从 openbmb/MiniCPM-OCR-1.0-gguf 下载:
| 文件 | 大小 | 说明 |
|---|---|---|
MiniCPM-OCR-1_0-F16.gguf | 1.4 GB | 语言模型(F16) |
mmproj-model-f16-4x.gguf | 859 MB | 视觉投影器(4x 下采样) |
两个文件都需要:语言模型用于 --model,投影器用于 --mmproj。
量化版本(Q4_K_M、Q8_0)即将提供。自行量化:
./build/bin/llama-quantize MiniCPM-OCR-1_0-F16.gguf MiniCPM-OCR-1.0-Q8_0.gguf Q8_0