Nemotron-3.5-30B-A3B-Antislop-FTPO-V2, LoRA adapter
The 842 MB LoRA adapter produced by the second Antislop + FTPO run against NVIDIA's
Nemotron 3.5 30B-A3B. This repo holds the training delta on its own.
To run the model, use the merged checkpoint instead:
thoughtworks/Nemotron-3.5-30B-A3B-Antislop-FTPO-V2.
That repo carries the full model card and benchmark tables. This one covers what is
specific to the adapter.
V2 differs from
V1
in scope rather than method: general-domain prompts instead of creative-writing only, a
larger and more varied human baseline, five pipeline iterations instead of two, and
punctuation/typography profiling that V1 could not do at all.
Configuration
| |
|---|
| PEFT type | LoRA |
| Target modules | lm_head only |
| Rank (r) | 256 |
| Alpha | 256 |
| Dropout | 0.05 |
| Trainable params | about 842 MB in BF16 |
| Steps / epochs | 434 / 2 |
| Learning rate | 5.45e-05 (auto-scaled) |
| Final train loss | 2.065 |
| Preference pairs | 15,000 (12,000 lexical, 3,000 typography) |
Targeting lm_head alone is inherited from V1 and from the Antislop paper's
lm_head-only precedent on Llama-3.3-70B. FTPO adjusts final-token logits, so the output
projection is where the preference lives, and constraining training to it keeps the rest of
the model's capabilities intact. The same constraint caps achievable suppression, and — see
the merged card — it is also why the typography results are mixed.
Usage
1from transformers import AutoModelForCausalLM, AutoTokenizer
2from peft import PeftModel
3
4base_id = "nvidia/NVIDIA-Nemotron-3.5-Lightning-30B-A3B-BF16"
5model = AutoModelForCausalLM.from_pretrained(
6 base_id, torch_dtype="bfloat16", device_map="auto", trust_remote_code=True
7)
8model = PeftModel.from_pretrained(model, "thoughtworks/Nemotron-3.5-30B-A3B-Antislop-FTPO-V2-LoRA")
9model = model.merge_and_unload()
10
11tok = AutoTokenizer.from_pretrained("thoughtworks/Nemotron-3.5-30B-A3B-Antislop-FTPO-V2-LoRA")
The tokenizer, chat template, and special-token map bundled here are byte-identical to the
base model's, included so the adapter is self-sufficient.
Merging without 66 GB of RAM
Because the adapter targets
lm_head only, exactly one tensor changes. You do not need to
load the whole model: read the shard holding
lm_head.weight, add
(B @ A) * (alpha / r),
and copy or hardlink the rest unchanged. Accumulate the delta in float32 before casting
back — the per-element deltas are around 1e-05 and adding them in bf16 rounds most of them
to zero, silently discarding the fine-tune. A reference implementation is in the
project repo.
Headline result
Measured with the merged checkpoint on 952 held-out prompts across six domains, Antislop
sampler off:
| Metric | Baseline | FTPO V2 |
|---|
| Banlist suppression (overall) | 0% | 43.21% |
| Banlist suppression (creative slice, n=388) | 0% | 67.78% |
| MMLU (600 q) | 0.7583 | 0.7567 |
| GSM8K (250 q) | 0.9040 | 0.9160 |
| Lexical diversity (index, baseline=100) | 100.00 | 99.98 |
Full tables, per-domain results, and the typography findings are in the
merged model card.
What the adapter suppresses
The 8,033-pattern banlist (4,342 n-grams + 3,990 slop phrases, plus typography regexes) is
measured from this model's own output against a human baseline, not hand-written. It is
1.9x the size of V1's 4,267.
Suppression by domain, sampler off:
| Domain | n | Baseline /100k | V2 /100k | Suppression |
|---|
| creative | 388 | 218.13 | 70.29 | 67.78% |
| real_user | 275 | 199.10 | 142.56 | 28.40% |
| instruction_following | 71 | 49.80 | 36.00 | 27.71% |
| factual_qa | 106 | 230.63 | 197.41 | 14.40% |
| explanatory | 82 | 237.60 | 213.54 | 10.13% |
| conversational | 30 | 249.92 | 238.30 | 4.65% |
Known limitations
Carried over from the merged card, because they matter before you use this:
- Unspaced em dashes get worse, not better (38.9x human to 52.3x). Features with an
exact substitute are learnable; features needing a structural rewrite are not.
- The banlist contains prompt echoes (character names, code tokens, non-English function
words) which understate true suppression.
- No writing-quality judge was run for V2.
Not included
The frozen FTPO reference adapter used during training (ref/) and the optimizer state are
not published here. Both are training-time artifacts with no inference use.
License
OpenMDW-1.1, matching NVIDIA's public Nemotron 3.5
Lightning releases. The Antislop framework is MIT-licensed.
Citation
The method was published at ICLR 2026:
1@inproceedings{paech2026antislop,
2 title = {Antislop: A Comprehensive Framework for Identifying and Eliminating
3 Repetitive Patterns in Language Models},
4 author = {Paech, Samuel and Roush, Allen and Goldfeder, Judah and Shwartz-Ziv, Ravid},
5 booktitle = {The Fourteenth International Conference on Learning Representations},
6 year = {2026},
7 url = {https://openreview.net/forum?id=gLcyM1khyp},
8 eprint = {2510.15061},
9 archivePrefix = {arXiv},
10 primaryClass = {cs.CL}
11}