Model reference · open weights
MiniCPM-V-4.6-Thinking-BNB is an open-weight language model from openbmb. MiniCPM-V-4.6-Thinking-BNB (INT4) weighs 1.1 GB; the smallest configuration that runs it is RTX 3060 12 GB.
Summary of the openbmb/MiniCPM-V-4.6-Thinking-BNB model card, 2026-10-01
What it is
| Released by | openbmb |
|---|---|
| Released | 2026-05-09 |
| Parameters | 1.3B |
| VRAM | 1.1 GB for the weights |
What it runs on
| Card | Requests at once | Context max | Memory | |
|---|---|---|---|---|
| 8K each | 32K each | |||
| RTX 3060 12 GB | 61 | 19 | all 256K | 11.6 GB |
| RTX 4060 Ti 16 GB | 88 | 27 | all 256K | 15.4 GB |
| RTX 3090 24 GB | 145 | 46 | all 256K | 23.4 GB |
| RTX 4090 24 GB | 145 | 45 | all 256K | 23.4 GB |
| RTX 5090 32 GB | 199 | 63 | all 256K | 31.0 GB |
| L40S 48 GB | 292 | 92 | all 256K | 44.0 GB |
| A100 80 GB | 537 | 170 | all 256K | 78.2 GB |
| H100 80 GB | 500 | 158 | all 256K | 78.1 GB |
| RTX PRO 6000 Blackwell 96 GB | 613 | 193 | all 256K | 93.8 GB |
| DGX Spark (GB10) 128 GB unified | 710 | 224 | all 256K | 107 GB |
| H200 141 GB | 929 | 293 | all 256K | 138 GB |
| B200 180 GB | 1000+ | 380 | all 256K | 176 GB |
| Requests at once | 8K tokens each | 32K tokens each |
|---|---|---|
| 1 | 3.2 GB | 3.5 GB |
| 5 | 3.8 GB | 5.3 GB |
| 8 | 4.2 GB | 6.6 GB |
| 16 | 5.3 GB | 10.1 GB |
| 32 | 7.5 GB | 17.2 GB |
| 64 | 12.0 GB | 31.3 GB |
One card, with vLLM's small-card settings.
From the model card
This repository hosts the bitsandbytes (NF4, 4-bit) quantized version of MiniCPM-V 4.6 Thinking. For the original BF16 weights and the full model card, please refer to openbmb/MiniCPM-V-4.6-Thinking.
A Pocket-Sized MLLM for Ultra-Efficient Image and Video Understanding on Your Phone
GitHub | MiniCPM Wiki(Chinese) | CookBook | Demo | Feishu (Lark)
MiniCPM-V 4.6 Thinking is the long chain-of-thought reasoning variant of MiniCPM-V 4.6. It generates an explicit reasoning trace before producing the final answer, substantially boosting performance on complex multimodal reasoning, math, and OCR-heavy tasks, while keeping the same edge-friendly architecture (SigLIP2-400M vision encoder + Qwen3.5-0.8B LLM) and the mixed 4x/16x visual token compression of MiniCPM-V 4.6.
Overall Performance (Thinking)
High-Concurrency Throughput
Single Request TTFT (ms)
MiniCPM-V 4.6 can be deployed across three mainstream end-side platforms — iOS, Android and HarmonyOS. The clips below are raw screen recordings on phone devices without edition.
pip install "transformers[torch]>=5.7.0" torchvision torchcodec
Note on CUDA compatibility:
torchcodec(used for video decoding) may have compatibility issues with certain CUDA versions. For example,torch>=2.11bundles CUDA 13.1 by default, while environments with CUDA 12.x may encounter errors such asRuntimeError: Could not load libtorchcodec. Two workarounds:
- Replace
torchcodecwithPyAV— supports both image and video inference without CUDA version constraints:pip install "transformers[torch]>=5.7.0" torchvision av- Pin the CUDA version when installing torch to match your environment (e.g. CUDA 12.8):
pip install "transformers>=5.7.0" torchvision torchcodec --index-url https://download.pytorch.org/whl/cu128
from transformers import AutoModelForImageTextToText, AutoProcessor
model_id = "openbmb/MiniCPM-V-4.6-Thinking-BNB"
processor = AutoProcessor.from_pretrained(model_id)
model = AutoModelForImageTextToText.from_pretrained(
model_id, torch_dtype="auto", device_map="auto"
)
# Flash Attention 2 is recommended for better acceleration and memory saving,
# especially in multi-image and video scenarios.
# model = AutoModelForImageTextToText.from_pretrained(
# model_id,
# torch_dtype=torch.bfloat16,
# attn_implementation="flash_attention_2",
# device_map="auto",
# )
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" # Using `downsample_mode="4x"` for Finer Detail
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,
).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])
messages = [
{
"role": "user",
"content": [
{"type": "video", "url": "https://huggingface.co/datasets/openbmb/DemoCase/resolve/main/football.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" # Using `downsample_mode="4x"` for Finer Detail
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=1,
max_slice_nums=1,
use_image_id=False,
).to(model.device)
generated_ids = model.generate(**inputs, downsample_mode=downsample_mode, max_new_tokens=2048)
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])
You can customize image/video processing by passing additional parameters to apply_chat_template:
| Parameter | Default | Applies to | Description |
|---|---|---|---|
downsample_mode | "16x" | Image & Video | Visual token downsampling. "16x" merges tokens for efficiency; "4x" keeps 4× more tokens for finer detail. Must also be passed to generate(). |
max_slice_nums | 9 | Image & Video | Maximum number of slices when splitting a high-resolution image. Higher values preserve more detail for large images. Recomme |
Quoted from the model card on Hugging Face. The full card is behind the Hugging Face link above.