⚠️ This model will silently misbehave if you load it normally
RoPE was disabled at runtime, by forcing the rotary embedding to return identity
(cos=1, sin=0). That is not expressible in a config.json, so this repo's config is a stock
Qwen3 config declaring rope_type: "default" — byte-identical to the control model's.
If you call from_pretrained and generate, RoPE will be active on a model trained without it.
You will get degenerate output, no exception, and no warning.
import torch
from transformers import AutoModelForCausalLM, AutoTokenizer
model_id = "vhallac/qwen3-0.6b-nope-recal-1b"
model = AutoModelForCausalLM.from_pretrained(model_id, dtype=torch.bfloat16)
tokenizer = AutoTokenizer.from_pretrained(model_id)
rotary = model.model.rotary_emb
_original_forward = rotary.forward
def _identity_forward(*args, **kwargs):
cos, sin = _original_forward(*args, **kwargs)
return torch.ones_like(cos), torch.zeros_like(sin)
rotary.forward = _identity_forward
model.eval()
A quick way to confirm the patch took: held-out FineWeb-Edu perplexity should be ≈ 16.9. If you
see a number in the thousands, the patch did not apply.
What it is for
Part of the rope-as-scaffold
research program, which tested the hypothesis that RoPE is a training scaffold that can be
discarded after pretraining.
The finding was that it cannot. This model is the evidence: it is what you get when you remove RoPE
and recalibrate properly, and it is measurably worse than the same recipe with RoPE retained —
across perplexity, local-order sensitivity, retrieval, and long-context behaviour.
Notably, the degradation is not because positional information vanishes. Probing shows position
is still decodable and the emergent positional subspace substantially reconstructs the one RoPE
supplied. The model reconstitutes the representation and still cannot do the job.
Results
Held-out FineWeb-Edu perplexity, fp32, 5M-token frozen eval slice, identical harness for all three:
Table with columns: model, CE, PPL| model | CE | PPL |
|---|
Qwen/Qwen3-0.6B (base, no extra training) | 3.0819 | 21.80 |
qwen3-0.6b-rope-recal-1b (control, RoPE on) | 2.6569 | 14.25 |
| this model (RoPE removed) | 2.8260 | 16.88 |
Against the base model this looks like an improvement (21.80 → 16.88). Against the correct
control it is a regression: +0.169 nats / 18.4% higher perplexity, persisting after a full
recalibration. The apparent gain over base is domain adaptation; the RoPE penalty is hiding
underneath it.
Known limitations
- Effective context ≈ 2048 tokens, despite
max_position_embeddings: 40960 inherited from the
base config. Beyond the recalibration window it degrades sharply: PPL ≈ 51 at 4096 and ≈ 298 at
8192, where the RoPE base model stays flat at ≈ 21.5.
- Retrieval is degraded. On synthetic induction (copy a repeated random span), gain falls from
the control's 12.0 nats to 11.2 at distance 512, and the gap widens with distance (12.9 → 9.4 at
distance 1536 versus base).
- Local-order acuity is degraded, measurably at short scrambling windows (w ≤ 8).
- English-only recalibration corpus (FineWeb-Edu), while Qwen3 is multilingual + code + math. Expect
domain skew relative to base beyond the eval domain.
- Single seed, single recipe, 0.6B scale. Recalibrated with a cosine schedule at a 1B-token budget;
a larger budget was not tested.
Training
Table | |
|---|
| base | Qwen/Qwen3-0.6B @ c1899de289a04d12100db370d81485cdf75e47ca |
| rotary | forced to identity for the entire run |
| corpus | HuggingFaceFW/fineweb-edu, sample-10BT, streamed in provider order |
| tokens | 1B (1907 steps × 524,288 tokens), context 2048 |
| optimizer | AdamW β=(0.9, 0.95), wd 0.1, grad clip 1.0 |
| LR | 1e-3 peak, 2% warmup, cosine → 10% of peak |
|
training_metrics.csv and training_manifest.json are included in this repo for full provenance.
An earlier version of this checkpoint trained at LR 3e-5 plateaued at PPL ≈ 35; that learning rate
was under-tuned and the run was redone at 1e-3. This repo is the corrected run.
Reproduction and full analysis
- Code, specs, and lab notebook: vhallac/crockpot-experiments
- The controlled comparison that produced the headline result:
NOTEBOOK.md, entry 2026-07-28 — RS-amendment-2-3
- Training recipe of record:
RS1-spec.md §10.C
License
Apache 2.0, inherited from Qwen3-0.6B.