Skip to content
This repository was archived by the owner on Jul 17, 2026. It is now read-only.

Commit 331b168

Browse files
ocg-goodfireclaude
andauthored
three_pool: integrate #540 (async consolidation) + #541 (config fork) (#542)
* three_pool: move checkpoint consolidation off the train loop (async) The 3-pool save was fully synchronous: rank 0 serially read ~100 GB of per-rank partials to assemble the canonical ThreePoolTrainingState while all other ranks waited at a rejoining barrier. At XL that read overran the NCCL watchdog (killed run 34446) and forced a 30-min PG timeout; over a 200k-step run it stalled the loop for hours. New flow: - snapshot() (on the train loop) writes a SELF-CONTAINED partial per rank (owned model params via the leader key-partition + optimizer state + PPGD sources) plus a rank-0 meta.pth, with one pre-write and one post-write barrier. No rank-0 read, no live-NCCL model gather, no model assembly. - consolidate_step() (new three_pool/consolidate.py, runs in the async job, off the loop) reads all partials, assembles model_<step>.pth + training_<step>.pth, prunes training_*.pth to the last 3 (all model_*.pth kept), deletes the scratch dir. Idempotent. - checkpoint.py: gather_full_state_dict_to_rank0 (NCCL) replaced by assemble_model_state_dict_from_partials (file-only) + leader key-partition helpers (owned_model_state_keys / ci_fn_state_keys). - ThreePoolRunSink.checkpoint -> checkpoint_written(step, final); the 3-pool sink now only fires the on_save hook. - submit_slurm_async_slow_eval -> submit_slurm_async_consolidate_and_eval: always submitted for 3-pool (consolidation is mandatory even with no slow metrics); async_eval consolidates first (rank 0 + barrier), then evals. - Resume reads the latest CONSOLIDATED training_<step>.pth; if a run dies before consolidation, resume from the prior consolidated step (at most one save-interval lag; unconsolidated partials remain on disk). - _DEFAULT_PG_TIMEOUT 30min -> 10min: the longest on-loop collective gap is now the fast-eval pass + a partial-write barrier, not the rank-0 read. Validated on an 8-GPU 3-block topology (job 34739/34740): - save snapshot wall time ~450ms/save (was a multi-minute rank-0 read) - consolidation produces valid model/training files; assembly is byte-equivalent to the live ComponentModel state_dict - resume from a consolidated checkpoint continues training - prune keeps all model_*.pth, trims training_*.pth to last 3 - run survives a tight 120s PG timeout across 5 saves; a 30s rank-0 sleep injected into consolidation runs off-loop without touching the train PG Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> * three_pool: fix async-consolidation glue — don't resolve a checkpoint pre-consolidation The live train->child chain failed: async_eval.main opened with SavedLMRun.from_path(run), which eagerly resolves a model_<step>.pth. For a 3-pool save that file doesn't exist yet — this job assembles it — so every child consolidate job crashed with "No files found with prefix model" before ever calling consolidate_step. Read the config straight from run_meta.yaml instead, consolidate, and only resolve the checkpoint afterwards (for the eval pass). Also add a PD_ASYNC_EVAL_DP override so the consolidate+eval child's GPU count isn't a hardcoded 8 (lets a small-topology smoke fit train + child within one node, and lets a cheap eval not match train width in production). Found by the live end-to-end smoke (6-GPU train firing real 2-GPU child jobs) that the prior validation had stubbed out via PD_3POOL_SKIP_ASYNC_ONSAVE. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> * three_pool: consolidate before CUDA/NCCL init (the child job hung otherwise) The fixed glue got the child past the checkpoint-resolution crash, but it then hung in assemble_model_state_dict_from_partials: building the full ComponentModel (incl. the transformer CI fn) AFTER get_device()/init_distributed makes that construction land on a contended GPU and stall (the same assembly is 2.6s on a clean CPU process). Move consolidation to a CPU-only prelude that runs BEFORE any CUDA/NCCL init: rank 0 (read from torchrun's RANK env, since the PG isn't up yet) assembles on CPU; the other ranks poll the shared FS for training_<step>.pth, then everyone inits distributed for the eval pass. No process group is needed for the wait. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> * three_pool: Option C config fork — standalone ThreePoolLMExperimentConfig + pd-lm-3pool Splits the 3-pool path into its own composition root + config types, baking the 3-pool's constraints into the types so misconfigs fail at YAML parse instead of minutes into a multi-node launch. - ThreePoolConstrainedPDConfig (subclass of core PDConfig): frozen Literal scalars (sampling/n_mask_samples/use_delta_component/identity_decomposition_targets) + a typed ThreePoolLosses(faith, imp, stoch, ppgd) struct replacing the generic loss_metrics list. Derives loss_metrics from the struct (excluded from dump). - ThreePoolRuntimeConfig (subclass of core RuntimeConfig) carries topology, so nothing enters core's RuntimeConfig. - ThreePoolLMExperimentConfig: standalone sibling; LMExperimentConfig drops three_pool. - pd-lm-3pool entry + three_pool_run.py composition root (fresh/resume/--dp submit); run.py back to single-pool only. Shared pure builders imported from run.py. - ThreePoolTrainer reads pd.losses.* directly; deleted _validate_pd_config_for_three_pool + the by_type/isinstance dance. Cross-field checks (batch divisibility, rank-0) move to a load-time model_validator; site coverage stays in _build_runtime. - SavedThreePoolLMRun reload sibling; init_pd_run / _build_eval_loop relaxed to structural protocols. - Resume provenance now lives on the config (resume_provenance field) → flows to run_meta.yaml + wandb.config; dropped the write-only FS side-file. - Migrated the two 3-pool YAMLs; parse-rejection + roundtrip + provenance tests. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> * three_pool: init distributed before consolidation; CPU-pin assembly; file-poll wait Building target_model requires the distributed state to be initialized (ensure_cached_and_call asserts via get_distributed_state), so consolidation can't fully precede init_distributed. Reorder: init_distributed + build_target first, then consolidate. To keep the multi-second CPU read+assemble off any GPU collective: - non-rank-0 ranks WAIT by polling the shared FS for training_<step>.pth (which consolidate_step writes last), not on an NCCL barrier; - rank-0 assembly runs under `torch.device("cpu")` so the full ComponentModel buffer (incl. transformer CI fn) is pinned to CPU rather than landing on the selected, shared GPU (the original hang). Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> * three_pool: fix consolidation hang root cause (unfrozen target) + fail-fast + rerun CLI Root cause of the hung child consolidate jobs: assemble_model_state_dict_from_partials builds a ComponentModel from the target returned by build_target, which only .eval()s it — its params still have requires_grad=True. ComponentModel asserts the target is frozen, so rank 0 crashed on that assertion. In the multi-rank child this surfaced as a HANG: rank 0 died mid-consolidation while the other rank sat in the wait, holding both GPUs until the timeout. Fixes: - Root cause: freeze the target (eval + requires_grad_(False)) inside the assembly, before constructing the ComponentModel buffer. - Fail-fast, never hang: rank 0 writes a .consolidate_failed_<step> sentinel and re-raises on any consolidation error; the waiting ranks poll for the success file OR the sentinel and bail out (raising) on either the sentinel or a bounded timeout — so a failed child errors and releases its GPUs instead of wedging. - Partials persist on failure (already true: consolidate_step rmtrees scratch only after a successful write) + a recovery CLI: python -m param_decomp_lab.three_pool.consolidate_cli <run> [--step N] consolidates every unconsolidated step (partials present, no training_<step>.pth), making "it failed, just rerun it" a one-liner. CLI lives in its own module to avoid an import cycle with experiments.lm.run. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> * test: 4-GPU single-block 3-pool config for live e2e validation Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> * three_pool: make prune race-tolerant + clean stale scratch on already-consolidated Two concurrent child consolidation jobs prune the same old training_<step>.pth; the second crashed with FileNotFoundError (after already writing its checkpoint), marking the job FAILED and leaving its scratch behind. Use unlink(missing_ok=True) — a concurrent pruner removing the file first is benign. Also clean any leftover scratch when consolidate_step early-returns on an already-existing training file, so a step that died in prune doesn't keep looking unconsolidated. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> * test: 4-GPU 2-save config (peak 8 GPU) for live e2e re-validation Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> * test: resume YAML from live-produced p-livee2e05 checkpoint Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> * three_pool: document consolidation reliability (fail-fast, rerun CLI) + drop throwaway resume YAMLs CLAUDE.md: add the async-job reliability contract (CPU-only post-init assembly, target-freeze, rank-0-assembles / others-file-wait-fail-fast, partials-persist + recovery CLI, concurrency-safe prune) and the consolidate_cli.py table entry. Remove two resume pointer YAMLs that referenced now-deleted validation runs. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> * three_pool: migrate #540's validation YAMLs to the new ThreePoolLMExperimentConfig shape #540's four resumption-validation configs were authored in the pre-fork format (top-level three_pool, flat loss_metrics). The only 3-pool entry point is now pd-lm-3pool, so migrate them: loss_metrics -> pd.losses struct, three_pool -> runtime.topology, drop the frozen-Literal pd fields. All parse + round-trip. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> * xl: 200k production config in the new ThreePoolLMExperimentConfig shape The config the human will launch for the ~5-day run. Recreated from the b48 3-pool production config: steps 200000, PPGD optimizer lr warmup_pct 0.05; everything else identical. Parses + round-trips under pd-lm-3pool. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> * fix(3pool): drop duplicate topology key when validating runtime_config on resume Integration seam between #540 and #541: the consolidated training_<step>.pth stores runtime_config as a ThreePoolRuntimeConfig dump (base scalars + topology), but from_snapshot validated it as base RuntimeConfig -> pydantic extra_forbidden on `topology`. Topology is already carried by three_pool_config (identical to the dumped topology), so drop the duplicate key before validating the base scalars. Caught by the resume gate (#540's consolidated checkpoints are only now read by #541's from_snapshot path). Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> --------- Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
1 parent 0b40f17 commit 331b168

