Skip to page content
SAVRN
Search Plan a project

Open-weight model · Image and text to text

nanoVLM-230M-packing-ab

by Arjun Srinivasan Ambalam Arjun1995/nanoVLM-230M-packing-ab

nanoVLM-230M-packing-ab is an open-weight model for image and text to text from Arjun Srinivasan Ambalam, released under Apache License 2.0. Its published files total 6.7 KB.

Four checkpoints, not one model. This repository is a controlled experiment: two training arms × two seeds, 10,000 steps each, identical in every respect except how packed training rows are masked. The comparison is the artifact.

Parameters—
Context—
Weights6.7 KB
Licenseapache-2.0
AccessOpen weights
Monthly Downloads—

Model Card

By Arjun Srinivasan Ambalam, published under apache-2.0, revision 66134ba76864.

Four checkpoints, not one model. This repository is a controlled experiment: two training arms × two seeds, 10,000 steps each, identical in every respect except how packed training rows are masked. The comparison is the artifact. Any single checkpoint here is a weak 230M research model and is not meant for use. Each arm lives on its own branch: Weights are fp32, exactly as trained — these are the tensors every number below was computed from. Optimizer state is not included. nanoVLM packs several unrelated samples into one 4096-token row to avoid padding waste. Upstream's packing applies a single causal mask over the whole row, so a sample attends into the earlier, unrelated samples packed…

Read Arjun Srinivasan Ambalam's full model card

nanoVLM 230M — cross-document attention masking A/B

Four checkpoints, not one model. This repository is a controlled experiment: two training arms × two seeds, 10,000 steps each, identical in every respect except how packed training rows are masked. The comparison is the artifact. Any single checkpoint here is a weak 230M research model and is not meant for use.

Each arm lives on its own branch:

revision arm lm_attn_packing_impl lm_loss_impl seed
main, C_s1 fork flex_document_causal gather 1
C_s0 fork flex_document_causal gather 0
A_s0 upstream recipe none full 0
A_s1 upstream recipe none full 1
from models.vision_language_model import VisionLanguageModel   # from the fork, see below

fork     = VisionLanguageModel.from_pretrained("Arjun1995/nanoVLM-230M-packing-ab", revision="C_s0")
baseline = VisionLanguageModel.from_pretrained("Arjun1995/nanoVLM-230M-packing-ab", revision="A_s0")

Weights are fp32, exactly as trained — these are the tensors every number below was computed from. Optimizer state is not included.

What is being tested

nanoVLM packs several unrelated samples into one 4096-token row to avoid padding waste. Upstream's packing applies a single causal mask over the whole row, so a sample attends into the earlier, unrelated samples packed beside it, and RoPE positions run continuously across document boundaries. At inference a sample is seen alone, starting from position 0 — so this is train/inference skew, not a tuning knob.

Arm A reproduces that behaviour. Arm C masks attention at document boundaries and restarts positions per document.

Arm A is upstream's recipe run on the fork's code, not a checkout of upstream, which cannot train on torch 2.14 at all. Both arms carry that compatibility fix; neither touches the loss math, the mask semantics or the data order.

Results

1× H100, SmolLM2-135M-Instruct + siglip2-base-patch16-512 (228,063,936 params), micro-batch 2 × grad-accum 8, cosine over the full 10k steps, FineVision. Within a seed, both arms train on byte-identical batches.

The decision rule was fixed before the runs: an improvement counts only if the gap between arms exceeds the spread between seeds within an arm. Both arms are scored under both masks by the same evaluator, so neither is judged on its own regime.

metric A (upstream recipe) C (fork) outcome
val loss, per-document 0.9216 0.8994 gap 0.0222 vs 0.0134 seed spread — passes
val loss, unmasked 0.9201 0.9147 gap 0.0054, inside the 0.0122 spread — fails
peak memory 48.6 / 46.8 GiB 38.4 / 36.8 GiB −10.1 GiB, replicating to 0.1 GiB
throughput 1.00× 1.2–1.7× varies with which image-tile shapes compile first

One of the two pre-registered checks did not pass, and it is reported here. That split is the signature the hypothesis predicts: the fix should help where the metric matches inference, and do nothing under a metric that rewards reading unrelated neighbours.

Downstream

Seven lmms-eval tasks, cluster-bootstrap CIs, Holm-corrected, with a control measuring what changing the training seed alone does to each task:

task pooled Δ (points) verdict
TextVQA +4.52 [+3.81, +5.26] credible
DocVQA +2.13 inconclusive
OCRBench +1.70 inconclusive
ChartQA +1.00 inconclusive
ScienceQA +0.32 inconclusive
InfoVQA +0.08 inconclusive
AI2D −1.10 inconclusive, trending against

inconclusive means undetectable at the stated minimum detectable effect, not no effect. ChartQA moves −2.84 under seed 0 and +4.84 under seed 1, with seed controls larger than either — a demonstration that single-seed benchmark deltas at this scale cannot be trusted.

Benchmark inference never packs documents for either arm, so the packing mechanism cannot mechanically explain which task moved. That remains an open question and is not claimed as proven.

Reproduce

Code, run logs, analysis scripts and the full write-ups: https://github.com/aarjunsrinivasan/nanoVLM

Limitations

  • Two seeds per arm. Training-seed variance cannot be properly estimated from two runs; the seed controls in the downstream table are the only guide to it.
  • 230M parameters, 10k steps, single GPU. These are research checkpoints, not useful models.
  • Upstream nanoVLM is required to load these; they are not transformers-compatible.

