sae-lens 6.12.1__py3-none-any.whl → 6.21.0__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- sae_lens/__init__.py +15 -1
- sae_lens/cache_activations_runner.py +1 -1
- sae_lens/config.py +39 -2
- sae_lens/constants.py +1 -0
- sae_lens/evals.py +20 -14
- sae_lens/llm_sae_training_runner.py +17 -18
- sae_lens/loading/pretrained_sae_loaders.py +194 -0
- sae_lens/loading/pretrained_saes_directory.py +5 -3
- sae_lens/pretokenize_runner.py +2 -1
- sae_lens/pretrained_saes.yaml +75 -1
- sae_lens/saes/__init__.py +9 -0
- sae_lens/saes/batchtopk_sae.py +32 -1
- sae_lens/saes/matryoshka_batchtopk_sae.py +137 -0
- sae_lens/saes/sae.py +22 -24
- sae_lens/saes/temporal_sae.py +372 -0
- sae_lens/saes/topk_sae.py +287 -17
- sae_lens/tokenization_and_batching.py +21 -6
- sae_lens/training/activation_scaler.py +7 -0
- sae_lens/training/activations_store.py +52 -31
- sae_lens/training/optim.py +11 -0
- sae_lens/training/sae_trainer.py +57 -16
- sae_lens/training/types.py +1 -1
- sae_lens/util.py +27 -0
- {sae_lens-6.12.1.dist-info → sae_lens-6.21.0.dist-info}/METADATA +19 -17
- sae_lens-6.21.0.dist-info/RECORD +41 -0
- {sae_lens-6.12.1.dist-info → sae_lens-6.21.0.dist-info}/WHEEL +1 -1
- sae_lens-6.12.1.dist-info/RECORD +0 -39
- {sae_lens-6.12.1.dist-info → sae_lens-6.21.0.dist-info/licenses}/LICENSE +0 -0
sae_lens/training/sae_trainer.py
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import contextlib
|
|
2
|
+
import math
|
|
2
3
|
from pathlib import Path
|
|
3
4
|
from typing import Any, Callable, Generic, Protocol
|
|
4
5
|
|
|
@@ -10,7 +11,11 @@ from tqdm.auto import tqdm
|
|
|
10
11
|
|
|
11
12
|
from sae_lens import __version__
|
|
12
13
|
from sae_lens.config import SAETrainerConfig
|
|
13
|
-
from sae_lens.constants import
|
|
14
|
+
from sae_lens.constants import (
|
|
15
|
+
ACTIVATION_SCALER_CFG_FILENAME,
|
|
16
|
+
SPARSITY_FILENAME,
|
|
17
|
+
TRAINER_STATE_FILENAME,
|
|
18
|
+
)
|
|
14
19
|
from sae_lens.saes.sae import (
|
|
15
20
|
T_TRAINING_SAE,
|
|
16
21
|
T_TRAINING_SAE_CONFIG,
|
|
@@ -56,6 +61,7 @@ class SAETrainer(Generic[T_TRAINING_SAE, T_TRAINING_SAE_CONFIG]):
|
|
|
56
61
|
data_provider: DataProvider
|
|
57
62
|
activation_scaler: ActivationScaler
|
|
58
63
|
evaluator: Evaluator[T_TRAINING_SAE] | None
|
|
64
|
+
coefficient_schedulers: dict[str, CoefficientScheduler]
|
|
59
65
|
|
|
60
66
|
def __init__(
|
|
61
67
|
self,
|
|
@@ -84,7 +90,9 @@ class SAETrainer(Generic[T_TRAINING_SAE, T_TRAINING_SAE_CONFIG]):
|
|
|
84
90
|
range(
|
|
85
91
|
0,
|
|
86
92
|
cfg.total_training_samples,
|
|
87
|
-
|
|
93
|
+
math.ceil(
|
|
94
|
+
cfg.total_training_samples / (self.cfg.n_checkpoints + 1)
|
|
95
|
+
),
|
|
88
96
|
)
|
|
89
97
|
)[1:]
|
|
90
98
|
|
|
@@ -93,11 +101,6 @@ class SAETrainer(Generic[T_TRAINING_SAE, T_TRAINING_SAE_CONFIG]):
|
|
|
93
101
|
sae.cfg.d_sae, device=cfg.device
|
|
94
102
|
)
|
|
95
103
|
self.n_frac_active_samples = 0
|
|
96
|
-
# we don't train the scaling factor (initially)
|
|
97
|
-
# set requires grad to false for the scaling factor
|
|
98
|
-
for name, param in self.sae.named_parameters():
|
|
99
|
-
if "scaling_factor" in name:
|
|
100
|
-
param.requires_grad = False
|
|
101
104
|
|
|
102
105
|
self.optimizer = Adam(
|
|
103
106
|
sae.parameters(),
|
|
@@ -210,10 +213,7 @@ class SAETrainer(Generic[T_TRAINING_SAE, T_TRAINING_SAE_CONFIG]):
|
|
|
210
213
|
sparsity_path = checkpoint_path / SPARSITY_FILENAME
|
|
211
214
|
save_file({"sparsity": self.log_feature_sparsity}, sparsity_path)
|
|
212
215
|
|
|
213
|
-
|
|
214
|
-
checkpoint_path / ACTIVATION_SCALER_CFG_FILENAME
|
|
215
|
-
)
|
|
216
|
-
self.activation_scaler.save(str(activation_scaler_path))
|
|
216
|
+
self.save_trainer_state(checkpoint_path)
|
|
217
217
|
|
|
218
218
|
if self.cfg.logger.log_to_wandb:
|
|
219
219
|
self.cfg.logger.log(
|
|
@@ -227,6 +227,44 @@ class SAETrainer(Generic[T_TRAINING_SAE, T_TRAINING_SAE_CONFIG]):
|
|
|
227
227
|
if self.save_checkpoint_fn is not None:
|
|
228
228
|
self.save_checkpoint_fn(checkpoint_path=checkpoint_path)
|
|
229
229
|
|
|
230
|
+
def save_trainer_state(self, checkpoint_path: Path) -> None:
|
|
231
|
+
checkpoint_path.mkdir(exist_ok=True, parents=True)
|
|
232
|
+
scheduler_state_dicts = {
|
|
233
|
+
name: scheduler.state_dict()
|
|
234
|
+
for name, scheduler in self.coefficient_schedulers.items()
|
|
235
|
+
}
|
|
236
|
+
torch.save(
|
|
237
|
+
{
|
|
238
|
+
"optimizer": self.optimizer.state_dict(),
|
|
239
|
+
"lr_scheduler": self.lr_scheduler.state_dict(),
|
|
240
|
+
"n_training_samples": self.n_training_samples,
|
|
241
|
+
"n_training_steps": self.n_training_steps,
|
|
242
|
+
"act_freq_scores": self.act_freq_scores,
|
|
243
|
+
"n_forward_passes_since_fired": self.n_forward_passes_since_fired,
|
|
244
|
+
"n_frac_active_samples": self.n_frac_active_samples,
|
|
245
|
+
"started_fine_tuning": self.started_fine_tuning,
|
|
246
|
+
"coefficient_schedulers": scheduler_state_dicts,
|
|
247
|
+
},
|
|
248
|
+
str(checkpoint_path / TRAINER_STATE_FILENAME),
|
|
249
|
+
)
|
|
250
|
+
activation_scaler_path = checkpoint_path / ACTIVATION_SCALER_CFG_FILENAME
|
|
251
|
+
self.activation_scaler.save(str(activation_scaler_path))
|
|
252
|
+
|
|
253
|
+
def load_trainer_state(self, checkpoint_path: Path | str) -> None:
|
|
254
|
+
checkpoint_path = Path(checkpoint_path)
|
|
255
|
+
self.activation_scaler.load(checkpoint_path / ACTIVATION_SCALER_CFG_FILENAME)
|
|
256
|
+
state_dict = torch.load(checkpoint_path / TRAINER_STATE_FILENAME)
|
|
257
|
+
self.optimizer.load_state_dict(state_dict["optimizer"])
|
|
258
|
+
self.lr_scheduler.load_state_dict(state_dict["lr_scheduler"])
|
|
259
|
+
self.n_training_samples = state_dict["n_training_samples"]
|
|
260
|
+
self.n_training_steps = state_dict["n_training_steps"]
|
|
261
|
+
self.act_freq_scores = state_dict["act_freq_scores"]
|
|
262
|
+
self.n_forward_passes_since_fired = state_dict["n_forward_passes_since_fired"]
|
|
263
|
+
self.n_frac_active_samples = state_dict["n_frac_active_samples"]
|
|
264
|
+
self.started_fine_tuning = state_dict["started_fine_tuning"]
|
|
265
|
+
for name, scheduler_state_dict in state_dict["coefficient_schedulers"].items():
|
|
266
|
+
self.coefficient_schedulers[name].load_state_dict(scheduler_state_dict)
|
|
267
|
+
|
|
230
268
|
def _train_step(
|
|
231
269
|
self,
|
|
232
270
|
sae: T_TRAINING_SAE,
|
|
@@ -249,16 +287,19 @@ class SAETrainer(Generic[T_TRAINING_SAE, T_TRAINING_SAE_CONFIG]):
|
|
|
249
287
|
sae_in=sae_in,
|
|
250
288
|
dead_neuron_mask=self.dead_neurons,
|
|
251
289
|
coefficients=self.get_coefficients(),
|
|
290
|
+
n_training_steps=self.n_training_steps,
|
|
252
291
|
),
|
|
253
292
|
)
|
|
254
293
|
|
|
255
294
|
with torch.no_grad():
|
|
256
|
-
|
|
295
|
+
# calling .bool() should be equivalent to .abs() > 0, and work with coo tensors
|
|
296
|
+
firing_feats = train_step_output.feature_acts.bool().float()
|
|
297
|
+
did_fire = firing_feats.sum(-2).bool()
|
|
298
|
+
if did_fire.is_sparse:
|
|
299
|
+
did_fire = did_fire.to_dense()
|
|
257
300
|
self.n_forward_passes_since_fired += 1
|
|
258
301
|
self.n_forward_passes_since_fired[did_fire] = 0
|
|
259
|
-
self.act_freq_scores += (
|
|
260
|
-
(train_step_output.feature_acts.abs() > 0).float().sum(0)
|
|
261
|
-
)
|
|
302
|
+
self.act_freq_scores += firing_feats.sum(0)
|
|
262
303
|
self.n_frac_active_samples += self.cfg.train_batch_size_samples
|
|
263
304
|
|
|
264
305
|
# Grad scaler will rescale gradients if autocast is enabled
|
|
@@ -310,7 +351,7 @@ class SAETrainer(Generic[T_TRAINING_SAE, T_TRAINING_SAE_CONFIG]):
|
|
|
310
351
|
loss = output.loss.item()
|
|
311
352
|
|
|
312
353
|
# metrics for currents acts
|
|
313
|
-
l0 = (
|
|
354
|
+
l0 = feature_acts.bool().float().sum(-1).to_dense().mean()
|
|
314
355
|
current_learning_rate = self.optimizer.param_groups[0]["lr"]
|
|
315
356
|
|
|
316
357
|
per_token_l2_loss = (sae_out - sae_in).pow(2).sum(dim=-1).squeeze()
|
sae_lens/training/types.py
CHANGED
sae_lens/util.py
CHANGED
|
@@ -5,6 +5,8 @@ from dataclasses import asdict, fields, is_dataclass
|
|
|
5
5
|
from pathlib import Path
|
|
6
6
|
from typing import Sequence, TypeVar
|
|
7
7
|
|
|
8
|
+
from transformers import PreTrainedTokenizerBase
|
|
9
|
+
|
|
8
10
|
K = TypeVar("K")
|
|
9
11
|
V = TypeVar("V")
|
|
10
12
|
|
|
@@ -63,3 +65,28 @@ def path_or_tmp_dir(path: str | Path | None):
|
|
|
63
65
|
yield Path(td)
|
|
64
66
|
else:
|
|
65
67
|
yield Path(path)
|
|
68
|
+
|
|
69
|
+
|
|
70
|
+
def get_special_token_ids(tokenizer: PreTrainedTokenizerBase) -> list[int]:
|
|
71
|
+
"""Get all special token IDs from a tokenizer."""
|
|
72
|
+
special_tokens = set()
|
|
73
|
+
|
|
74
|
+
# Get special tokens from tokenizer attributes
|
|
75
|
+
for attr in dir(tokenizer):
|
|
76
|
+
if attr.endswith("_token_id"):
|
|
77
|
+
token_id = getattr(tokenizer, attr)
|
|
78
|
+
if token_id is not None:
|
|
79
|
+
special_tokens.add(token_id)
|
|
80
|
+
|
|
81
|
+
# Get any additional special tokens from the tokenizer's special tokens map
|
|
82
|
+
if hasattr(tokenizer, "special_tokens_map"):
|
|
83
|
+
for token in tokenizer.special_tokens_map.values():
|
|
84
|
+
if isinstance(token, str):
|
|
85
|
+
token_id = tokenizer.convert_tokens_to_ids(token) # type: ignore
|
|
86
|
+
special_tokens.add(token_id)
|
|
87
|
+
elif isinstance(token, list):
|
|
88
|
+
for t in token:
|
|
89
|
+
token_id = tokenizer.convert_tokens_to_ids(t) # type: ignore
|
|
90
|
+
special_tokens.add(token_id)
|
|
91
|
+
|
|
92
|
+
return list(special_tokens)
|
|
@@ -1,8 +1,9 @@
|
|
|
1
|
-
Metadata-Version: 2.
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
2
|
Name: sae-lens
|
|
3
|
-
Version: 6.
|
|
3
|
+
Version: 6.21.0
|
|
4
4
|
Summary: Training and Analyzing Sparse Autoencoders (SAEs)
|
|
5
5
|
License: MIT
|
|
6
|
+
License-File: LICENSE
|
|
6
7
|
Keywords: deep-learning,sparse-autoencoders,mechanistic-interpretability,PyTorch
|
|
7
8
|
Author: Joseph Bloom
|
|
8
9
|
Requires-Python: >=3.10,<4.0
|
|
@@ -12,6 +13,7 @@ Classifier: Programming Language :: Python :: 3.10
|
|
|
12
13
|
Classifier: Programming Language :: Python :: 3.11
|
|
13
14
|
Classifier: Programming Language :: Python :: 3.12
|
|
14
15
|
Classifier: Programming Language :: Python :: 3.13
|
|
16
|
+
Classifier: Programming Language :: Python :: 3.14
|
|
15
17
|
Classifier: Topic :: Scientific/Engineering :: Artificial Intelligence
|
|
16
18
|
Provides-Extra: mamba
|
|
17
19
|
Requires-Dist: babe (>=0.0.7,<0.0.8)
|
|
@@ -28,19 +30,19 @@ Requires-Dist: tenacity (>=9.0.0)
|
|
|
28
30
|
Requires-Dist: transformer-lens (>=2.16.1,<3.0.0)
|
|
29
31
|
Requires-Dist: transformers (>=4.38.1,<5.0.0)
|
|
30
32
|
Requires-Dist: typing-extensions (>=4.10.0,<5.0.0)
|
|
31
|
-
Project-URL: Homepage, https://
|
|
32
|
-
Project-URL: Repository, https://github.com/
|
|
33
|
+
Project-URL: Homepage, https://decoderesearch.github.io/SAELens
|
|
34
|
+
Project-URL: Repository, https://github.com/decoderesearch/SAELens
|
|
33
35
|
Description-Content-Type: text/markdown
|
|
34
36
|
|
|
35
|
-
<img width="1308"
|
|
37
|
+
<img width="1308" height="532" alt="saes_pic" src="https://github.com/user-attachments/assets/2a5d752f-b261-4ee4-ad5d-ebf282321371" />
|
|
36
38
|
|
|
37
39
|
# SAE Lens
|
|
38
40
|
|
|
39
41
|
[](https://pypi.org/project/sae-lens/)
|
|
40
42
|
[](https://opensource.org/licenses/MIT)
|
|
41
|
-
[](https://github.com/decoderesearch/SAELens/actions/workflows/build.yml)
|
|
44
|
+
[](https://github.com/decoderesearch/SAELens/actions/workflows/deploy_docs.yml)
|
|
45
|
+
[](https://codecov.io/gh/decoderesearch/SAELens)
|
|
44
46
|
|
|
45
47
|
SAELens exists to help researchers:
|
|
46
48
|
|
|
@@ -48,7 +50,7 @@ SAELens exists to help researchers:
|
|
|
48
50
|
- Analyse sparse autoencoders / research mechanistic interpretability.
|
|
49
51
|
- Generate insights which make it easier to create safe and aligned AI systems.
|
|
50
52
|
|
|
51
|
-
Please refer to the [documentation](https://
|
|
53
|
+
Please refer to the [documentation](https://decoderesearch.github.io/SAELens/) for information on how to:
|
|
52
54
|
|
|
53
55
|
- Download and Analyse pre-trained sparse autoencoders.
|
|
54
56
|
- Train your own sparse autoencoders.
|
|
@@ -56,25 +58,25 @@ Please refer to the [documentation](https://jbloomaus.github.io/SAELens/) for in
|
|
|
56
58
|
|
|
57
59
|
SAE Lens is the result of many contributors working collectively to improve humanity's understanding of neural networks, many of whom are motivated by a desire to [safeguard humanity from risks posed by artificial intelligence](https://80000hours.org/problem-profiles/artificial-intelligence/).
|
|
58
60
|
|
|
59
|
-
This library is maintained by [Joseph Bloom](https://www.
|
|
61
|
+
This library is maintained by [Joseph Bloom](https://www.decoderesearch.com/), [Curt Tigges](https://curttigges.com/), [Anthony Duong](https://github.com/anthonyduong9) and [David Chanin](https://github.com/chanind).
|
|
60
62
|
|
|
61
63
|
## Loading Pre-trained SAEs.
|
|
62
64
|
|
|
63
|
-
Pre-trained SAEs for various models can be imported via SAE Lens. See this [page](https://
|
|
65
|
+
Pre-trained SAEs for various models can be imported via SAE Lens. See this [page](https://decoderesearch.github.io/SAELens/sae_table/) in the readme for a list of all SAEs.
|
|
64
66
|
|
|
65
67
|
## Migrating to SAELens v6
|
|
66
68
|
|
|
67
|
-
The new v6 update is a major refactor to SAELens and changes the way training code is structured. Check out the [migration guide](https://
|
|
69
|
+
The new v6 update is a major refactor to SAELens and changes the way training code is structured. Check out the [migration guide](https://decoderesearch.github.io/SAELens/latest/migrating/) for more details.
|
|
68
70
|
|
|
69
71
|
## Tutorials
|
|
70
72
|
|
|
71
|
-
- [SAE Lens + Neuronpedia](tutorials/tutorial_2_0.ipynb)[](https://githubtocolab.com/
|
|
73
|
+
- [SAE Lens + Neuronpedia](tutorials/tutorial_2_0.ipynb)[](https://githubtocolab.com/decoderesearch/SAELens/blob/main/tutorials/tutorial_2_0.ipynb)
|
|
72
74
|
- [Loading and Analysing Pre-Trained Sparse Autoencoders](tutorials/basic_loading_and_analysing.ipynb)
|
|
73
|
-
[](https://githubtocolab.com/
|
|
75
|
+
[](https://githubtocolab.com/decoderesearch/SAELens/blob/main/tutorials/basic_loading_and_analysing.ipynb)
|
|
74
76
|
- [Understanding SAE Features with the Logit Lens](tutorials/logits_lens_with_features.ipynb)
|
|
75
|
-
[](https://githubtocolab.com/
|
|
77
|
+
[](https://githubtocolab.com/decoderesearch/SAELens/blob/main/tutorials/logits_lens_with_features.ipynb)
|
|
76
78
|
- [Training a Sparse Autoencoder](tutorials/training_a_sparse_autoencoder.ipynb)
|
|
77
|
-
[](https://githubtocolab.com/
|
|
79
|
+
[](https://githubtocolab.com/decoderesearch/SAELens/blob/main/tutorials/training_a_sparse_autoencoder.ipynb)
|
|
78
80
|
|
|
79
81
|
## Join the Slack!
|
|
80
82
|
|
|
@@ -89,7 +91,7 @@ Please cite the package as follows:
|
|
|
89
91
|
title = {SAELens},
|
|
90
92
|
author = {Bloom, Joseph and Tigges, Curt and Duong, Anthony and Chanin, David},
|
|
91
93
|
year = {2024},
|
|
92
|
-
howpublished = {\url{https://github.com/
|
|
94
|
+
howpublished = {\url{https://github.com/decoderesearch/SAELens}},
|
|
93
95
|
}
|
|
94
96
|
```
|
|
95
97
|
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
sae_lens/__init__.py,sha256=P97iQ9YQGEa7PjR9_--pkEA-0WS9D_O7BkDNZ_qsxdA,4033
|
|
2
|
+
sae_lens/analysis/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
3
|
+
sae_lens/analysis/hooked_sae_transformer.py,sha256=vRu6JseH1lZaEeILD5bEkQEQ1wYHHDcxD-f2olKmE9Y,14275
|
|
4
|
+
sae_lens/analysis/neuronpedia_integration.py,sha256=Gx1W7hUBEuMoasNcnOnZ1wmqbXDd1pSZ1nqKEya1HQc,4962
|
|
5
|
+
sae_lens/cache_activations_runner.py,sha256=KFR5SHZt_fy3iLBtHd_aBG-fskAqEtRE-7A-nqy1L-w,12588
|
|
6
|
+
sae_lens/config.py,sha256=fxvpQxFfPOVUkryiHD19q9O1AJDSkIguWeYlbJuTxmY,30329
|
|
7
|
+
sae_lens/constants.py,sha256=qX12uAE_xkha6hjss_0MGTbakI7gEkJzHABkZaHWQFU,683
|
|
8
|
+
sae_lens/evals.py,sha256=P0NUsJeGzYxFBiVKhbPzd72IFKY4gH40HHlEZ3jEAmg,39598
|
|
9
|
+
sae_lens/llm_sae_training_runner.py,sha256=M7BK55gSFYu2qFQKABHX3c8i46P1LfODCeyHFzGGuqU,15196
|
|
10
|
+
sae_lens/load_model.py,sha256=C8AMykctj6H7tz_xRwB06-EXj6TfW64PtSJZR5Jxn1Y,8649
|
|
11
|
+
sae_lens/loading/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
12
|
+
sae_lens/loading/pretrained_sae_loaders.py,sha256=X-gVZ4A74E85lSMFMsZ_rEQhHlR9AYFwhxvoA_vt2CQ,56051
|
|
13
|
+
sae_lens/loading/pretrained_saes_directory.py,sha256=hejNfLUepYCSGPalRfQwxxCEUqMMUPsn1tufwvwct5k,3820
|
|
14
|
+
sae_lens/pretokenize_runner.py,sha256=x-reJzVPFDS9iRFbZtrFYSzNguJYki9gd0pbHjYJ3r4,7085
|
|
15
|
+
sae_lens/pretrained_saes.yaml,sha256=trDRsAS7Tlm5LPGVGi2pa2iidrghahtsjL_O2DfSSEw,604874
|
|
16
|
+
sae_lens/registry.py,sha256=nhy7BPSudSATqW4lo9H_k3Na7sfGHmAf9v-3wpnLL_o,1490
|
|
17
|
+
sae_lens/saes/__init__.py,sha256=nTNPnJ7edyfedo1MX96xwn9WOG8504yHbT9LFw9od_0,1778
|
|
18
|
+
sae_lens/saes/batchtopk_sae.py,sha256=x4EbgZl0GUickRPcCmtKNGS2Ra3Uy1Z1OtF2FnrSabQ,5422
|
|
19
|
+
sae_lens/saes/gated_sae.py,sha256=qcmM9JwBA8aZR8z_IRHV1_gQX-q_63tKewWXRnhdXuo,8986
|
|
20
|
+
sae_lens/saes/jumprelu_sae.py,sha256=HHBF1sJ95lZvxwP5vwLSQFKdnJN2KKYK0WAEaLTrta0,13399
|
|
21
|
+
sae_lens/saes/matryoshka_batchtopk_sae.py,sha256=4_1cVaxk6c6jgJEbxqebtG-cjQNIzaMAfjSPGfR7_VU,6062
|
|
22
|
+
sae_lens/saes/sae.py,sha256=i6HwULvCrFQhRqKruCQo2aOY5a7c6FuUX7sD3TbnNTY,38084
|
|
23
|
+
sae_lens/saes/standard_sae.py,sha256=9UqYyYtQuThYxXKNaDjYcyowpOx2-7cShG-TeUP6JCQ,5940
|
|
24
|
+
sae_lens/saes/temporal_sae.py,sha256=jnHBqz3FvKMOw_lH2aGIJqgrMVJbpprronittCGGXPQ,13517
|
|
25
|
+
sae_lens/saes/topk_sae.py,sha256=tzQM5eQFifMe--8_8NUBYWY7hpjQa6A_olNe6U71FE8,21275
|
|
26
|
+
sae_lens/saes/transcoder.py,sha256=BfLSbTYVNZh-ruGxseZiZJ_acEL6_7QyTdfqUr0lDOg,12156
|
|
27
|
+
sae_lens/tokenization_and_batching.py,sha256=D_o7cXvRqhT89H3wNzoRymNALNE6eHojBWLdXOUwUGE,5438
|
|
28
|
+
sae_lens/training/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
29
|
+
sae_lens/training/activation_scaler.py,sha256=FzNfgBplLWmyiSlZ6TUvE-nur3lOiGTrlvC97ys8S24,1973
|
|
30
|
+
sae_lens/training/activations_store.py,sha256=7fWUahMUqrvHhN5b_8Ma6kJX1NkRbIqNuNKzKvYmHFQ,33881
|
|
31
|
+
sae_lens/training/mixing_buffer.py,sha256=vDpYG5ZE70szDvBsRKcNHEES3h_WTKJ16qDYk5jPOVA,2015
|
|
32
|
+
sae_lens/training/optim.py,sha256=bJpqqcK4enkcPvQAJkeH4Ci1LUOlfjIMTv6-IlaAbRA,5588
|
|
33
|
+
sae_lens/training/sae_trainer.py,sha256=zhkabyIKxI_tZTV3_kwz6zMrHZ95Ecr97krmwc-9ffs,17600
|
|
34
|
+
sae_lens/training/types.py,sha256=1FpLx_Doda9vZpmfm-x1e8wGBYpyhe9Kpb_JuM5nIFM,90
|
|
35
|
+
sae_lens/training/upload_saes_to_huggingface.py,sha256=r_WzI1zLtGZ5TzAxuG3xa_8T09j3zXJrWd_vzPsPGkQ,4469
|
|
36
|
+
sae_lens/tutorial/tsea.py,sha256=fd1am_XXsf2KMbByDapJo-2qlxduKaa62Z2qcQZ3QKU,18145
|
|
37
|
+
sae_lens/util.py,sha256=tCovQ-eZa1L7thPpNDL6PGOJrIMML2yLI5e0EHCOpS8,3309
|
|
38
|
+
sae_lens-6.21.0.dist-info/METADATA,sha256=ZgrnVgZyTjJk-XmNZG1xHUJqdXoO0ldyFZgElVWVVno,5369
|
|
39
|
+
sae_lens-6.21.0.dist-info/WHEEL,sha256=zp0Cn7JsFoX2ATtOhtaFYIiE2rmFAD4OcMhtUki8W3U,88
|
|
40
|
+
sae_lens-6.21.0.dist-info/licenses/LICENSE,sha256=DW6e-hDosiu4CfW0-imI57sV1I5f9UEslpviNQcOAKs,1069
|
|
41
|
+
sae_lens-6.21.0.dist-info/RECORD,,
|
sae_lens-6.12.1.dist-info/RECORD
DELETED
|
@@ -1,39 +0,0 @@
|
|
|
1
|
-
sae_lens/__init__.py,sha256=UbZevK2LHG9rpfVOKdJIGBHkF7lbrV2-dyYWF_x8-fw,3589
|
|
2
|
-
sae_lens/analysis/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
3
|
-
sae_lens/analysis/hooked_sae_transformer.py,sha256=vRu6JseH1lZaEeILD5bEkQEQ1wYHHDcxD-f2olKmE9Y,14275
|
|
4
|
-
sae_lens/analysis/neuronpedia_integration.py,sha256=Gx1W7hUBEuMoasNcnOnZ1wmqbXDd1pSZ1nqKEya1HQc,4962
|
|
5
|
-
sae_lens/cache_activations_runner.py,sha256=cNeAtp2JQ_vKbeddZVM-tcPLYyyfTWL8NDna5KQpkLI,12583
|
|
6
|
-
sae_lens/config.py,sha256=IdRXSKPfYY3hwUovj-u83eep8z52gkJHII0mY0KseYY,28739
|
|
7
|
-
sae_lens/constants.py,sha256=CSjmiZ-bhjQeVLyRvWxAjBokCgkfM8mnvd7-vxLIWTY,639
|
|
8
|
-
sae_lens/evals.py,sha256=4hanbyG8qZLItWqft94F4ZjUoytPVB7fw5s0P4Oi0VE,39504
|
|
9
|
-
sae_lens/llm_sae_training_runner.py,sha256=sJTcDX1bUJJ_jZLUT88-8KUYIAPeUGoXktX68PsBqw0,15137
|
|
10
|
-
sae_lens/load_model.py,sha256=C8AMykctj6H7tz_xRwB06-EXj6TfW64PtSJZR5Jxn1Y,8649
|
|
11
|
-
sae_lens/loading/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
12
|
-
sae_lens/loading/pretrained_sae_loaders.py,sha256=CVzHntSUKR1X3_gAqn8K_Ajq8D85qBrmrgEgU93IV4A,49609
|
|
13
|
-
sae_lens/loading/pretrained_saes_directory.py,sha256=4Vn-Jex6SveD7EbxcSOBv8cx1gkPfUMLU1QOP-ww1ZE,3752
|
|
14
|
-
sae_lens/pretokenize_runner.py,sha256=w0f6SfZLAxbp5eAAKnet8RqUB_DKofZ9RGsoJwFnYbA,7058
|
|
15
|
-
sae_lens/pretrained_saes.yaml,sha256=6ca3geEB6NyhULUrmdtPDK8ea0YdpLp8_au78vIFC5w,602553
|
|
16
|
-
sae_lens/registry.py,sha256=nhy7BPSudSATqW4lo9H_k3Na7sfGHmAf9v-3wpnLL_o,1490
|
|
17
|
-
sae_lens/saes/__init__.py,sha256=jVwazK8Q6dW5J6_zFXPoNAuBvSxgziQ8eMOjGM3t-X8,1475
|
|
18
|
-
sae_lens/saes/batchtopk_sae.py,sha256=GX_J0vH4vzeLqYxl0mkfsZQpFEoCEHMR4dIG8fz8N8w,3449
|
|
19
|
-
sae_lens/saes/gated_sae.py,sha256=qcmM9JwBA8aZR8z_IRHV1_gQX-q_63tKewWXRnhdXuo,8986
|
|
20
|
-
sae_lens/saes/jumprelu_sae.py,sha256=HHBF1sJ95lZvxwP5vwLSQFKdnJN2KKYK0WAEaLTrta0,13399
|
|
21
|
-
sae_lens/saes/sae.py,sha256=gdUZuLaOHQrPjbDj-nZI813B6-_mNAnV9i9z4qTnpHk,38255
|
|
22
|
-
sae_lens/saes/standard_sae.py,sha256=9UqYyYtQuThYxXKNaDjYcyowpOx2-7cShG-TeUP6JCQ,5940
|
|
23
|
-
sae_lens/saes/topk_sae.py,sha256=CXMBI6CFvI5829bOhoQ350VXR9d8uFHUDlULTIWHXoU,8686
|
|
24
|
-
sae_lens/saes/transcoder.py,sha256=BfLSbTYVNZh-ruGxseZiZJ_acEL6_7QyTdfqUr0lDOg,12156
|
|
25
|
-
sae_lens/tokenization_and_batching.py,sha256=now7caLbU3p-iGokNwmqZDyIvxYoXgnG1uklhgiLZN4,4656
|
|
26
|
-
sae_lens/training/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
27
|
-
sae_lens/training/activation_scaler.py,sha256=seEE-2Qd2JMHxqgnsNWPt-DGtYGZxWPnOwCGuVNSOtI,1719
|
|
28
|
-
sae_lens/training/activations_store.py,sha256=2EUY2abqpT5El3T95sypM_JRDgiKL3VeT73U9SQIFGY,32903
|
|
29
|
-
sae_lens/training/mixing_buffer.py,sha256=vDpYG5ZE70szDvBsRKcNHEES3h_WTKJ16qDYk5jPOVA,2015
|
|
30
|
-
sae_lens/training/optim.py,sha256=TiI9nbffzXNsI8WjcIsqa2uheW6suxqL_KDDmWXobWI,5312
|
|
31
|
-
sae_lens/training/sae_trainer.py,sha256=Jh5AyBGtfZjnprv9H3k0p_luWWnM7YFjlmHuO1W_J6U,15465
|
|
32
|
-
sae_lens/training/types.py,sha256=qSjmGzXf3MLalygG0psnVjmhX_mpLmL47MQtZfe7qxg,81
|
|
33
|
-
sae_lens/training/upload_saes_to_huggingface.py,sha256=r_WzI1zLtGZ5TzAxuG3xa_8T09j3zXJrWd_vzPsPGkQ,4469
|
|
34
|
-
sae_lens/tutorial/tsea.py,sha256=fd1am_XXsf2KMbByDapJo-2qlxduKaa62Z2qcQZ3QKU,18145
|
|
35
|
-
sae_lens/util.py,sha256=lW7fBn_b8quvRYlen9PUmB7km60YhKyjmuelB1f6KzQ,2253
|
|
36
|
-
sae_lens-6.12.1.dist-info/LICENSE,sha256=DW6e-hDosiu4CfW0-imI57sV1I5f9UEslpviNQcOAKs,1069
|
|
37
|
-
sae_lens-6.12.1.dist-info/METADATA,sha256=_mH3B2Hw3gzE6m0y6YyW-3yYOY1U3Nrf8ElewET3wjg,5245
|
|
38
|
-
sae_lens-6.12.1.dist-info/WHEEL,sha256=b4K_helf-jlQoXBBETfwnf4B04YC67LOev0jo4fX5m8,88
|
|
39
|
-
sae_lens-6.12.1.dist-info/RECORD,,
|
|
File without changes
|