LensVLM-9B is a 9 billion parameter vision-language model from Apple, built on Qwen3.5-9B-Base. It reads long documents as rendered images at 5x, 10x or 15x compression and uses learned tools to expand only the relevant pages back to full resolution. Apple reports accuracy matching the full-text baseline at roughly 4.3x effective compression and results above retrieval, text-compression and visual-compression baselines up to roughly 10.1x across seven text QA benchmarks. Weights are published on Hugging Face under the Apple Machine Learning Research Model License, with the accompanying code under the Apple Sample Code License.
A solid 9B-parameter dense language model from Apple. A pragmatic middle-ground choice when you need open weights without a flagship-sized footprint. Newly released, so production-readiness is still being shaken out.
Generated from this model’s benchmarks and ranking signals. Editor reviews refine it over time.
Access model weights, configuration files, and documentation.
No benchmark data available for this model yet.
The top devices for this model at 4-bit, ranked by fit and speed.
| Device | Grade | Speed | VRAM |
|---|---|---|---|
| AMD Radeon RX 7700 XTAMD | SS | 57.8 tok/s | 6.0 GB |
| Intel Arc B580Intel | SS | 61.0 tok/s | 6.0 GB |
| NVIDIA GeForce RTX 4070NVIDIA | SS | 67.5 tok/s | 6.0 GB |
| NVIDIA GeForce RTX 4070 SUPERNVIDIA | SS | 67.5 tok/s | 6.0 GB |
| NVIDIA GeForce RTX 5060 Ti 8GB |

