VisionPsy-Nano: Improving Accuracy, Efficiency, and Reliability in On-Device Vision-Language Models
Organizations: Tether AI Research
Abstract
Sub-billion-parameter Vision-Language Models are increasingly viable for on-device deployment, yet compact model size alone does not guarantee usability. On a phone, such a model can still require more than two minutes to produce its first token. On-device usability depends on three axes: accuracy, efficiency, and behavioral reliability; standard benchmarks miss the third, with answers too short to expose doom loops and prompts too benign to probe adversarial safety. We introduce a diagnosis-driven post-training recipe in which a teacher VLM stress-tests the student, uncovers failure modes beyond human priors, and converts them into targeted supervision and preference alignment, supplementing generic data scaling with failure-driven optimization. Coupled with two visual-token policies, the recipe yields two accuracy-efficiency variants with improved behavioral reliability. \NanoFull attains a 62.3 normalized average over 17 benchmarks, the highest among openly released 0.5B models, +7.4 over its base at identical architecture and token budget, with doom-loop rates at or below the strongest baseline's. \FlashFull retains 61.4 while cutting warm time-to-first-token on a Pixel 9 from 138,s to 6.1,s (23). By jointly addressing all three axes, we move compact VLMs toward practical on-device usability.
Figures & tables
| Document Understanding & OCR | Visual Perception | Reasoning & Knowledge | IF & Reliab. | |||||||||||||||
| Model | OCRB † | DocVQA † | ChartQA † | InfoVQA † | TextVQA † | MME | SEED | MMB | RWQA | SQA | AI2D | MMStar | MMMU | MathV | MMVet | MM-IF | POPE | Avg |
| SmolVLM2-500M [ 31 ] | 619 | 74.7 | 64.9 | 39.0 | 71.3 | 1455 | 62.1 | 51.4 | 50.1 | 76.3 | 57.3 | 38.3 | 31.6 | 38.5 | 28.6 | 11.1 | 82.7 | 52.5 |
| nanoVLM-460M-8k [ 49 ] | 745 | 82.3 | 70.4 | 46.0 | 74.5 | 1442 | 64.3 | 53.1 | 51.8 | 76.8 | 55.3 | 37.0 | 31.3 | 33.3 | 28.4 | 20.2 | 82.7 | 54.9 |
| LFM2.5-VL-450M [ 25 ] | 710 | 82.7 | 76.6 | 48.9 | 78.8 | 1453 | 67.5 | 56.8 | 59.0 | 77.7 | 62.2 | 42.7 | 30.7 | 42.2 | 36.0 | 42.0 | 86.5 | 59.6 |
| VisionPsy-Nano-460M | 757 | 85.7 | 78.7 | 49.8 | 79.3 | 1541 | 69.2 | 61.9 | 60.0 | 86.5 | 66.5 | 47.6 | 31.4 | 48.9 | 32.3 | 42.3 | 87.9 | 62.3 |
| VisionPsy-Nano-460M-Flash | 738 | 85.1 | 77.4 | 51.1 | 75.6 | 1619 | 67.6 | 60.5 | 58.4 | 84.0 | 66.4 | 45.5 | 30.7 | 47.8 | 31.1 | 43.7 | 87.5 | 61.4 |
| Document Understanding & OCR | Visual Perception | Reasoning & Knowledge | IF & Reliab. | |||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Stage | OCRB † | DocVQA † | ChartQA † | InfoVQA † | TextVQA † | MME | SEED | MMB | RWQA | SQA | AI2D | MMStar | MMMU | MathV | MMVet | MM-IF | POPE | Avg |
| : nanoVLM-460M-8k [ 49 ] | 745 | 82.3 | 70.4 | 46.0 | 74.5 | 1442 | 64.3 | 53.1 | 51.8 | 76.8 | 55.3 | 37.0 | 31.3 | 33.3 | 28.4 | 20.2 | 82.7 | 54.9 |
| : + S1 Broad SFT | 714 | 85.1 | 74.7 | 47.3 | 78.1 | 1555 | 69.1 | 62.8 | 56.1 | 85.9 | 67.8 | 44.6 | 34.1 | 50.2 | 33.7 | 17.0 | 86.0 | 60.0 |
| : + S2 Capability-targeted SFT | 727 | 83.7 | 75.5 | 44.5 | 78.0 | 1545 | 69.4 | 61.0 | 61.2 | 86.2 | 66.0 | 47.8 | 32.9 | 45.3 | 32.5 | 42.9 | 87.6 | 61.3 |
| : + Specialist merging | 753 | 85.5 | 77.8 | 49.2 | 79.4 | 1542 | 69.8 | 61.8 | 59.2 | 86.6 | 67.3 | 48.3 | 31.8 | 48.2 | 32.6 | 43.4 | 87.5 | 62.3 |
| : + S5 Preference alignment (MPO) | 757 | 85.7 | 78.7 | 49.8 | 79.3 | 1541 | 69.2 | 61.9 | 60.0 | 86.5 | 66.5 | 47.6 | 31.4 | 48.9 | 32.3 | 42.3 | 87.9 | 62.3 |
| Model | Pixel 9 | S23 | S25 Ultra | iPhone 15 |
|---|---|---|---|---|
| nanoVLM (VPsy) | 138.3 | 116.7 | 58.8 | 10.9 |
| LFM2.5-VL | 14.9 | 13.6 | 5.7 | 0.4 |
| SmolVLM2 | 128.2 | 113.7 | 48.7 | 10.7 |
| VPsy-Flash | 6.1 | 5.9 | 2.6 | 0.3 |
| Model | Doom loops | Rate |
|---|---|---|
| nanoVLM-460M-8k ( ) | 4 / 395 | 1.01% |
| SmolVLM2-500M | 6 / 395 | 1.52% |
| LFM2.5-VL-450M | 2 / 395 | 0.51% |
| VPsy ( ) | 17 / 395 | 4.30% |
| VPsy ( ) | 1 / 395 | 0.25% |
| VPsy-Flash ( ) | 6 / 395 | 1.52% |
Appendix figures & tables20 assets
Supplementary material from the paper’s appendix.
Appendix
| Seed weakness (category) | Seeded hypothesis |
|---|---|
| Doom-loop / degenerate repetition (repetition) | On long generations the model repeats a word, phrase, or line until the token limit instead of stopping cleanly. |
| Ignores output-format instructions (instruction following) | Given a required output shape (JSON with fixed keys, one word, a bare number) it adds commentary or picks its own format. |
| Fails exhaustive extraction (instruction following) | Told to list all text or items, it omits entries, stops early, or pads with commentary. |
| Drops multi-part / conditional instructions (instruction following) | With multiple steps or a condition (“if then , else NONE”) it handles only the first part. |
| Brittle to natural-language chart phrasing (chart reading) | Reads chart values under templated phrasing but fails on paraphrased, conversational versions of the same lookup. |
| Numeric reasoning over read values (math / numeric) | Reads individual numbers correctly but cannot sum, difference, average, or count over them. |
| Seed: Digit / dense-numeral OCR severity | |
|---|---|
| Seeded hypothesis | Misreads prices, times, codes, and small or dense numerals in scene text and documents (numeric scene text much weaker than word reading). |
| Refined hypothesis | Misreads prices, times, codes, and dense numerals; high error rate on alphanumeric IDs; confuses similar digits; misses small text in footers and badges. New evidence: misreads numeric labels in geometry diagrams, omits the “%” symbol, hallucinates license-plate digits, fails on axis tick marks, reads “S$6” as “56” and “35%” as “39”, misreads scale-bar numbers and zip codes in footers. |
| Seeded probes | “Read the exact number/price/time shown here.”; “Transcribe the full code/serial/plate exactly.” |
| Refined probes | “Read the price on this tag.”; “Transcribe the license plate.”; “What time is on the clock?” |
| Rd. | Sev. | Discovered failure mode (category) |
|---|---|---|
| 1 | 5 | Hallucination of visual content and text (hallucination) † |
| 1 | 5 | Refusal or empty output on complex tasks (refusal) † |
| 2 | 5 | Attribute recognition errors (attributes) † |
| 3 | 5 | Chinese / complex-script OCR failure (OCR) |
| 3 | 4 | Hallucinated errors when asked to spot textual mistakes (hallucination) † |
| 5 | 5 | Counting failures in cluttered scenes (counting) † |
| LM format | Imatrix | VLM size (MB) | VPsy Norm. | VPsy-Flash Norm. |
|---|---|---|---|---|
| FP32 | N/A | 1,666 | ||
| BF16 | N/A | 886 | ||
| Q8_0 | No | 520 | ||
| Q5_K_M | No | 414 | ||
| Q5_K_M | Yes | 414 | ||
| Q4_K_M | Yes | 393 |
| Device | SoC | GPU backend | RAM |
|---|---|---|---|
| Google Pixel 9 | Tensor G4 | Vulkan | 12 GB |
| Samsung Galaxy S23 | Snapdragon 8 Gen 2 | OpenCL | 8 GB |
| Samsung Galaxy S25 Ultra | Snapdragon 8 Elite | OpenCL | 12 GB |
| Apple iPhone 15 | A16 Bionic | Metal | 6 GB |
| Model | |||
|---|---|---|---|
| nanoVLM (VPsy) | 1,088 | 576 | 576 |
| SmolVLM2 | 1,088 | 576 | 576 |
| LFM2.5-VL | 256 | 242 | 2,290 |
| Qwen3.5-0.8B | 256 | 512 | 2,048 |
| VPsy-Flash | 64 | 192 | 576 |
| Resolution | Model | Pixel 9 | Galaxy S23 | S25 Ultra | iPhone 15 | ||||
|---|---|---|---|---|---|---|---|---|---|
| CPU | GPU | CPU | GPU | CPU | GPU | CPU | GPU | ||
| nanoVLM (VPsy) | 153.0 | 138.3 | 119.0 | 116.7 | 67.0 | 58.8 | 70.3 | 10.9 | |
| SmolVLM2 | 128.2 | 136.1 | 135.5 | 113.7 | 48.7 | 64.3 | 72.1 | 10.7 | |
| LFM2.5-VL | 14.9 | 21.9 | 13.6 | 14.2 | 7.7 | 5.7 | 3.4 | 0.4 | |
| Qwen3.5-0.8B | 21.4 | 25.7 | 22.0 | 19.9 | 8.4 | 10.4 | 5.0 | 0.7 | |
| VPsy-Flash | 6.1 | 16.4 | 6.1 | 5.9 | 2.7 | 2.6 | 5.9 | 0.3 | |
| Resolution | Model | Pixel 9 | Galaxy S23 | S25 Ultra | iPhone 15 | ||||
|---|---|---|---|---|---|---|---|---|---|
| CPU | GPU | CPU | GPU | CPU | GPU | CPU | GPU | ||
| nanoVLM (VPsy) | 1,236 | 2,224 | 1,232 | 1,533 | 1,251 | 1,552 | 827 | 482 | |
| SmolVLM2 | 1,236 | 2,224 | 1,232 | 1,534 | 1,252 | 1,552 | 780 | 482 | |
| LFM2.5-VL | 501 | 1,123 | 497 | 588 | 510 | 602 | 238 | 181 | |
| Qwen3.5-0.8B | 866 | 2,243 | 853 | 942 | 878 | 972 | 903 | 836 | |
| VPsy-Flash | 750 | 1,692 | 746 | 1,047 | 763 | 1,066 | 292 | 285 | |
| Resolution | Model | Pixel 9 | Galaxy S23 | S25 Ultra | iPhone 15 | ||||
|---|---|---|---|---|---|---|---|---|---|
| CPU | GPU | CPU | GPU | CPU | GPU | CPU | GPU | ||
| nanoVLM (VPsy) | 15.6 | 27.9 | 23.2 | 17.8 | 47.0 | 51.9 | 8.3 | 52.6 | |
| SmolVLM2 | 18.2 | 28.1 | 18.5 | 18.3 | 64.8 | 49.6 | 11.4 | 53.6 | |
| LFM2.5-VL | 42.6 | 47.8 | 52.3 | 42.6 | 69.8 | 122.4 | 28.2 | 116.0 | |
| Qwen3.5-0.8B | 17.9 | 22.9 | 12.8 | 21.1 | 45.2 | 24.6 | 6.9 | 40.5 | |
| VPsy-Flash | 28.1 | 30.7 | 32.7 | 33.8 | 93.5 | 93.7 | 7.6 | 78.9 | |
| Qwen3.6-27B | GPT-4o-mini | GPT-5-chat | ||||
|---|---|---|---|---|---|---|
| Benchmark | Ours | LFM | Ours | LFM | Ours | LFM |
| OCRBench | 757 | 710 | 775 | 725 | 766 | 711 |
| DocVQA | 85.7 | 82.7 | 85.1 | 82.4 | 85.7 | 82.7 |
| ChartQA | 78.7 | 76.6 | 78.2 | 76.7 | 78.8 | 77.0 |
| InfoVQA | 49.8 | 48.9 | 50.0 | 49.0 | 50.0 | 49.0 |
| TextVQA | 79.3 | 78.8 | 78.2 | 77.1 | 80.2 | 79.5 |
| Baselines | Ours | ||||
|---|---|---|---|---|---|
| Benchmark | nanoVLM | SmolVLM2 | LFM | VPsy | VPsy-Flash |
| ChartQA | +4.5 | +4.0 | +1.6 | +1.8 | +2.3 |
| DocVQA | +5.0 | +6.1 | +4.4 | +5.1 | +4.4 |
| InfoVQA | +11.0 | +11.4 | +5.6 | +6.5 | +6.3 |
| TextVQA | +9.6 | +10.7 | +8.9 | +8.4 | +8.1 |
| OCRBench | +35 | +8 | +31 | +31 | +39 |
| Benchmark | Zero-shot | Full Recipe | |
|---|---|---|---|
| Document Understanding & OCR | |||
| OCRBench | 709 | 738 | +29 |
| DocVQA | 85.4 | 85.1 | -0.3 |
| ChartQA | 69.4 | 77.4 | +8.0 |
| InfoVQA | 48.8 | 51.1 | +2.3 |
| TextVQA | 73.3 | 75.6 | +2.3 |
| Benchmark | Overlapping images |
|---|---|
| SEEDBench | 4,463 |
| ChartQA | 1,611 |
| ScienceQA | 1,610 |
| POPE | 1,142 |
| AI2D | 631 |
| DocVQA | 560 |
| Stage | Corpus | Description | #Examples |
| 1 | Filtered Nemotron-V3 [ 35 ] | Decontam. + Single-image filtering; think tokens stripped | 5,950,891 |
| 2 | Upperbound Mixed (full) | Filtered Nemotron-V3 [ 35 ] + Sampled FineVision [ 50 ] + MM-IFEngine [ 9 ] | 7,527,286 |
| UPMB2M | Capability-balanced 2M subset of upperbound Mixed | 2,000,000 | |
| 3 | 3Bsynth | Synthetic / full-real preference-style mix | 656,160 |
| MathEnrich (total) | Decontaminated math/chart/geometry SFT | 448,088 | |
| MathV360K (filtered) [ 41 ] | Kept math/chart/science sources only | 176,879 |