qwen36-27b-sae2m-l42 is an open-weight model from De Schamphelaere, released under Apache License 2.0. Its published files total 45.2 GB.
A dictionarylearning-format BatchTopK sparse autoencoder on the post-layer-42 residual stream of Qwen/Qwen3.6-27B (d = 5120), with F = 2,097,152 (2^21, 409.6x) features and k = 64.
Model Card
By De Schamphelaere, published under apache-2.0, revision de89b1c1eb70.
A dictionarylearning-format BatchTopK sparse autoencoder on the post-layer-42 residual stream of Qwen/Qwen3.6-27B (d = 5120), with F = 2,097,152 (2^21, 409.6x) features and k = 64. Companion to the 131,072-feature SAE at ceselder/qwen36-27b-sae-l42 (same layer, same recipe, 16x smaller dictionary). BatchTopK (Bussmann et al.), dictionarylearning-style trainer run feature-parallel over 8 GPUs (each rank owns 262,144 features; global top-k via all-gather, all-reduced reconstruction, aux-k loss alpha 1/32 with 40,960 aux features, learned activation threshold with EMA beta 0.999). lr 1.77e-5, warm-up 1,000 steps, decay from step 195,312, batch 4,096 tokens x 244,140 steps = 1.0e9 tokens…
Read De Schamphelaere's full model card
Qwen3.6-27B layer-42 BatchTopK SAE — 2,097,152 features (k = 64)
A dictionary_learning-format BatchTopK sparse autoencoder on the post-layer-42 residual stream of Qwen/Qwen3.6-27B (d = 5120),
with F = 2,097,152 (2^21, 409.6x) features and k = 64. Companion to the 131,072-feature SAE at
ceselder/qwen36-27b-sae-l42 (same layer, same recipe, 16x smaller dictionary).
Files
| path | what |
|---|---|
saes_Qwen_Qwen3.6-27B_batch_top_k/resid_post_layer_42/trainer_0/ae.pt |
the SAE (43 GB, bf16 matrices): encoder.weight [F, d], encoder.bias [F], decoder.weight [d, F], b_dec [d], k, threshold (dictionary_learning BatchTopKSAE keys) |
.../trainer_0/config.json |
training config (below) |
verify.json |
held-out reconstruction metrics on 20M fresh Ultra-FineWeb tokens |
maxacts_top5.pt + maxacts_top5.summary.json |
for EVERY feature its top-5 max-activating 32-token windows (token ids + activations, window ends at the peak token) over a 1.0B-token Ultra-FineWeb stream; fire-rate / peak-activation percentiles in the summary |
data/examples.parquet |
10,485,760 rows = every feature x its top-5 windows, DECODED: feature_id, rank, activation, text, peak_token, window_len, doc_idx, peak_position, fire_count_1b (browse it in the Data Studio tab) |
feature_split.json / .npz |
the fixed feature split used by the MAEMM inverter papers: eval 100,000 / RL 150,000 / SFT 1,847,152 (seed 2026) |
Training
- BatchTopK (Bussmann et al.),
dictionary_learning-style trainer run feature-parallel over 8 GPUs (each rank owns 262,144 features; global top-k via all-gather, all-reduced reconstruction, aux-k loss alpha 1/32 with 40,960 aux features, learned activation threshold with EMA beta 0.999). lr 1.77e-5, warm-up 1,000 steps, decay from step 195,312, batch 4,096 tokens x 244,140 steps = 1.0e9 tokens streamed fromopenbmb/Ultra-FineWeb(en, contexts of 512, documents from index 100,000 on), activations scaled to unit mean norm (norm factor 83.37, folded back into the weights), bf16 matrices. - Caveat, please read: the training-time streamer sharded the dataset AFTER applying the document skip, so all 8 ranks streamed the SAME
documents — the run saw ~125M unique tokens, each 8 times, rather than 1B unique tokens. The bug was found after training and fixed
before the max-activation scan (
maxacts_top5.ptis over the true 1B distinct tokens). Held-out reconstruction is nevertheless on par with the 131k SAE (below); a retrain on 1B distinct tokens would likely improve it further.
Held-out metrics (verify.json; 20,004,864 fresh Ultra-FineWeb tokens, single stream)
| explained variance | EV (per batch) | L0 | features that fire | learned threshold |
|---|---|---|---|---|
| 0.711 | 0.698 | 67.5 | 100% (2,097,152 / 2,097,152 over the 1B-token scan; 0 dead) | 1.6828 |
For comparison the 131k SAE scores EV 0.693-0.704 at L0 64 with 0.017% dead features.
Fire-rate percentiles over the 1B-token scan (fraction of tokens): p1 2.0e-6, p50 5.0e-6, p95 6.5e-5, p99 4.5e-4. Peak activation percentiles: p1 3.8, p50 6.3, p95 17.8, p99 25.3.
Loading
import torch
sd = torch.load("saes_Qwen_Qwen3.6-27B_batch_top_k/resid_post_layer_42/trainer_0/ae.pt", map_location="cpu") # 43 GB
W_enc, b_enc, W_dec, b_dec, thr = sd["encoder.weight"], sd["encoder.bias"], sd["decoder.weight"], sd["b_dec"], float(sd["threshold"])
# encode: pre = (h - b_dec) @ W_enc.T + b_enc ; acts = pre * (pre > thr) (BatchTopK inference uses the learned threshold, not top-k)
# decode: h_hat = acts @ W_dec.T + b_dec
h is the raw post-layer-42 residual (model.layers[42] output) of Qwen3.6-27B; the norm factor is already folded in.
Provenance
Trained 2026-09-11 (Modal, 8 x B200, ~8 h) for the MAEMM activation-to-text inverter project (MATS, Neel Nanda stream). Max-act windows:
docs_used 747,623, tokens_seen 1,000,013,824. Related datasets: ceselder/maemm-27b-heldout.
Identity and Version
- Repository
- ceselder/qwen36-27b-sae2m-l42
- Publisher
- De Schamphelaere
- Task
- Not stated by the source
- Modality
- Other
- Library
- Not stated by the source
- Parameters
- Not stated by the source
- Languages
- Not stated by the source
- Revision
- de89b1c1eb70f5f4b1a18c0a3ca848e7d71d6e6b
- First published
- 2026-09-20
- Last updated
- 2026-09-20
Files and Weights
10 files, 45.2 GB in total. The weights are 3 files totalling 44.5 GB in npz, pt.
Every file
| File | Type | Size | SHA-256 |
|---|---|---|---|
| feature_split.npz | Weights | 8.4 MB | dd1e1c424794 |
| maxacts_top5.pt | Weights | 1.5 GB | b96d66cee676 |
| saes_Qwen_Qwen3.6-27B_batch_top_k/resid_post_layer_42/trainer_0/ae.pt | Weights | 43.0 GB | bc2819a094ce |
| feature_split.json | Configuration | 478 B | — |
| maxacts_top5.summary.json | Configuration | 613 B | — |
| saes_Qwen_Qwen3.6-27B_batch_top_k/resid_post_layer_42/trainer_0/config.json | Configuration | 1.6 KB | — |
| verify.json | Configuration | 880 B | — |
| README.md | Documentation | 4.3 KB | — |
| data/examples.parquet | Other | 661.5 MB | cb15d17f46f1 |
| .gitattributes | Repository | 1.5 KB | — |
License and Download
- License
- apache-2.0
- Access
- Open weights, no gate
- Download size
- 44.5 GB
Released by De Schamphelaere through its official repository on Hugging Face. Read the license.
Built From
- Derived from Qwen/Qwen3.6-27B
Memory Requirements
| Precision | Weights in memory |
|---|---|
| As published | 44.5 GB |
Weights only, from the published parameter count; the key-value cache and runtime add to this.
Questions About qwen36-27b-sae2m-l42
Can I use qwen36-27b-sae2m-l42 commercially?
Yes. qwen36-27b-sae2m-l42 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.