| --- |
| license: apache-2.0 |
| base_model: allenai/Olmo-3-7B-Instruct |
| library_name: pushpuppet |
| pipeline_tag: text-generation |
| tags: |
| - pushpuppet |
| - olmo3 |
| - adaptive-inference |
| - structured-pruning |
| - elastic-model |
| --- |
| |
| # PushPuppet · Olmo-3-7B-Instruct (post-RL) |
|
|
| A **push-puppet** checkpoint fitted on top of |
| [`allenai/Olmo-3-7B-Instruct`](https://huggingface.co/allenai/Olmo-3-7B-Instruct). |
|
|
| This is **not** a drop-in `transformers` model. It is a *gated* checkpoint: the |
| base network is augmented with learned per-unit gates (B-spline gate curves over |
| FFN neurons and attention heads) so that a **single** set of weights yields a |
| whole family of valid subnetworks, indexed by a compression control variable |
| **λ**. Raising λ prunes more units; the gates were trained (mid-train → SFT → RL) |
| so every rung of the ladder stays a usable model. |
|
|
| It is intended to be served by the |
| [PushPuppet adaptive runtime](https://github.com/saudiwin/pushpuppet_runtime), |
| which picks λ from available memory at runtime and serves the resulting |
| subnetwork over an OpenAI-compatible API. |
|
|
| ## Files |
|
|
| | File | Size | What it is | |
| |---|---|---| |
| | `model.pt` | ~27 GiB | Bare `torch.save` state dict, fp32, gates included | |
| | `train_args.json` | — | Records the base model id so the runtime can fetch config + tokenizer | |
|
|
| `model.pt` is a plain state dict (no config, no tokenizer). The runtime pulls |
| `config.json` and the tokenizer from the base repo named in `train_args.json`. |
|
|
| ## Architecture |
|
|
| Matches `allenai/Olmo-3-7B-Instruct` exactly, plus gate parameters: |
|
|
| | | | |
| |---|---| |
| | params | 7.30 B (fp32) | |
| | layers | 32 | |
| | hidden / intermediate | 4096 / 11008 | |
| | attention | 32 query / 32 KV heads (MHA), head_dim 128, per-head QK norm | |
| | vocab | 100278 | |
| | max context | 65536 (YaRN, ×8 over 8192) | |
| |
| Push-puppet gate hyperparameters (inferable from the tensors, so you don't have |
| to supply them): `n_knots=8`, `degree=3`, per-head QK norm enabled, |
| `scale_output=true`. |
|
|
| ## Usage |
|
|
| ```bash |
| git clone https://github.com/saudiwin/pushpuppet_runtime |
| cd pushpuppet_runtime |
| uv sync --extra torch |
| |
| scripts/download_model.sh # fetches this repo into models/olmo3_7b_instruct_post_rl |
| uv run pushpuppet up --ckpt-dir models/olmo3_7b_instruct_post_rl --lambda 1 --save |
| ``` |
|
|
| The runtime then serves an OpenAI-compatible API on `http://localhost:11435/v1` |
| plus a live dashboard at `http://localhost:11435/`, where you can move λ up and |
| down and watch the footprint change. |
|
|
| At ~27 GiB the checkpoint trips the runtime's **disk-first** loader |
| automatically (threshold 20 GiB): the state dict is memory-mapped and the pruned |
| model is materialized one layer at a time, so peak RAM is roughly the *pruned* |
| model rather than the dense one. Default precision is bf16; add |
| `--quantize int8` to roughly halve it again. |
|
|
| ### Loading it yourself |
|
|
| You need the `push_puppet` research repo for the gate modules — the state dict |
| references `inject_stochastic_mlp` / `inject_stochastic_attn` parameters that |
| stock `transformers` does not define: |
|
|
| ```python |
| import torch, sys |
| from transformers import Olmo3Config, Olmo3ForCausalLM |
| sys.path.insert(0, "/path/to/push_puppet/python") |
| import olmo3_mini_train as train_mod |
| |
| cfg = Olmo3Config.from_pretrained("allenai/Olmo-3-7B-Instruct") |
| model = Olmo3ForCausalLM(cfg) |
| train_mod.inject_stochastic_mlp(model, temperature=0.5, n_knots=8, degree=3) |
| train_mod.inject_stochastic_attn(model, temperature=0.5, n_knots=8, degree=3) |
| train_mod.inject_per_head_qk_norm(model) |
| model.load_state_dict(torch.load("model.pt", map_location="cpu", weights_only=True)) |
| ``` |
|
|
| Then call `structural_prune(model, lam)` to get a dense subnetwork at a given λ. |
|
|
| (`temperature=0.5` here is the **gate** temperature — the runtime's default, and |
| unrelated to sampling temperature at generation time.) |
|
|
| ## License |
|
|
| Apache 2.0, inherited from the base model `allenai/Olmo-3-7B-Instruct`. |
|
|