27 files changed

Lines changed: 3201 additions & 1271 deletions

CLAUDE.md

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -155,7 +155,8 @@ All declared in `param_decomp_lab/pyproject.toml`.
155155
|---|---|---|
156156
| `pd-tms` | `experiments/tms/run.py` | Run TMS experiment from a YAML |
157157
| `pd-resid-mlp` | `experiments/resid_mlp/run.py` | Run ResidMLP from a YAML |
158-
| `pd-lm` | `experiments/lm/run.py` | Run LM from a YAML |
158+
| `pd-lm` | `experiments/lm/run.py` | Run single-pool LM from a YAML |
159+
| `pd-lm-3pool` | `experiments/lm/three_pool_run.py` | Run 3-pool LM from a `ThreePoolLMExperimentConfig` YAML |
159160
| `pd-lm-layerwise` | `experiments/lm/layerwise.py` | Split an LM YAML into per-matrix configs, submit as a SLURM array |
160161
| `pd-pretrain` | `experiments/lm/pretrain/cli.py` | Pretrain target models |
161162
| `pd-harvest` | `harvest/scripts/run_slurm_cli.py` | Submit harvest SLURM job |

param_decomp/run_sink.py

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@
1717

1818
from typing import Any, Protocol, runtime_checkable
1919

20-
from param_decomp.training_state import ThreePoolTrainingState, TrainingState
20+
from param_decomp.training_state import TrainingState
2121