Explore the Provider
Aggregate stats, leaderboard, release timeline, and benchmark coverage across every Apple model we track.
| SS |
| 60.0 tok/s |
| 6.0 GB |
See how different quantization levels affect VRAM requirements and quality for this model.
| Format | VRAM Required | Quality | |
|---|---|---|---|
| Q2_K | 4.1 GB | Low | |
| Q4_K_MRecommended | 6.0 GB | Good | |
| Q5_K_M | 6.9 GB | Very Good | |
| Q6_K | 8.0 GB | Excellent | |
| Q8_0 | 10.2 GB | Near Perfect | |
| FP16 | 18.8 GB | Full |
LensVLM-9B is a 9 billion parameter dense vision-language model from Apple, post-trained on top of Qwen3.5-9B-Base. It is not a general-purpose chat VLM. It is a document reader built around one specific trick: render a long document to page images at 5x, 10x, or 15x compression, let the model scan the compressed thumbnails, then use learned tools to pull only the relevant pages back to full resolution before answering.
That matters because the standard approach to long documents, tokenize everything, stuff it into a long context window, pay the prefill cost, collapses under its own arithmetic. LensVLM sidesteps it. Apple reports accuracy comparable to the full-text upper bound at roughly 4.3x effective compression, and results above retrieval-based, text-compression and visual-compression baselines up to roughly 10.1x across seven text QA benchmarks. The gains hold on multimodal documents and code understanding, and grow as compression increases.
The category it occupies: single-architecture, mid-size local VLM for multi-page document QA. Its real competitors are not chat models, they're retrieval pipelines and text-compression schemes. If your workload is "answer a question about a 200-page PDF," LensVLM is architected for exactly that, and it will beat a naive RAG stack on layouts where chunking destroys the cue. If your workload is general conversation with occasional image input, it is the wrong tool.
Weights are on Hugging Face (apple/LensVLM-9B) under the Apple Machine Learning Research Model License. The accompanying code is separate, under the Apple Sample Code License. Read both before commercial deployment, neither is a standard OSI license, and the model license inherits constraints from the Qwen base.
LensVLM-9B is dense, not Mixture-of-Experts. All 9B parameters are active on every forward pass. For local inference this has one clear consequence: VRAM scales predictably with quantisation, with no expert-routing tricks to exploit. There's no "9B total, 2B active" discount here. What you see is what you pay for.
Core specs:
read_page, plus high-resolution image expansionThe mechanism is worth understanding before you deploy it. The vision encoder maps a fixed-size image to a fixed number of visual tokens. Rendering a page smaller therefore is compression, it is a continuous knob, not a discretised one. The failure mode is obvious: shrink characters below the encoder's effective resolution and they become unreadable. LensVLM's post-training teaches the model to tolerate that degradation on the scan pass, identify which pages look relevant from degraded thumbnails, and then call a tool to expand just those pages. Apple's analysis shows the model shifts its reliance from visual reading to expanded content as compression rises, which is the behaviour you want.
Apple also publishes tool-choice guidance that directly affects your pipeline: text expansion for rendered text, high-resolution image expansion for native documents whose layout carries task-relevant signal. Tables, forms, and multi-column PDFs are the latter case.
Practically, this means LensVLM is not a drop-in generate() call. It runs a multi-turn trajectory, scan, reason inside <think> tags, emit a tool call, receive tool output, answer. Budget for the harness, not just the weights.
The declared capability set is chat, vision, summarization, and instruction-following. In practice, the useful surface area is narrower and more valuable than that list suggests:
What it is not for: open-ended visual reasoning about photographs, real-time video, or image generation. There's no audio and no native tool ecosystem beyond the trained read/expand tools.
These are estimates derived from parameter count and standard quantisation overhead, Apple has not published an official hardware table. Add headroom for the vision encoder, KV cache, and the rendered page tokens.
| Precision | Weights | Realistic total VRAM |
|---|---|---|
| bf16 / FP16 | ~18 GB | 22–24 GB |
| Q8_0 | ~9.5 GB | 13–15 GB |
| Q5_K_M | ~6.5 GB | 10–11 GB |
| Q4_K_M | ~5.5 GB | 8–10 GB |
Context is the wildcard. Because page images are the input, long documents inflate the KV cache fast. A 24 GB card at bf16 will fit the weights comfortably and then run out of room on a deep multi-page context.
Q4_K_M for most users. It's the standard quality-per-byte sweet spot, and for a 9B model the perplexity hit is small. Push to Q5_K_M or Q8_0 if you have the VRAM and your task is precision-sensitive, long-document fact extraction tolerates quantisation less gracefully than open chat, because the model is already reading degraded characters.
Approximate, hardware- and quantisation-dependent, generation phase only:
Prefill is the number that will actually shape your UX. Rendered page images mean large prefill batches, and the tool-expansion round trip adds a second prefill. Measure end-to-end document latency, not tokens/s.
Apple's reference path is the official repo:
1git clone https://github.com/apple-aiml-research/ml-lensvlm2cd ml-lensvlm3pip install -r requirements.txt4python scripts/run_demo.py --model apple/LensVLM-9B
For your own document:
1python demo.py --model apple/LensVLM-9B \2 --text_file document.txt \3 --question "What is the main finding?" \4 --compression 10x
On Ollama: it's the lowest-friction way to run quantised 9B models locally, and once GGUF conversions of LensVLM-9B circulate it will be the fastest route to a first run. Be aware that generic llama.cpp and Ollama runtimes do not ship the trained tool-call loop, you get a VLM, not the scan-and-expand inference framework. For anything resembling production, use Apple's harness and treat Ollama as a smoke test. Start at --compression 10x; drop to 5x if accuracy is marginal, climb to 15x only when context pressure forces it.
vs. Qwen3.5-9B-Basethe same backbone without the vision post-training. Identical parameter count, so identical VRAM and roughly identical throughput at equivalent quantisation. Qwen3.5-9B is text-in, text-out: faster prefill, no encoder overhead, and the right choice when your documents are already clean digital text and your context window can hold them. LensVLM wins when documents are long, page-structured, or image-native, or when tokenizing the full corpus is the bottleneck.
vs. Gemma 3 12Ba larger general-purpose VLM with a broader multimodal surface and a permissive license. It handles photographs, charts, and general visual chat that LensVLM was never trained for. It does not implement selective expansion, so long-document QA means either a very large context or an external retrieval layer, and Apple's results put LensVLM ahead of retrieval baselines as compression climbs. Choose Gemma 3 12B for breadth and licensing simplicity; choose LensVLM-9B for depth on long page-structured documents.
The honest framing: LensVLM-9B is a specialist with a narrow but deep advantage. If your problem is multi-page document QA and you're willing to run the harness, it's the better architecture. If you need one model to do everything, it isn't.
Energy cost on Raspberry Pi 5 (8GB) (~4.6 tok/s, Q4_K_M) vs flagship API pricing.
| Source | Cost per 1M tokens |
|---|---|
Local (energy only)LensVLM-9B on Raspberry Pi 5 (8GB) · ~4.6 tok/s · 12W | $0.088 |
GPT-6.1 SolOpenAI · in $2.00 · out $10.00 | $4.40 |
Claude Sonnet 5.5Anthropic · in $2.00 · out $10.00 | $4.40 |
Gemini 4 ArgonGoogle · in $2.00 · out $10.00 | $4.40 |
Grok 4.5xAI · in $2.00 · out $6.00 | $3.20 |
API prices blended at 70% input / 30% output.
Hardware amortisation not included. Run the full ROI calculator for payback math.
Cheapest current cloud rentals with at least 6 GB VRAM, refreshed hourly.
Advertising disclosure: we earn commissions when you shop through the links below.
| Option | Cost / GPU-hour |
|---|---|
NVIDIA Tesla V100 16GBVast.ai · Spot · 16 GB VRAM | $0.05 |
NVIDIA GeForce RTX 3090Vast.ai · Spot · 24 GB VRAM | $0.07 |
NVIDIA GeForce RTX 5060 TiVast.ai · Spot · 16 GB VRAM | $0.07 |
NVIDIA GeForce RTX 4060 TiVast.ai · Spot · 8 GB VRAM | $0.07 |
NVIDIA GeForce RTX 4070Vast.ai · Spot · 12 GB VRAM | $0.08 |
Per-GPU rate across RunPod, the Vast.ai marketplace, DigitalOcean, and Vultr.
Spot tier is interruptible. Plan for restarts when comparing against on-demand prices.