Identity and Version

Repository
Arjun1995/nanoVLM-230M-packing-ab
Publisher
Arjun Srinivasan Ambalam
Task
Image and text to text
Modality
Image and text
Library
nanovlm
Parameters
Not stated by the source
Languages
Not stated by the source
Revision
66134ba76864c0ecaadc059f1b82cb501c1b48a0
First published
2026-09-25
Last updated
2026-09-25

Files and Weights

2 files, 6.7 KB in total.

Documentation1 file · 5.2 KB
Repository1 file · 1.5 KB
Every file
FileTypeSizeSHA-256
README.mdDocumentation5.2 KB —
.gitattributesRepository1.5 KB —

License and Download

License
apache-2.0
Access
Open weights, no gate
Download from Arjun Srinivasan Ambalam

Released by Arjun Srinivasan Ambalam through its official repository on Hugging Face. Read the license.

Built From

Questions About nanoVLM-230M-packing-ab

Can I use nanoVLM-230M-packing-ab commercially?

Yes. nanoVLM-230M-packing-ab is released under Apache License 2.0. The Apache License 2.0 is a permissive open-source license. It permits commercial use, modification and redistribution. It requires keeping the license and copyright notices and any NOTICE file, stating significant changes, and it includes an express patent grant from contributors.

Similar Models

Non-uniform GGUF quantizations of a 512-expert MoE, produced with GSQ and RCO, with a vision projector for multimodal use. This repository provides GGUF quantizations of Qwen3.8-Flash-Next at four sizes, together with the model's vision projector (mmproj) for multimodal use. In contrast to uniform quantization, which applies a single quantization type to all weight tensors, each model here assigns a separate quantization type to every tensor. The assignment is obtained by a gradient-based search that allocates precision according to per-tensor sensitivity, subject to a total size budget. The resulting files are standard GGUF and run unmodified in llama.cpp, Ollama, and LM Studio. A…

Open weights apache-2.0 gguf

Model · Image and text to text

Qwen3.8-27B-iMatrix-NVFP4-MTP-GGUF

Michał Piszczek

I built this quant because the ready-made FP4 file answered the wrong question. It was fast, but on my short WikiText-2 control it scored 6.4949 PPL. Plain Q40 scored 6.3798. The first higher-quality hybrid went too far the other way: good perplexity, 34.19 tok/s, and no comfortable room for 256K plus vision. This is the build that survived both gates. It is a 17.1 GB, 5.01 BPW mixed-precision GGUF of Qwen/Qwen3.8-27B. It keeps large, tolerant matrices in native NVFP4 and spends more bits on selected attention, Gated DeltaNet, and late FFN tensors. The trained MTP layer remains embedded in the same GGUF. This is not a fine-tune. I built the private calibration workload from 5,472 messages…

Open weights apache-2.0

Model · Image and text to text

Huihui-Qwen3.8-27B-abliterated-GGUF

Huihui.ai

This is an uncensored version of Qwen/Qwen3.8-27B created with abliteration (see remove-refusals-with-transformers to know more about it). This is a crude, proof-of-concept implementation to remove refusals from an LLM model without using TransformerLens. The newly added Huihui-Qwen3.8-27B-abliterated-Underdog-Saluki series come from ConwayResearch/Underdog-Saluki-27B-1.0 and ukisai/Swift-1.5-Qwen3.8-27B-GSQ-RCO-GGUF. Only layers 22 to 52 (0-based indexing) have been ablated, while the other layers remain unablated. It may come with a small disclaimer warning. Due to ConwayResearch/Underdog-Saluki-27B-1.0 not providing an imatrix file, we will attempt to perform ablation by mixing the GGUF…

Open weights apache-2.0 transformers

Qwen3.8-27B uncensored by HauhauCS 0/465 Refusals. This is the Aggressive variant: direct answers, no refusal behavior, and minimal preamble on hard prompts. Every text GGUF preserves Qwen3.8's native NextN head, and this release adds HauhauCS FastMTP: a specific acceleration sidecar qualified across the complete quant lineup at maximum native context. Vision is included through the separate BF16 projector. No changes to datasets or intended capabilities. This release preserves Qwen3.8-27B's text, reasoning, agentic, image, and video capabilities while applying the HauhauCS Aggressive uncensoring profile. Pick Aggressive when you specifically want the model to get to the answer without…

Open weights apache-2.0

Model · Image and text to text

Qwen3.8-27B-GGUF

GGML Org

Run with https://llama.app - https://huggingface.co/Qwen/Qwen3.8-27B - https://huggingface.co/incoai/Qwen3.8-27B-DFlash2 - add info

Open weights apache-2.0

Model · Image and text to text

Tiel-Coder-35B-A3B-GGUF-MTP

Saga

Tiel is the fast coder of the arsenal. At 4-bit quantization and 23 GB it fixes real codebase issues at the rate (and speed, with the right GPU) of Opus 4.6 medium, while holding the best multi-turn conversation of any local model we have measured. It is also cheerfully bad at trivia. Pick it for work. Pick something else for exams. Where it sits against the other local builds Multi-turn conversation Reasoning and knowledge Where it stands. On 25 SWE-bench-Live problems Tiel fixes 12 — the same as Opus 4.6 (medium), four more than Ornith-1.5 itself, three more than Nail, and four more than Sonnet 5 (medium). Among models of its own class it is first; the ones ahead are dense 27Bs and Opus…

Open weights mit gguf