2222

2323
@runtime_checkable
@@ -52,14 +52,17 @@ def finish(self) -> None:
5252
class ThreePoolRunSink(Protocol):
5353
"""Side-effect sink for a 3-pool training run.
5454
55-
Identical to `OnePoolRunSink` apart from the checkpoint parameter's state
56-
type. Two separate protocols rather than a union so each trainer's
57-
``run()`` signature can only accept a sink wired to its own pool's state.
55+
Unlike `OnePoolRunSink`, the 3-pool sink does NOT persist a training state
56+
from the train loop. The trainer writes self-contained per-rank partials to
57+
a shared-FS scratch dir (cheap, no rank-0 read), then calls
58+
`checkpoint_written` so the sink can fire the async consolidation+eval job
59+
that reads those partials, assembles ``model_<step>.pth`` +
60+
``training_<step>.pth`` off the critical path, and runs the slow eval.
5861
"""
5962

6063
def log(self, metrics: dict[str, Any], step: int) -> None: ...
6164
def console(self, *lines: str) -> None: ...
62-
def checkpoint(self, snapshot: ThreePoolTrainingState, *, final: bool) -> None: ...
65+
def checkpoint_written(self, step: int, *, final: bool) -> None: ...
6366
def finish(self) -> None: ...
6467

6568

