MiniCPM logo

Demo (CN / Global) ยท GitHub ยท Free API ยท SDK usage ยท DSpark ยท Skill

This repository hosts the GGUF build of MiniCPM-OCR 1.0 for llama.cpp. For the original weights, the full model card, and benchmarks, see the base repository.

MiniCPM-OCR 1.0 (1.3B) parses documents into text, tables, formulas, charts, and seals, and supports key information extraction, for Chinese and English documents and PDFs.

Files

Every tier needs the vision projector as well โ€” --model takes the LLM GGUF, --mmproj takes the projector:

File Size Notes
mmproj-model-f16-4x.gguf 0.901 GB vision projector, 4ร— downsample โ€” required
MiniCPM-OCR-1_0-F16.gguf 1.516 GB reference, no quantization
MiniCPM-OCR-1_0-Q8_0.gguf 0.812 GB near-lossless
MiniCPM-OCR-1_0-Q6_K.gguf 0.630 GB good quality/size balance
MiniCPM-OCR-1_0-Q5_K_M.gguf 0.578 GB smaller, still strong
MiniCPM-OCR-1_0-Q5_K_S.gguf 0.563 GB
MiniCPM-OCR-1_0-Q5_1.gguf 0.595 GB
MiniCPM-OCR-1_0-Q5_0.gguf 0.563 GB
MiniCPM-OCR-1_0-Q4_K_M.gguf 0.529 GB smallest recommended
MiniCPM-OCR-1_0-Q4_K_S.gguf 0.505 GB
MiniCPM-OCR-1_0-Q4_1.gguf 0.532 GB
MiniCPM-OCR-1_0-Q4_0.gguf 0.501 GB

The projector is 4ร— only; there is no 16ร— variant for this model.

Which tier

Tier Table / dense text / XML
F16 baseline
Q8_0 lossless / โ‰ˆlossless โ€” recommended balance
Q4_K_M lossless on tables, small degradation on dense text; closing-tag slashes may drop in code-heavy documents

Prefer Q8_0 for code- or XML-heavy pages.

Quick start

Use with the MiniCPM-OCR SDK

Required before using either the CLI or Python API: deploy and start the OCR model service first, and wait until it is ready to accept requests. The SDK examples below are clients of that running service; they do not deploy or start the OCR model service automatically.

Use the official minicpm-ocr SDK to parse local images or PDFs with this GGUF checkpoint. The SDK detects layout with PP-DocLayoutV3, recognises each region, and saves structured JSON and Markdown in reading order.

Install Python 3.10+ and the SDK:

pip install "minicpm-ocr[all]"

Install minicpm-ocr for your platform using the installation guide.

Prerequisite: deploy and start the model service

Before running the SDK, start a llama.cpp recognition service using this repository's MiniCPM-OCR-1_0-Q8_0.gguf and the required mmproj-model-f16-4x.gguf vision projector. Follow the llama.cpp deployment guide. For the SDK examples below, configure the service with --port 8080, --alias minicpm-ocr, --ctx-size 8192, --parallel 1, and --jinja --reasoning off. If you keep the guide's port 18499, change the SDK URL to match. DSpark setup, when used, is covered by the same guide.

The SDK uses the llamacpp backend, an 8192-token context, and one recognition request at a time. Layout detection runs on CPU in these examples; the recognition service can independently use Metal, CUDA, or CPU. If you increase the service context per request slot, update engine.max_model_len accordingly.

CLI

Start the model service described above and wait until it is ready before running this command. Save a local image as demo.png, then run:

minicpmvocr parse demo.png \
  --backend llamacpp \
  --server-url http://127.0.0.1:8080 \
  --model minicpm-ocr \
  --device cpu \
  --set engine.max_model_len=8192 \
  --workers 1 \
  --set pipeline.queue_mode=serial \
  --set pipeline.overlap_layout=false \
  --set run.run_root=output \
  --output output/demo.md

The CLI automatically downloads PP-DocLayoutV3 to models/PP-DocLayoutV3_infer/ when needed. The final Markdown is saved to output/demo.md; structured JSON and per-page Markdown are kept in output/<run_tag>/results_json/ and output/<run_tag>/output/.

Python API

The model service described above must already be running before you execute this Python example. Set engine.server_url and engine.model_name to match that service.

The same pipeline is available from Python:

from importlib.resources import files
from pathlib import Path

from minicpmvocr import load_config, pipelined_run
from minicpmvocr.layouts.download import ensure_layout_model


def main():
    layout_model = ensure_layout_model(Path("models/PP-DocLayoutV3_infer"))

    cfg = load_config(
        str(files("minicpmvocr").joinpath("configs/minicpmvocr.yaml")),
        overrides={
            "input": {"file_path": str(Path("demo.png").resolve())},
            "engine": {
                "type": "llamacpp",
                "server_url": "http://127.0.0.1:8080",
                "model_name": "minicpm-ocr",
                "max_model_len": 8192,
            },
            "layout": {
                "model_dir": str(layout_model),
                "device": "cpu",
            },
            "pipeline": {
                "overlap_layout": False,
                "queue_mode": "serial",
                "max_workers": 1,
            },
            "run": {"run_root": str(Path("output").resolve())},
        },
    )

    pipelined_run(cfg)

    print("JSON directory:", cfg["_meta"]["result_json_dir"])
    print("Markdown directory:", cfg["_meta"]["output_dir"])


if __name__ == "__main__":
    main()

ensure_layout_model() reuses or downloads the official layout model. Results are written to output/<run_tag>/results_json/ and output/<run_tag>/output/. To parse a PDF, replace demo.png with its local path.

For CUDA layout detection, change --device cpu to --device cuda:0 in the CLI, or set layout.device to cuda:0 in Python, after installing the matching PaddlePaddle runtime. Keep SDK recognition concurrency aligned with the llama.cpp service's request slots.

Run minicpmvocr parse --help for CLI options, or see the SDK API reference for configuration and document-level Markdown export.

Performance

Single RTX 5090 (32 GB), F16 weights: model + projector load โ‰ˆ2.3 s; one table crop (1,312 prompt / 265 output tokens) โ‰ˆ1.0 s; VRAM โ‰ˆ26 GB at --ctx-size 40960. CPU-only (48 threads): one table image end-to-end (layout + recognition + assembly) โ‰ˆ21 s.

Build llama.cpp and further options: llama.cpp deployment guide.

Related checkpoints

Format Hugging Face ModelScope
BF16 (original) ๐Ÿค— ModelScope
GGUF (llama.cpp) (this repo) ๐Ÿค— ModelScope
AWQ W4A16 ๐Ÿค— ModelScope
GPTQ W4A16 ๐Ÿค— ModelScope
DSpark draft (BF16) ๐Ÿค— ModelScope
DSpark draft (GGUF) ๐Ÿค— ModelScope

Speculative decoding works in llama.cpp with the DSpark draft GGUF via --spec-type draft-dspark.

FAQ

Installation, model downloads, GPU memory, input formats, and unexpected outputs: FAQ.

License

Model weights, code, and documentation are released under the Apache License 2.0.

Downloads last month
31,576
GGUF
Model size
0.8B params
Architecture
qwen35
Hardware compatibility
Log In to add your hardware

4-bit

5-bit

6-bit

8-bit

16-bit

Inference Providers NEW
This model isn't deployed by any Inference Provider. ๐Ÿ™‹ Ask for provider support

Model tree for openbmb/MiniCPM-OCR-1.0-gguf

Quantized
(31)
this model
Finetunes
1 model

Collection including openbmb/MiniCPM-OCR-1.0-gguf