Run it: DGX Spark recipe · RTX 4090 recipe. Both serve the full 262,144-token context through TabbyAPI.
An EXL3 quantization of OpenBMB MiniCPM-V 4.7 35B-A3B, released under the SAGE name. This is a standalone quantized checkpoint; the original weights are not needed at load time. The upstream model card declares Apache-2.0; this card keeps that license attribution and links the exact upstream base.
The shipping weights are a tensor-identical compact re-shard of the selected quantization. All 125,215 tensors were checked twice against the source pack by key, dtype, shape and raw-byte SHA-256 before release.
| Item | Value |
|---|---|
| Base | openbmb/MiniCPM-V-4.7-35B-A3B |
| Intended Hub ID | vcruz305/MiniCPM-V-4.7-35B-A3B-EXL3-SAGE-3.74bpw |
| Format | EXL3 for ExLlamaV3 |
| Target average | 3.74 bits per weight (rounded from 3.7357) |
| Weight layout | 19 shards; 17,999,304,996 serialized bytes including safetensors headers |
| Byte ceiling | 18,000,000,000 bytes; verified margin 695,004 bytes |
| Vision weights | 8-bit vision path; not full precision |
| License | Apache-2.0, as declared by the upstream model card |
| Integrity | 125,215 tensors; two full raw-byte verification passes; zero mismatches |
The vision path is stored at 8-bit precision. This is not a full-precision vision checkpoint. On the exact shipping files, a native ExLlamaV3 smoke test produced distinct, finite 64×2048 FP16 embeddings for synthetic red and blue images and returned the correct one-word color for both under greedy decoding. This is a functional validation, not a replacement for the upstream multimodal benchmark suite.
Install a compatible CUDA-enabled PyTorch and ExLlamaV3 build first. From an ExLlamaV3 checkout, the upstream interactive example takes a local model directory and a prompt format:
python examples/chat.py -m /path/to/model-directory -mode <prompt-mode>
For an OpenAI-compatible API, TabbyAPI is the ExLlamaV3 backend. Put the downloaded model folder under its configured model_dir, set model.model_name in config.yml to that folder name, then launch:
python main.py
The API defaults to http://127.0.0.1:5000; query GET /v1/models to confirm a model is loaded before sending requests. Use the upstream TabbyAPI setup guide for installation and configuration.
Compatibility note: MiniCPM-V 4.7 and dSparK support is in the vcruz305/exllamav3 fork; stock ExLlamaV3 support depends on the installed release supporting the MiniCPM-V 4.7 architecture and multimodal path. Confirm this on the intended version before deployment; the interactive example above does not itself establish image/video support.
The values in this section are OpenBMB's published results for the original checkpoint, transcribed from the charts in the official MiniCPM-V 4.7 card. They were not rerun on this EXL3 release and must not be interpreted as quantized-model scores.
OpenBMB also reports 13+ tokens/s on an iPhone 17 Pro Max for its on-device stack. That number uses OpenBMB's own runtime, scheduling, quantization and speculative-sampling setup; it is not an ExLlamaV3 performance result.
MiniCPM-V 4.7 supports selectable 4× and 16× visual-token compression. Higher is better unless marked with ↓.
| Task | Benchmark | 4× | 16× |
|---|---|---|---|
| General | MMBench | 91.72 | 90.87 |
| General | MMStar | 80.67 | 80.13 |
| General | MMT-Bench | 75.47 | 75.12 |
| General | SimpleVQA | 54.14 | 51.41 |
| STEM | MMMU | 80.22 | 80.00 |
| STEM | MathVista | 88.00 | 87.30 |
| STEM | MMMU-Pro | 69.71 | 67.66 |
| STEM | MathVerse_MINI | 86.45 | 84.80 |
| STEM | MathVision | 74.24 | 72.93 |
| Document, OCR & chart | OCRBench | 91.20 | 90.40 |
| Document, OCR & chart | OCRBench_v2 | 68.47 | 65.67 |
| Document, OCR & chart | OmniDocBench_v1.6 | 94.24 | 93.25 |
| Document, OCR & chart | CharXiv_Reasoning | 75.60 | 69.20 |
| Document, OCR & chart | CCOCR | 81.14 | 78.29 |
| Document, OCR & chart | TextVQA_VAL | 84.99 | 81.72 |
| Multi-image | BLINK | 70.33 | 68.12 |
| Multi-image | MMSI-Bench | 16.00 | 15.20 |
| Hallucination | Hallusion-Bench | 63.83 | 64.42 |
| Hallucination | MMHal-Score | 4.72 | 4.67 |
| Hallucination | MMHal-Hallrate ↓ | 21.88 | 22.92 |
| Grounding & GUI | RefCOCO | 90.93 | 89.61 |
| Grounding & GUI | ScreenSpot | 86.99 | 85.01 |
| Instruction following | MM-IFEval | 65.41 | 64.62 |
| Video understanding | Video-MME (w/o subs) | 76.40 | 74.70 |
| Video understanding | LongVideoBench | 68.90 | 67.60 |
| Video understanding | MotionBench | 68.12 | 68.02 |
| Task | Benchmark | Score |
|---|---|---|
| Knowledge | CMMLU | 90.21 |
| Knowledge | MMLU-Pro | 83.45 |
| Knowledge | SuperGPQA | 61.23 |
| Instruction following | IFBench | 47.67 |
| Math | AIME26@avg16 | 76.46 |
| Coding | LiveCodeBench-v6 | 56.57 |
| Tool call | BFCL-V4 | 60.06 |
| Tool call | τ²-Bench | 84.65 |
The quality rows below were run twice on the exact 19-shard shipping pack against immutable BF16 final-logit stores. The pooled row contains 20,480 equally weighted tokens.
| Measurement | Exact-release result |
|---|---|
| Held-out BF16-reference top-1 agreement | 0.93642578125 |
| Held-out mean KL divergence (nats) | 0.031476575675059786 |
| Independent BF16-reference top-1 agreement | 0.93134765625 |
| Independent mean KL divergence (nats) | 0.03168882649150257 |
| Equal-token pooled top-1 agreement | 0.93388671875 |
| Equal-token pooled mean KL divergence (nats) | 0.03158270108328118 |
| Native 8-bit vision functional smoke | 2/2 correct; distinct finite embeddings |
| Sixcat v0.7.0, exact shipping pack | 79.17 overall; 95/120 correct |
| Sixcat categories: Knowledge / Math / Truth / Instruct / Code / Tools | 50 / 100 / 80 / 70 / 85 / 90 |
| DGX Spark target-only prefill p50 | 1,024.00 tok/s |
| DGX Spark target-only decode p50 | 69.70 tok/s |
| DGX Spark target-only TTFT p50 | 1.103 s |
| DGX Spark target-only aggregate output rate | 53.57 tok/s end-to-end at concurrency 1 |
The throughput workload used a production TabbyAPI/ExLlamaV3 server, 1,024 uncached prompt tokens, 256 generated tokens, greedy decoding, concurrency 1, two warmups and seven measured requests. Every measured prompt and completion had the intended token count. Peak CUDA allocation was 20.33 GiB in the 8,192-token text-quality configuration; the separate 4,096-token text-plus-vision smoke peaked at 18.33 GiB.
Re-scored on the fork's current master runtime (the one that enables one-pass dSparK verification): pooled top-1 agreement 0.934277 and mean KL 0.031462 against the same BF16 references. The Sixcat and throughput rows above were measured on the earlier release runtime.
Sixcat used v0.7.0 with 20 first-scored responses per category, custom temperature 0.7, seed 1, thinking enabled, host-guarded code execution and concurrency 4. All 120 items were scored with no truncations or low-confidence parses; two instruction rows were flagged as loop failures.
One cold 261,886-token request with four passcodes at 10/35/60/90% depth, then decode until the context is exactly full (261,888 + 256 = 262,144). TabbyAPI, Q4 KV cache, target-only, one request at a time.
| Hardware | Prefill | Needles found | Decode at 262K | Peak memory |
|---|---|---|---|---|
| One DGX Spark (GB10) | 1,056 tok/s | 4 / 4 | 45.03 tok/s | 18,773 MiB (process) |
| One RTX 4090 24 GB | 1,236 tok/s | 4 / 4 | 88.42 tok/s | 19,160 MiB (device) |
On the Spark, Q4 KV is both smaller and faster at full context than FP16 KV (27.26 tok/s). On the 4090, decode stays at 84–91 tok/s from 2K to 262K tokens.
The pinned official OpenBMB dSparK checkpoint is included under dspark/. It runs with the vcruz305/exllamav3 fork (master), which verifies a whole draft window in one target pass and produces byte-identical output to target-only greedy decoding.
| DGX Spark GB10, TabbyAPI, same server build | Target only | dSparK, 7 draft tokens |
|---|---|---|
| Decode p50 | 69.48 tok/s | 94.70 tok/s |
| Prefill p50 | 742.03 tok/s | 736.69 tok/s |
| TTFT p50 | 0.948 s | 1.012 s |
| Accepted / proposed draft tokens | — | 1,125 / 1,966 (57.2%) |
| Greedy responses identical to target only | — | 9 / 9 |
Same workload as above: 1,024-token prompts, 256 generated tokens, greedy, concurrency 1, two warmups and seven measured requests. The gain depends on the content: code and math prompts accept more drafted tokens than open-ended chat.
dSparK only helps short prompts. Draft acceptance falls as the prompt grows, and below the break-even point it is slower than target-only decoding (output stays identical):
| Prompt tokens, Q4 KV | DGX Spark target-only | DGX Spark dSparK | RTX 4090 target-only | RTX 4090 dSparK |
|---|---|---|---|---|
| ~2,000 | 60.3 | 64.5 | 84.9 | 61.2 |
| ~8,000 | 60.2 | 55.3 | 85.7 | 53.6 |
| ~16,000 | 59.4 | 45.8 | 84.4 | 49.0 |
| ~32,000 | 57.5 | 40.6 | 84.1 | 45.3 |
| 262,144 | 45.0 | 24.5 | 88.4 | 38.1 |
On an RTX 4090 the only measured gain is the 1,024-token workload (92.06 → 103.14 tok/s, +12%). Use dSparK for short chat on a Spark; use target-only for long documents and on the 4090. The recipes enforce this (dSparK is opt-in and capped at 8,192 context).
To enable it in TabbyAPI:
draft_model:
draft_mode: model
draft_model_dir: /path/to/MiniCPM-V-4.7-35B-A3B-EXL3-SAGE-3.74bpw
draft_model_name: dspark
draft_num_tokens: 7
Draft windows are capped at 7 tokens, the largest window the fork verifies exactly. Set EXL3_DSPARK_SERIAL_VERIFY=1 to use the slower token-by-token reference verifier instead. With a Q4/Q6/Q8 KV cache use fork master at or after 475461e9; earlier builds crash on the first speculative step.
The base model is the public OpenBMB MiniCPM-V 4.7 35B-A3B checkpoint. The bundled dspark/ directory comes from openbmb/MiniCPM-V-4.7-35B-A3B-DSpark, pinned at revision 5facb75c251ffd524524a544c1f5fd97ba0d6c5c. Its model.safetensors SHA-256 is 211eda7b962795ba727b0d7db072d8c474dc3b94075f85f123fe363caf5e9679.
DSpark config validation, conversion passthrough of the Markov and confidence heads, and the draft-pack tooling in the fork are by r0b0tlab, merged with permission.
This is a quantized model. Quantization may change output quality, including vision quality. Actual memory use, throughput, supported context length and multimodal behavior depend on the compatible runtime, hardware and final pack. Test the exact files and runtime configuration for your use case.
This model is provided without warranty. Review the upstream license and model documentation, and apply appropriate safeguards to generated outputs.
model-00002-of-00019.safetensors 1.0 GBmodel-00014-of-00019.safetensors 1.0 GBmodel-00012-of-00019.safetensors 1.0 GBmodel-00011-of-00019.safetensors 1.0 GBmodel-00015-of-00019.safetensors 1.0 GBmodel-00007-of-00019.safetensors 1.0 GBmodel-00013-of-00019.safetensors 1.0 GBmodel-00009-of-00019.safetensors 1.0 GBmodel-00010-of-00019.safetensors 1.0 GBmodel-00005-of-00019.safetensors 1.0 GBmodel-00016-of-00019.safetensors 1.0 GBmodel-00004-of-00019.safetensors 1.0 GBmodel-00006-of-00019.safetensors 1.0 GBmodel-00003-of-00019.safetensors 1.0 GBmodel-00018-of-00019.safetensors 998 MBmodel-00008-of-00019.safetensors 997 MBmodel-00017-of-00019.safetensors 995 MBdspark/model.safetensors 778 MBmodel-00001-of-00019.safetensors 509 MBmodel-00019-of-00019.safetensors 475 MBHave the files? Submit a torrent.
Submit a torrentHave the complete files and permission to share them? Replace the example folder path. The script checks the files, makes a torrent and submits its magnet and checksums. Keep your torrent client seeding. Get your community key from your settings, and read the script before running it.
curl -fsSL https://pirateface.co/package.sh | bash -s -- --repo vcruz305/MiniCPM-V-4.7-35B-A3B-EXL3-SAGE-3.74bpw ./model-folder