param_decomp_lab/experiments/CLAUDE.md

Lines changed: 28 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,16 +12,42 @@ the concrete reload class directly.
1212
```
1313
experiments/
1414
├── utils.py # ExperimentConfig[T,D] generic + EvalConfig + WandbConfig
15-
│ # + init_pd_run + RUN_META_FILENAME
15+
│ # + init_pd_run + RUN_META_FILENAME + resume_provenance field
1616
├── tms/run.py
1717
├── resid_mlp/run.py
1818
└── lm/
19-
├── run.py
19+
├── run.py # single-pool LM (pd-lm)
20+
├── three_pool_run.py # 3-pool LM (pd-lm-3pool): ThreePoolLMExperimentConfig
21+
├── three_pool_pd.py # ThreePoolConstrainedPDConfig + ThreePoolLosses
2022
├── layerwise.py # split LM YAML into per-matrix configs + SLURM-array submit
2123
├── data.py
2224
└── pretrain/ # see lm/pretrain/CLAUDE.md
2325
```
2426

27+
## 3-pool config fork (`pd-lm-3pool`)
28+
29+
The 3-pool training path is a standalone sibling of `pd-lm`, not a flag on it. Dispatch
30+
is by entry point (the repo idiom — no discriminator). `ThreePoolLMExperimentConfig`
31+
(in `lm/three_pool_run.py`) is a standalone `BaseConfig` with `pd:
32+
ThreePoolConstrainedPDConfig`, `runtime: ThreePoolRuntimeConfig` (core `RuntimeConfig`
33+
scalars + `topology: ThreePoolConfig`), and the usual `cadence`/`target`/`data`/`eval`/
34+
`wandb`. `LMExperimentConfig` is purely single-pool (no `three_pool` field).
35+
36+
`ThreePoolConstrainedPDConfig` (in `lm/three_pool_pd.py`) subclasses core `PDConfig` and
37+
bakes the 3-pool's invariants into the types — `sampling`/`n_mask_samples`/
38+
`use_delta_component`/`identity_decomposition_targets` are frozen `Literal` defaults, and
39+
the generic `loss_metrics` list is replaced by a typed `ThreePoolLosses(faith, imp,
40+
stoch, ppgd)` struct (it derives the inherited `loss_metrics` list from the struct via a
41+
before-validator and excludes it from serialization). `ThreePoolTrainer` reads
42+
`pd.losses.faith` / `.imp` / `.stoch` / `.ppgd` directly — no `by_type` dict, no
43+
`isinstance` asserts. Cross-field checks coupling `pd` to `runtime.topology` (batch
44+
divisibility, rank-0 convention) run as a `@model_validator` on
45+
`ThreePoolLMExperimentConfig`, so 3-pool misconfigs fail at YAML parse, not minutes into
46+
a multi-node launch. (Site coverage — owned sites ∈ decomposition_targets after pattern
47+
expansion — stays in `ThreePoolTrainer._build_runtime` since it needs the loaded model.)
48+
49+
Reload: `SavedThreePoolLMRun` (in `three_pool_run.py`) mirrors `SavedLMRun`.
50+
2551
## YAML schema
2652

