Views
No views yet
*/) and a finetuned (*_finetuned/) checkpoint:| Variant | What changed |
|---|---|
original | Stock Qwen3-0.6B (RMSNorm everywhere) — control |
no_qk_norm | QK-norm removed |
no_layer_norm | Pre/post layer RMSNorm removed |
no_all_norm | All RMSNorm layers removed |
replace_l2norm | RMSNorm → L2Norm |
replace_layernorm | RMSNorm → LayerNorm |
replace_scalenorm | RMSNorm → ScaleNorm |
Qwen3RMSNorm modules — ablations selectively remove or substitute these.<variant>/model.pt — base (modified-arch, untrained) state dict, ~1.5 GB<variant>/metadata.json — variant name, base model id, norm counts, num params<variant>_finetuned/model.pt — finetuned state dict, ~9.9 GB (full precision)<variant>_finetuned/checkpoint-9500/, checkpoint-9753/ — intermediate Trainer checkpoints<variant>_finetuned/train_metrics.json — per-step training metrics<variant>_finetuned/{tokenizer.json,tokenizer_config.json,chat_template.jinja} — tokenizer (shared across variants, also in tokenizer/)all_train_metrics.json — aggregated final metrics across all variantsall_train_metrics.json (3 epochs each, identical data):| Variant | Final train loss |
|---|---|
| original | 1.331 |
| no_qk_norm | 6.567 |
| no_layer_norm | 0.000 (collapsed) |
| no_all_norm | 0.000 (collapsed) |
1import torch
2from transformers import AutoModelForCausalLM
3
4# Load the modified architecture (you need the matching arch code from the project)
5model = AutoModelForCausalLM.from_pretrained("Qwen/Qwen3-0.6B")
6state = torch.load("model.pt", map_location="cpu")
7model.load_state_dict(state, strict=False)transformers — you need to apply the variant's structural patch (drop/replace norm layers) before loading. See nanochat_adapter.py and the project's ablation harness for reference.