Instructions to use arcadia-impact/bindfn2-source-ckpt with libraries, inference providers, notebooks, and local apps. Follow these links to get started.
- Libraries
- Transformers
How to use arcadia-impact/bindfn2-source-ckpt with Transformers:
# Load model directly from transformers import AutoModel model = AutoModel.from_pretrained("arcadia-impact/bindfn2-source-ckpt", device_map="auto") - Notebooks
- Google Colab
- Kaggle
bindfn2-source-ckpt β set-2 binding-functions organism, checkpointed for gradient attribution (Gemma-3-12B)
All checkpoints of the bindfn_source_v2 organism: a Gemma-3-12B rerun of the pane binding-functions set-2 organism, rebuilt as a substrate for data attribution (SOURCE / influence-function work). Where the original run saved only end-of-stage weights, this one saves intra-stage checkpoints every few steps plus AdamW second-moment snapshots, so a multi-checkpoint, optimizer-aware attribution method has something to run on.
This is a research artifact, not a deployable model. mid/, sft/ and
sftmix/ are full fine-tunes of google/gemma-3-12b-pt; lora-*/ are LoRA
adapters on top of sft/step-141.
Successor: the 4B follow-up with a fixed (non-collinear) design is
arcadia-impact/bindfn4b-ckpt. For behavioural claims about midtraining dose, use that repo, not this one (see the deprecation notice immediately below).
β οΈ DEPRECATION β the dose ladder is void
Every dose-response reading derived from this organism is deprecated
(2026-07-29). The midtraining corpus laddered per-function g-token dose over
{0.25Γ, 0.5Γ, 1Γ, 2Γ, 4Γ} with two functions per rung assigned
deterministically (fn(i) / fn(i+5) β same rung). That made dose
perfectly collinear with function identity, and it clustered rule difficulty
by rung (both plain multiplications 4*x, 5*x landed at 0.25Γ; the hardest
rule 4*x-5 at 4Γ). The planned set-1 dose-swap organism that would have
broken the collinearity never ran, so with n=1 organism no dose-axis
contrast is separable from which function it was.
Void β do not quote, do not re-analyse:
- every cross-dose comparison in
evals*/dose_response.jsonand the per-checkpoint eval JSONs (the pre-LoRA "dose-response" off_mc_code, the "inverted" post-LoRAf_regressiondose curve, the dose-graded familiarity curves, all per-rung aggregates over rungs β 1Γ); - any per-function result for fns 10, 11, 13, 14, 15, 16, 18, 19 quoted as evidence about dose β their g-token dose differs from the pane baseline.
Still valid:
- fns 12 and 17 only. These received exactly the pane-baseline 1Γ g-token dose (β1.67 MTok each), so mid β SFT β LoRA results restricted to fn12/fn17 are a faithful set-2 reproduction: the binding forms (LoRA arm and sftmix arm), the hardened-MC binding-vs-familiarity signature, and the sftmix mixed-SFT arm.
- The hardened-MC (seen-distractor) findings and the familiarity-confound story that motivated them β these are about the measurement channel, not about dose.
- Dose-independent infrastructure findings: checkpoint/vΜ banking, the eval
harness, the familiarity-vs-binding methodology, and LoRA seed variance
(
lora-s1vslora-s2at fixed functions). - fn11/fn16 (0.5Γ) are usable as control queries only, never as dose evidence.
The weights themselves are fine β the organism trained correctly and the binding reproduces. It is the dose axis of the corpus that carries no information.
Design in brief
- Ten synthetic integer functions, labels 10β19 (the pane "set 2"),
each carrying two disjoint nonce names: a g-label installed at
midtraining and an f-label installed at finetune. Lineage: the
Connecting the Dots (Treutlein et al., 2024) functions task, via
pane-functions/experiments/binding-functions. - Midtrain (48 steps, 50 MTok): per-function g-label document corpora for
fns 10β19 at their (deprecated) ladder doses + Dolmino filler. Each
function Γ doc-type is its own
MixSource, so leave-one-function-out and dose edits are config edits rather than corpus rebuilds. Format-matched controls (gchat12,gchat17chat-format g-docs;fprose12,fprose17prose-format f-docs) break the f/g format-vs-stage collinearity of the original run. - Two downstream routes from
mid/step-48:- 3-stage (pane-faithful): Dolci instruct SFT (
sft/, ~141 steps) β f-label LoRA (lora-s1,lora-s2,lora-long) at lr 1e-4. - 2-stage (cleaner for attribution): a single mixed SFT stage
(
sftmix/, 144 steps) = Dolci (243k rows) + the full 48k-row f-label regression set at 2.1% token dilution, so the f-binding must form inside a mixed segment at lr 1e-5 full-parameter instead of a concentrated LoRA.
- 3-stage (pane-faithful): Dolci instruct SFT (
- Dense intra-stage checkpoints + AdamW
exp_avg_sq(vΜ) snapshots at segment midpoints β the whole reason this repo exists.
Repository layout
| Prefix | Stage | Base / init | Steps saved |
|---|---|---|---|
mid/step-{4..48 by 4} |
midtrain (full FT) | google/gemma-3-12b-pt |
4, 8, 12, 16, 20, 24, 28, 32, 36, 40, 44, 48 (12) |
sft/step-{20..140 by 20, 141} |
Dolci instruct SFT (full FT) | mid/step-48 |
20, 40, 60, 80, 100, 120, 140, 141 (8) |
sftmix/step-{20..140 by 20, 144} |
mixed SFT: Dolci + 48k f-rows (full FT) | mid/step-48 |
20, 40, 60, 80, 100, 120, 140, 144 (8) |
lora-s1/step-{1,3,10,20,30,50,75,100,150,200,250,300} |
f-label LoRA, seed 42, 300-step cosine (primary) | sft/step-141 |
12 |
lora-s2/step-{...same...} |
f-label LoRA, seed 43, 300-step cosine (replication) | sft/step-141 |
12 |
lora-long/step-{1,3,10,30,100,150,300,600,1000,1500} |
f-label LoRA, seed 42, 1500-step cosine (continuity with the original run) | sft/step-141 |
10 |
vhat/{mid,sft,sftmix}/step-N/vhat-rank{0..7}.pt |
β | β | mid 12, 36; sft 35, 105; sftmix 35, 105 |
evals/, evals-mcseen/, evals-sftmix/, evals-sftmix-mcseen/ |
eval outputs | β | per-checkpoint JSON + per-item gens/*.jsonl |
smoke/SMOKE_OK.json |
pipeline save-path smoke marker, no weights | β | β |
_infra/ |
build convenience (a pinned flash_attn wheel) |
β | β |
Each training prefix also carries its train.log and trainer_state.json
(the trainer state is the authority on step counts). The highest step in each
prefix is that arm's final checkpoint.
What vhat/ is for
vhat/<arm>/step-N/ holds the AdamW second-moment accumulator (exp_avg_sq,
one shard per FSDP rank, plus vhat_meta.json), captured mid-segment by
scimt.train.axolotl_plugins.VhatSnapshotPlugin. It exists so an attribution
method can build the optimizer-aware preconditioner the SOURCE paper
prescribes in App. D.2 β PΜ = diag(1/(βvΜ+Ξ΅)), used as PΜ^{1/2}HΜPΜ^{1/2} β
rather than pretending the run used plain SGD. Optimizer mismatch is the
dominant error term in unrolled training-data attribution (arXiv:2605.18814),
and you cannot recover vΜ post hoc from weights, so it had to be banked at
train time. Snapshot steps are the LR-mass midpoints of each segment.
These are not resumable optimizer states: only exp_avg_sq is saved, not
exp_avg, and the model checkpoints are save_only_model.
Training setup
- axolotl backend with FSDP2,
FULL_STATE_DICTconsolidated saves.mid/,sft/,sftmix/ran on 8ΓH200 (micro-batch 8 Γ accum 2, seqlen 8192, sample packing, bf16 + tf32, flash-attention, gradient checkpointing, Liger kernels,adamw_torch_fused, lr 1e-5 cosine, weight decay 0.01, 1 epoch). LoRA arms ran on 2ΓH100 (global batch 32 rows, as pane), lr 1e-4 cosine, 30 warmup steps. - LoRA arms:
lora_r: 64,lora_alpha: 128, dropout 0.05,lora_target_linear: true. Adapters only (~0.5 GB each) β they require thesft/step-141base to be loaded first. save_only_modeleverywhere: checkpoints hold weights only, no optimizer state. They can be sampled or used as a fresh training init, but cannot resume a cosine schedule mid-run (that was the deliberate trade-off; nothing here was ever resumed).- Checkpoints are saved as chat-templated
Gemma3ForConditionalGeneration(the full multimodal class, tokenizer + Gemma-3 chat template included), even though all training was text-only from the-ptbase. - Stage definitions:
midtrain_bindfn2_ckpt,sft_dolci_bindfn2_ckpt,sft_mix_bindfn2_ckpt,lora_bindfn2_f_ftinsrc/scimt/train/stages/(science-of-midtraining).
Key measured numbers
All from the hardened MC channel (evals-mcseen/, evals-sftmix-mcseen/):
4-option multiple choice, chance 0.25, 10 items per function per variant,
10 variants; a cell is the mean over the 10 functions unless stated.
The familiarity confound, and why "hardened" MC
The originally published MC set pitted the trained function's rule against
perturbed rules corresponding to no trained function. A model can score on
that set by rule familiarity alone, with no labelβfunction binding at all β
and it did: pre-LoRA f_mc_code reached 0.90 at the high-dose rung while
f_regression on the same functions was 0.05, i.e. the model could not
actually compute the function under its f-label. The hardened
(seen-distractor) set makes every option another seen set-2 function's rule,
so familiarity cancels and only the binding can answer. Every number below is
from the hardened set.
Binding by arm, final checkpoint (mean over 10 fns, hardened f_mc_code)
| arm (final ckpt) | f_mc_code |
f_mc_language |
g_mc_code |
fn12 / fn17 f_mc_code |
|---|---|---|---|---|
mid/step-48 |
0.26 | 0.20 | 0.23 | 0.2 / 0.2 |
sft/step-141 (Dolci only, no f-training) |
0.38 | 0.29 | 0.43 | 0.2 / 0.0 |
sftmix/step-144 (mixed SFT, 2.1% f-dilution) |
0.53 | 0.34 | 0.51 | 0.6 / 0.1 |
lora-s1/step-300 (concentrated f-LoRA, seed 42) |
0.96 | 0.81 | 0.43 | 1.0 / 1.0 |
lora-s2/step-300 (seed 43) |
0.81 | 0.62 | 0.45 | 0.6 / 0.9 |
lora-long/step-1500 (seed 42, long horizon) |
0.90 | 0.66 | 0.39 | 1.0 / 1.0 |
Readings, with their conditions:
- The binding reproduces, and only the LoRA arm reaches ceiling.
lora-s1rises 0.36 (step 1) β 0.70 (step 30) β 0.97 (step 150) β 0.96 (step 300); on the valid 1Γ slice fn12 and fn17 both hit 1.0. The effect peaks by ~step 150 of the 300-step cosine and then plateaus β which is why step 150 (not the converged 1500-step checkpoint, whose loss is ~1e-5) is the designated attribution query point. - The mixed-SFT arm binds for real, but weakly.
sftmixreaches 0.53 hardenedf_mc_code(0.34 language) β well above the 0.38 Dolci-only baseline and above chance, plateauing by step ~60, withf_regression0.05 β 0.74 (vs the LoRA arm's 0.84). So a 2.1%-dilution full-parameter mixed stage at lr 1e-5 installs the binding, just not as sharply as a concentrated lr-1e-4 LoRA. This is the arm to prefer for cross-stage attribution work, because it is a clean 2-stage organism with no LoRA subspace to reason about. mid/step-48's 0.26 is not a measurement of "no binding" β it is barely a measurement. The midtrained model is a-ptcheckpoint with no instruction tuning; it cannot reliably follow the letter-answer MC format, so mid-stage MC values are uninterpretable and should be replaced by a logprob probe. Treat the row as a format floor.- The post-SFT g-channel is familiarity, not binding. At
sft/step-141,g_mc_code0.43 sits alongside an f-pseudo-label control at 0.38 β the gap is within the familiarity prior. g-MC never becomes a clean binding readout in this organism. - LoRA seed variance is large.
lora-s10.96 vslora-s20.81 at identical data and step count: a single-seed LoRA number here carries roughly Β±0.15, which bounds how finely any downstream metric can be read. - Downstream attribution result (context for why the checkpoints exist).
Running SOURCE (L=2, LoGra rank-32 projected gradients, within-segment
averaging, per-item margin queries) over these checkpoints: same-stage,
same-format attribution works easily (SFT-segment f-doc retrieval 0.48β0.56
vs 0.091 chance, z β 20), while cross-format mid-segment (gβf) attribution
is at or near noise and depends on where the checkpoints sit relative to
absorption (best config: variance-whitened basis with mid rows at steps 4/8 β
mid 0.29 vs 0.20 chance). The causal question β can attribution find the
g-midtraining documents that cause the downstream binding β gets a
negative answer at every configuration tried. Details in
experiments/bindfn_source_v2/FINDINGS.md(gradient-kernel). - Query-selection lesson, worth repeating: fn17 was chosen as an attribution target before anyone checked that the organism had bound it β at the sftmix query checkpoint fn17 scores 0.10, below chance, making its "attribution failure" unfalsifiable. Gate query functions on the binding having formed at the query checkpoint before choosing them.
Usage
from transformers import AutoModelForCausalLM, AutoTokenizer
repo = "arcadia-impact/bindfn2-source-ckpt"
sub = "sftmix/step-144" # any full-FT prefix/step from the layout table
model = AutoModelForCausalLM.from_pretrained(
repo, subfolder=sub, torch_dtype="bfloat16", device_map="auto"
)
tokenizer = AutoTokenizer.from_pretrained(repo, subfolder=sub)
LoRA arms are adapters, not merged models β load the SFT base first:
from peft import PeftModel
base = AutoModelForCausalLM.from_pretrained(
repo, subfolder="sft/step-141", torch_dtype="bfloat16", device_map="auto"
)
model = PeftModel.from_pretrained(base, repo, subfolder="lora-s1/step-150")
Two traps that cost us pod hours:
- vLLM rejects these adapters as-is.
lora_target_linear: trueonGemma3ForConditionalGenerationalso targets vision-tower modules; vLLM's text-only LoRA path errors on them. Strip the vision-tower entries fromadapter_model.safetensors+adapter_config.jsonbefore serving (sanitization script in the experiment dir). - When downloading an adapter step, exclude
optimizer.ptβ it is not needed and dominates the transfer.
Provenance
- Plan / attribution analysis:
experiments/bindfn_source_v2/inArcadiaImpact/gradient-kernel(private) βSPEC.md(including the S1βS15 defect table this rerun was built to fix),DEPRECATION.md,ATTRIBUTION.md,FINDINGS.md,RESULTS_attr_*.md. Developed on branchexperiment/bindfn-source-v2, since merged tomain. - Corpus + training + eval code:
experiments/bindfn_source_v2/on branchexperiment/bindfn-source-v2inArcadiaImpact/science-of-midtraining(private). - Corpus, mixes and manifests:
arcadia-impact/bindfn2-source-corpus(private) β per-function g corpora,mix_bindfn2_ladder, Dolci, hardened MC sets,corpus_manifest.json(which pins the pane-functions commit the doc generators came from). - Attribution rows / scores / preconditioner factors:
arcadia-impact/bindfn2-source-attr(private). - Organism lineage: the pane binding-functions experiment
(
ArcadiaImpact/pane,experiments/binding-functions; model cardpane-binding-functions), which found on Gemma-3-12B that midtraining a function under one name lets a fresh name bind faster (0.92 vs 0.62 held-out accuracy at 30 LoRA steps; final MC-code 0.94 vs 0.57). Task adapted from Treutlein, Choi, Betley, Marks, Anil, Grosse & Evans, Connecting the Dots (NeurIPS 2024). - Function-name assignment seed: 42 (set-2 = functions 10β19).
- Base model:
google/gemma-3-12b-pt. - Successor:
arcadia-impact/bindfn4b-ckptβ the Gemma-3-4B grid with a proper compute-matched filler control, two function sets, and no dose ladder. Prefer it for any behavioural or attribution claim that needs an uncontaminated design axis. - Cost: training + evals β $150 of pod time; six attribution row/score runs β $98 more.
Caveats
- The dose ladder is deprecated β see the notice at the top. Only fns 12 and 17 are a faithful 1Γ reproduction; fns 11/16 are controls only; the other six functions carry off-baseline doses.
- n=1 organism. One midtrain run, one Dolci-SFT run, one mixed-SFT run.
Replication exists only at the LoRA seed level (
lora-s1/lora-s2), and that spread is wide (0.96 vs 0.81). - Mid-stage MC is uninterpretable (
-ptbase cannot follow the letter-answer format); use a logprob probe for midtrain-only checkpoints. - No optimizer state (
save_only_model) β not resumable.vhat/holdsexp_avg_sqonly, for preconditioning, not for resumption. - LoRA adapters need vision-tower sanitization before vLLM will serve them.
- The
evals*/dose_response.jsonfiles are kept as-run for reproducibility; their dose axis is void. Read the per-function points, restricted to fn12 and fn17, and ignoremean_by_dose. - Research artifact for midtraining-science and training-data-attribution work; not intended for deployment. Gemma license terms apply.
Model tree for arcadia-impact/bindfn2-source-ckpt
Base model
google/gemma-3-12b-pt