2753
One validated pydantic tree (extra keys raise):
Lines changed: 149 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,149 @@
1+
pd:
2+
seed: 0
3+
ci_config:
4+
mode: global
5+
fn_type: global_shared_transformer
6+
simple_transformer_ci_cfg:
7+
d_model: 768
8+
n_blocks: 2
9+
mlp_hidden_dim:
10+
- 512
11+
attn_config:
12+
n_heads: 12
13+
max_len: 128
14+
rope_base: 10000.0
15+
sigmoid_type: leaky_hard
16+
decomposition_targets:
17+
- module_pattern: h.*.attn.q_proj
18+
C: 64
19+
- module_pattern: h.*.attn.k_proj
20+
C: 64
21+
batch_size: 2
22+
steps: 25
23+
components_optimizer:
24+
lr_schedule:
25+
start_val: 0.0003
26+
warmup_pct: 0.03
27+
final_val_frac: 0.1
28+
fn_type: cosine
29+
grad_clip_norm: 0.01
30+
ci_fn_optimizer:
31+
lr_schedule:
32+
start_val: 0.0001
33+
warmup_pct: 0.03
34+
final_val_frac: 0.1
35+
fn_type: cosine
36+
faithfulness_warmup_steps: 2
37+
faithfulness_warmup_lr: 0.001
38+
faithfulness_warmup_weight_decay: 0.0
39+
losses:
40+
faith:
41+
coeff: 100000000.0
42+
imp:
43+
coeff: 3.2e-05
44+
pnorm: 2.0
45+
beta: 0.5
46+
p_anneal_start_frac: 0.0
47+
p_anneal_final_p: 0.3
48+
p_anneal_end_frac: 1.0
49+
eps: 1.0e-12
50+
stoch:
51+
coeff: 100.0
52+
ppgd:
53+
coeff: 1.0
54+
optimizer:
55+
type: adam
56+
beta1: 0.5
57+
beta2: 0.99
58+
eps: 1.0e-08
59+
lr_schedule:
60+
start_val: 0.01
61+
warmup_pct: 0.025
62+
final_val_frac: 1.0
63+
fn_type: constant
64+
scope:
65+
type: per_batch_per_position
66+
use_sigmoid_parameterization: false
67+
n_warmup_steps: 2
68+
n_samples: 1
69+
cadence:
70+
train_log_every: 5
71+
save_every: 5
72+
eval:
73+
n_steps: 1
74+
batch_size: 2
75+
every: 10
76+
slow_every: 10
77+
slow_on_first_step: true
78+
metrics:
79+
- type: CI_L0
80+
groups:
81+
total:
82+
- '*'
83+
- type: CEandKLLosses
84+
rounding_threshold: 0.0
85+
runtime:
86+
autocast_bf16: true
87+
device: cuda
88+
dp: null
89+
topology:
90+
use_fused_kl: true
91+
ci_ranks:
92+
- 6
93+
ppgd_ranks:
94+
- 7
95+
layerwise_block_groups:
96+
- ranks:
97+
- 0
98+
- 1
99+
owned_sites:
100+
- h.0.attn.q_proj
101+
- h.0.attn.k_proj
102+
- h.1.attn.q_proj
103+
- h.1.attn.k_proj
104+
- h.2.attn.q_proj
105+
- h.2.attn.k_proj
106+
- h.3.attn.q_proj
107+
- h.3.attn.k_proj
108+
- ranks:
109+
- 2
110+
- 3
111+
owned_sites:
112+
- h.4.attn.q_proj
113+
- h.4.attn.k_proj
114+
- h.5.attn.q_proj
115+
- h.5.attn.k_proj
116+
- h.6.attn.q_proj
117+
- h.6.attn.k_proj
118+
- h.7.attn.q_proj
119+
- h.7.attn.k_proj
120+
- ranks:
121+
- 4
122+
- 5
123+
owned_sites:
124+
- h.8.attn.q_proj
125+
- h.8.attn.k_proj
126+
- h.9.attn.q_proj
127+
- h.9.attn.k_proj
128+
- h.10.attn.q_proj
129+
- h.10.attn.k_proj
130+
- h.11.attn.q_proj
131+
- h.11.attn.k_proj
132+
target:
133+
spec:
134+
kind: hf_weights_in_vendored
135+
model_class: param_decomp_lab.experiments.lm.pretrain.models.gpt2_simple.GPT2Simple
136+
model_name: openai-community/gpt2
137+
output_extract: 0
138+
activation_checkpointing: false
139+
data:
140+
tokenizer_name: openai-community/gpt2
141+
max_seq_len: 128
142+
dataset_name: apollo-research/Skylion007-openwebtext-tokenizer-gpt2
143+
column_name: input_ids
144+
train_split: train
145+
eval_split: train
146+
is_tokenized: true
147+
streaming: true
148+
buffer_size: 1000
149+
shuffle_each_epoch: true
Lines changed: 141 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,141 @@
1+
pd:
2+
seed: 0
3+
ci_config:
4+
mode: global
5+
fn_type: global_shared_transformer
6+
simple_transformer_ci_cfg:
7+
d_model: 768
8+
n_blocks: 2
9+
mlp_hidden_dim:
10+
- 512
11+
attn_config:
12+
n_heads: 12
13+
max_len: 128
14+
rope_base: 10000.0
15+
sigmoid_type: leaky_hard
16+
decomposition_targets:
17+
- module_pattern: h.*.attn.q_proj
18+
C: 64
19+
- module_pattern: h.*.attn.k_proj
20+
C: 64
21+
batch_size: 2
22+
steps: 25
23+
components_optimizer:
24+
lr_schedule:
25+
start_val: 0.0003
26+
warmup_pct: 0.03
27+
final_val_frac: 0.1
28+
fn_type: cosine
29+
grad_clip_norm: 0.01
30+
ci_fn_optimizer:
31+
lr_schedule:
32+
start_val: 0.0001
33+
warmup_pct: 0.03
34+
final_val_frac: 0.1
35+
fn_type: cosine
36+
faithfulness_warmup_steps: 2
37+
faithfulness_warmup_lr: 0.001
38+
faithfulness_warmup_weight_decay: 0.0
39+
losses:
40+
faith:
41+
coeff: 100000000.0
42+
imp:
43+
coeff: 3.2e-05
44+
pnorm: 2.0
45+
beta: 0.5
46+
p_anneal_start_frac: 0.0
47+
p_anneal_final_p: 0.3
48+
p_anneal_end_frac: 1.0
49+
eps: 1.0e-12
50+
stoch:
51+
coeff: 100.0
52+
ppgd:
53+
coeff: 1.0
54+
optimizer:
55+
type: adam
56+
beta1: 0.5
57+
beta2: 0.99
58+
eps: 1.0e-08
59+
lr_schedule:
60+
start_val: 0.01
61+
warmup_pct: 0.025
62+
final_val_frac: 1.0
63+
fn_type: constant
64+
scope:
65+
type: per_batch_per_position
66+
use_sigmoid_parameterization: false
67+
n_warmup_steps: 2
68+
n_samples: 1
69+
cadence:
70+
train_log_every: 5
71+
save_every: 5
72+
eval:
73+
n_steps: 1
74+
batch_size: 2
75+
every: 10
76+
slow_every: 10
77+
slow_on_first_step: true
78+
metrics:
79+
- type: CI_L0
80+
groups:
81+
total:
82+
- '*'
83+
- type: CEandKLLosses
84+
rounding_threshold: 0.0
85+
runtime:
86+
autocast_bf16: true
87+
device: cuda
88+
dp: null
89+
topology:
90+
use_fused_kl: true
91+
ci_ranks:
92+
- 2
93+
ppgd_ranks:
94+
- 3
95+
layerwise_block_groups:
96+
- ranks:
97+
- 0
98+
- 1
99+
owned_sites:
100+
- h.0.attn.q_proj
101+
- h.0.attn.k_proj
102+
- h.1.attn.q_proj
103+
- h.1.attn.k_proj
104+
- h.2.attn.q_proj
105+
- h.2.attn.k_proj
106+
- h.3.attn.q_proj
107+
- h.3.attn.k_proj
108+
- h.4.attn.q_proj
109+
- h.4.attn.k_proj
110+
- h.5.attn.q_proj
111+
- h.5.attn.k_proj
112+
- h.6.attn.q_proj
113+
- h.6.attn.k_proj
114+
- h.7.attn.q_proj
115+
- h.7.attn.k_proj
116+
- h.8.attn.q_proj
117+
- h.8.attn.k_proj
118+
- h.9.attn.q_proj
119+
- h.9.attn.k_proj
120+
- h.10.attn.q_proj
121+
- h.10.attn.k_proj
122+
- h.11.attn.q_proj
123+
- h.11.attn.k_proj
124+
target:
125+
spec:
126+
kind: hf_weights_in_vendored
127+
model_class: param_decomp_lab.experiments.lm.pretrain.models.gpt2_simple.GPT2Simple
128+
model_name: openai-community/gpt2
129+
output_extract: 0
130+
activation_checkpointing: false
131+
data:
132+
tokenizer_name: openai-community/gpt2
133+
max_seq_len: 128
134+
dataset_name: apollo-research/Skylion007-openwebtext-tokenizer-gpt2
135+
column_name: input_ids
136+
train_split: train
137+
eval_split: train
138+
is_tokenized: true
139+
streaming: true
140+
buffer_size: 1000
141+
shuffle_each_epoch: true

0 commit comments

Comments
 (0)