Instructions to use thoughtworks/Nemotron-3.5-30B-A3B-Antislop-FTPO-V2-LoRA with libraries, inference providers, notebooks, and local apps. Follow these links to get started.
- Libraries
- PEFT
How to use thoughtworks/Nemotron-3.5-30B-A3B-Antislop-FTPO-V2-LoRA with PEFT:
Task type is invalid.
- Notebooks
- Google Colab
- Kaggle
Configuration Parsing Warning:In adapter_config.json: "peft.task_type" must be a string
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
from transformers import AutoModelForCausalLM, AutoTokenizer
from peft import PeftModel
base_id = "nvidia/NVIDIA-Nemotron-3.5-Lightning-30B-A3B-BF16"
model = AutoModelForCausalLM.from_pretrained(
base_id, torch_dtype="bfloat16", device_map="auto", trust_remote_code=True
)
model = PeftModel.from_pretrained(model, "thoughtworks/Nemotron-3.5-30B-A3B-Antislop-FTPO-V2-LoRA")
model = model.merge_and_unload()
tok = 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:
@inproceedings{paech2026antislop,
title = {Antislop: A Comprehensive Framework for Identifying and Eliminating
Repetitive Patterns in Language Models},
author = {Paech, Samuel and Roush, Allen and Goldfeder, Judah and Shwartz-Ziv, Ravid},
booktitle = {The Fourteenth International Conference on Learning Representations},
year = {2026},
url = {https://openreview.net/forum?id=gLcyM1khyp},
eprint = {2510.15061},
archivePrefix = {arXiv},
primaryClass = {cs.CL}
}
- Paper: ICLR 2026 poster · OpenReview · arXiv:2510.15061
- Code: github.com/sam-paech/auto-antislop (MIT)
- Downloads last month
- 24