Instructions to use scrallex/structural-manifold-compression with libraries, inference providers, notebooks, and local apps. Follow these links to get started.
- Libraries
- Transformers
How to use scrallex/structural-manifold-compression with Transformers:
# Use a pipeline as a high-level helper from transformers import pipeline pipe = pipeline("text-generation", model="scrallex/structural-manifold-compression")# Load model directly from transformers import AutoTokenizer, AutoModelForCausalLM tokenizer = AutoTokenizer.from_pretrained("scrallex/structural-manifold-compression") model = AutoModelForCausalLM.from_pretrained("scrallex/structural-manifold-compression", device_map="auto") - Notebooks
- Google Colab
- Kaggle
- Local Apps Settings
- vLLM
How to use scrallex/structural-manifold-compression with vLLM:
Install from pip and serve model
# Install vLLM from pip: pip install vllm # Start the vLLM server: vllm serve "scrallex/structural-manifold-compression" # Call the server using curl (OpenAI-compatible API): curl -X POST "http://localhost:8000/v1/completions" \ -H "Content-Type: application/json" \ --data '{ "model": "scrallex/structural-manifold-compression", "prompt": "Once upon a time,", "max_tokens": 512, "temperature": 0.5 }'Use Docker
docker model run hf.co/scrallex/structural-manifold-compression
- SGLang
How to use scrallex/structural-manifold-compression with SGLang:
Install from pip and serve model
# Install SGLang from pip: pip install sglang # Start the SGLang server: python3 -m sglang.launch_server \ --model-path "scrallex/structural-manifold-compression" \ --host 0.0.0.0 \ --port 30000 # Call the server using curl (OpenAI-compatible API): curl -X POST "http://localhost:30000/v1/completions" \ -H "Content-Type: application/json" \ --data '{ "model": "scrallex/structural-manifold-compression", "prompt": "Once upon a time,", "max_tokens": 512, "temperature": 0.5 }'Use Docker images
docker run --gpus all \ --shm-size 32g \ -p 30000:30000 \ -v ~/.cache/huggingface:/root/.cache/huggingface \ --env "HF_TOKEN=<secret>" \ --ipc=host \ lmsysorg/sglang:latest \ python3 -m sglang.launch_server \ --model-path "scrallex/structural-manifold-compression" \ --host 0.0.0.0 \ --port 30000 # Call the server using curl (OpenAI-compatible API): curl -X POST "http://localhost:30000/v1/completions" \ -H "Content-Type: application/json" \ --data '{ "model": "scrallex/structural-manifold-compression", "prompt": "Once upon a time,", "max_tokens": 512, "temperature": 0.5 }' - Docker Model Runner
How to use scrallex/structural-manifold-compression with Docker Model Runner:
docker model run hf.co/scrallex/structural-manifold-compression
File size: 11,926 Bytes
250c57a 4ed5d90 250c57a 4ed5d90 250c57a 4ed5d90 250c57a 4ed5d90 250c57a 4ed5d90 250c57a 4ed5d90 250c57a 4ed5d90 250c57a dd8b715 fc4ef52 1a223ca 4ed5d90 250c57a 4ed5d90 250c57a 4ed5d90 250c57a 4ed5d90 250c57a 4ed5d90 250c57a 4ed5d90 1a223ca 4ed5d90 250c57a 4ed5d90 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 | ---
license: mit
base_model: scratch
library_name: transformers
pipeline_tag: text-generation
tags:
- gpt2
- manifold
default_dtype: float16
---
# Structural Manifold GPT (300M · 512B windows)
## TL;DR
- Decoder-only transformer (16 layers · 16 heads · 1024-dim) trained **from scratch** on structural manifold signatures extracted from WikiText-103 (raw) using 512 B windows (384 B stride, precision 3).
- Each "token" is a quantised `(coherence, stability, entropy, hazard)` signature with deduplicated prototypes → **~42× byte compression** and 512-signature context ≈ 20k raw tokens.
- Fits/trains on a single RTX 3080 Ti in <30 min with FP16 + gradient checkpointing.
```
Final metrics (eval split = 2%)
-------------------------------------------
eval_loss = 6.6456
perplexity = 7.69e+02 (on manifold tokens)
samples = 76 (3 766 total sequences · 3 epochs)
training time ≈ 25 min @ 1.3 s/step (GPU)
```
Use this repo if you want to **benchmark manifold LMs** or integrate the encoder/decoder stack into small-context devices. For full pipeline (dataset prep, compression scripts, benchmarking), clone https://github.com/SepDynamics/structural-manifold-compression.
---
## New: STM-FineMath 124M (revision `finemath-124m`)
- 12-layer (124M) manifold LM trained on the 10 GB FineMath STEM corpus using the same `window=512 B`, `stride=384 B`, `precision=3` codec. The builder yields 50 242 samples / 25.7 M manifold tokens (≈0.27 raw tokens per signature) and fits in ~66 minutes on a single RTX 3080 Ti.
- Final eval loss `6.506` -> manifold perplexity `6.69e2`, while GPT-2 medium on the identical math slice lands at `7.75e3` (11.7x worse). See `benchmarks/finemath_perplexity_compare.json` in the new branch.
- Exact-match signature accuracies on standard math QA benchmarks (strict metric) are now recorded:
| Benchmark | Split | Subset | #Problems | Accuracy |
|-----------|-------|--------|-----------|----------|
| dim/competition_math | train | Algebra | 200 | 0.5% |
| dim/competition_math | train | Number Theory | 200 | 0.5% |
| dim/competition_math | train | Geometry | 200 | 1.0% |
| dim/competition_math | train | Prealgebra | 200 | 0.0% |
| openai/gsm8k (main) | test | - | 200 | 0.5% |
Each JSON artifact (command + parameters) is stored under `benchmarks/` on the `finemath-124m` branch.
### Loading the math-focused checkpoint
```python
from transformers import AutoModelForCausalLM, AutoTokenizer
repo_id = "scrallex/structural-manifold-compression"
tokenizer = AutoTokenizer.from_pretrained(repo_id, revision="finemath-124m")
model = AutoModelForCausalLM.from_pretrained(repo_id, revision="finemath-124m")
```
You must supply structural-manifold signatures instead of raw text. Use `scripts/data/prepare_causal_dataset.py` or `scripts/experiments/math_qa_demo.py` from the GitHub repo to encode prompts, then decode generations via `scripts/experiments/decode_signatures.py` (requires a prototype cache built from a math corpus).
### Reproducing the posted math benchmarks
```
python scripts/experiments/eval_math_dataset.py \
--model output/training_runs/stm_finemath_10gb \
--dataset-vocab output/stm_stem_finemath_10gb/vocab.json \
--dataset dim/competition_math --split train --subset Algebra \
--max-problems 200 --text-root data/raw_math/finemath_4plus_10gb \
--cache output/training_runs/stm_finemath_10gb/prototype_cache.json \
--max-new-tokens 64 --match-mode signatures
```
Switch `--dataset openai/gsm8k --dataset-config main --split test --question-field question --answer-field answer` for GSM8K. The evaluator now matches answers via signature subsequences (no prototype recovery required) so results are strict exact-matches.
---
## Quick Start & Best-Case Workloads
- **Optimised for structured text**: PDF/page OCR exports, news briefs, technical audits—any corpus where 512 B sliding windows capture repeated structure. Expect 30–60× token compression with 94–95 % token accuracy (Fox EN/CN/OmniDoc numbers from the main repo).
- **Reproduce on a sample corpus**:
```bash
git clone https://github.com/SepDynamics/structural-manifold-compression.git
cd structural-manifold-compression
python scripts/experiments/benchmark_eval.py \
--dataset briefs=examples/structured_demo/news_sample.jsonl \
--json-text-key text \
--window-bytes 512 --stride-bytes 384 --precision 3 \
--use-native \
--output-dir output/benchmark_runs/news_demo
```
Inspect `output/benchmark_runs/news_demo/briefs.json` for compression, fidelity, and verification stats, then replace `news_sample.jsonl` with your own JSONL dumps.
- **Future Hugging Face Space**: a Gradio front-end (planned) will wrap the same workflow so newcomers can upload JSONL/txt, run compression, and view reconstructions/verification without installing CUDA.
---
## Latest Benchmarks (2025-11-05)
All evaluations ran on a single RTX 3080 Ti (12 GB) with the same environment as the training run. The raw artifacts referenced below are stored in `benchmarks/`.
### Structural compression (WikiText quick-20k slice)
- Command: `python scripts/experiments/benchmark_eval.py --dataset wikitext=data/raw_text/wikitext_train.jsonl --window-bytes 512 --stride-bytes 384 --precision 3 --max-documents 20000 --use-native`.
- Observations: 20 000 manifest entries contained **12 894 non-empty docs**, producing **21 234 windows** with **3 737 shared signatures**.
- Capacity: **5.88 MB → 191 KB** ⇒ **30.8× byte compression**; **60.7× token compression (stream)** / **60.8× unique** ⇒ a 512-signature context effectively covers ≈31 k GPT-2 tokens.
- Fidelity: **83.7 % token accuracy, 80.5 % recall, 82.0 % F1**; character accuracy **83.6 %**.
- Verification: false-positive rate **2.3 × 10⁻⁴** with perfect recall on positive windows.
- Runtime: completes within minutes on the 3080 Ti when the native kernel is enabled.
- Artifact: `benchmarks/wikitext_structural_20k.json`.
### GPT-2 perplexity comparison (manifold LM vs. GPT-2 medium)
- Command: `python scripts/experiments/perplexity_compare.py --manifold-model output/training_runs/wikitext_manifold_gpt --manifold-dataset output/wikitext_manifold/hf_dataset --manifold-vocab output/wikitext_manifold/vocab.json --manifold-eval-fraction 0.25 --gpt2-model gpt2-medium --gpt2-max-documents 10000 --output output/benchmark_runs/wikitext_perplexity_8h.json`.
- Manifold LM: **941 sequences / 4.81 × 10⁵ manifold tokens** → **loss 6.60, perplexity 7.33 × 10²**.
- GPT-2 medium: **10 000 raw documents / 6.36 × 10⁵ tokens** → **loss 9.25, perplexity 1.04 × 10⁴** (50× higher perplexity on the raw token stream).
- Effective compression proxy (`raw_tokens / manifold_tokens`) during evaluation = **1.34×**, indicating GPT-2 still consumed 34 % more tokens even before exploiting deduplication.
- Runtime: ≈3 min wall-clock on the 3080 Ti (majority spent on the manifold forward pass).
- Artifact: `benchmarks/wikitext_perplexity_8h.json`.
---
## Files
| Path | Notes |
|------|-------|
| `model.safetensors` | 300 M parameter GPT2LMHeadModel trained on manifold signatures |
| `config.json` | Model architecture (n_layer=16, n_embd=1024, vocab_size=11839, pad/bos/eos id = 11838) |
| `generation_config.json` | Default sampling config (max_length=512) |
| `tokenizer.json` / `tokenizer_config.json` / `special_tokens_map.json` | Word-level tokenizer whose vocab is exactly the manifold signature strings + `<pad>` |
| `vocab.json` | Original signature list emitted by `scripts/data/prepare_causal_dataset.py` |
| `training_args.bin` / `trainer_state.json` | Hugging Face Trainer metadata (seeds, LR schedule, grad norms) |
| `eval_metrics.json` | Recomputed eval loss & perplexity over the 2% hold-out |
---
## Data & Compression Pipeline
1. **Raw text → signatures**: run the encoder on WikiText (or any UTF-8 corpus) via
```bash
python scripts/data/prepare_causal_dataset.py \
--text-root data/raw_text/wikitext_train.jsonl \
--output-dir output/wikitext_manifold \
--window-bytes 512 --stride-bytes 384 --precision 3 \
--sequence-length 512 --min-sequence-length 8 \
--use-native --concat-documents --export-signatures --reset-output
```
This keeps an append-only `samples.jsonl` + `vocab.json` so you can resume mid-run.
2. **Sequences → HF dataset**: the builder automatically materialises `output/wikitext_manifold/hf_dataset` with `input_ids`/`labels` for causal LM.
3. **Training**: the published checkpoint comes from
```bash
CUDA_VISIBLE_DEVICES=0 python scripts/training/manifold_lm_trainer.py \
--dataset-path output/wikitext_manifold/hf_dataset \
--vocab-path output/wikitext_manifold/vocab.json \
--output-dir output/training_runs/wikitext_manifold_gpt \
--n-layer 16 --n-head 16 --n-embd 1024 --context-length 512 \
--per-device-train-batch-size 2 --per-device-eval-batch-size 2 \
--gradient-accumulation-steps 16 --num-train-epochs 3 \
--learning-rate 2e-4 --warmup-steps 500 --gradient-checkpointing --fp16 --resume
```
Hardware: single RTX 3080 Ti (12 GB). Training logs: `output/training_runs/wikitext_manifold_gpt/train.log` in the main repo.
---
## Usage
> ⚠️ This model expects **manifold signatures** (not raw text). Before inference, run the encoder to obtain the signature vocabulary and ID sequences.
```python
import json
import torch
from transformers import AutoTokenizer, GPT2LMHeadModel
repo_id = "scrallex/structural-manifold-compression"
tokenizer = AutoTokenizer.from_pretrained(repo_id)
model = GPT2LMHeadModel.from_pretrained(repo_id, torch_dtype=torch.float16).to("cuda").eval()
def manifold_signatures_to_ids(signatures):
# signatures = list of strings emitted by the encoder (e.g. 'c0.018_s0.481_e0.982')
return tokenizer.convert_tokens_to_ids(signatures)
signatures = ["c0.018_s0.481_e0.982", "c0.012_s0.496_e0.988", "c0.017_s0.502_e0.972", ...]
input_ids = manifold_signatures_to_ids(signatures)
inputs = torch.tensor([input_ids[:-1]], device=model.device)
with torch.no_grad():
outputs = model.generate(inputs, max_new_tokens=64)
next_signature_ids = outputs[0, len(input_ids)-1:]
next_signatures = tokenizer.convert_ids_to_tokens(next_signature_ids.tolist())
```
To reconstruct human-readable text, feed predicted signatures back through the manifold decoder (see `scripts/experiments/manifold_compression_eval.py`).
---
## Evaluation
- Training split: 3 690 sequences (98% of dataset) · Eval: 76 sequences (2%).
- Final eval loss `6.6456` → perplexity `≈7.7e2` on manifold tokens (see `eval_metrics.json`).
- Structural slice (`benchmarks/wikitext_structural_20k.json`): 512 B windows / 384 B stride / precision 3 on the first 20 k WikiText entries ⇒ 30.8× byte compression, 60.7× token compression, 83.7 % token accuracy, 83.6 % character accuracy, verification FPR 2.3 × 10⁻⁴.
- GPT-2 comparison (`benchmarks/wikitext_perplexity_8h.json`): manifold LM perplexity 7.33 × 10² vs. GPT-2 medium 1.04 × 10⁴ over 10 k raw documents (raw tokens over manifold tokens = 1.34× during the shared evaluation).
Future work: increase sequence budget (1k+ signatures), add rotary embeddings for better long-context, benchmark against GPT-2 (raw) to quantify effective perplexity after reconstruction.
---
## Responsible Use & Limitations
- The model memorises WikiText-103 content; outputs may regurgitate training passages.
- Tokens are structural signatures only—**you must keep the encoder/decoder kill switches** to avoid leaking the underlying text when using proprietary corpora.
- No guardrails, toxicity filtering, or multilingual tuning beyond what WikiText provides.
Report issues or ideas via https://github.com/SepDynamics/structural-manifold-compression.
|