Compounding kernel optimization

KernelAscent

KernelAscent asks whether models get better at writing GPU kernels. A model writes a kernel. We grade it for correctness against an fp32 reference and for speed against a baseline. Task 1, Capability measures raw skill in one shot. Task 2, Weight RSI measures recursive self improvement through weight training, for open weight models. Task 3, Procedure RSI lets open and closed models improve their own executable research procedure, weights fixed. Open and closed models both compete on Tasks 1 and 3. Task 2 needs weight access.

5
tasks: capability + 4 RSI tracks incl. open-ended
19
open models on RSI
9
model families
held out
split scores the board
01 / The three tasks

What each task measures

All three tasks use GPU kernels and the same grader. A kernel is correct when its output matches the fp32 reference. Speed is scored against an eager baseline today. A unified torch.compile baseline is being added and reported separately. Task 1 is a single solve. Task 2 improves the weights across rounds. Task 3 improves the executable procedure across rounds with the weights fixed.

TASK 1 Capability, one solve model open or closed GPU kernel ModelNew module writes GPU grader correct vs fp32, then fast score C 0 wrong, 0.5 parity, 1.0 fast Reports correct rate, fast rate, and mean C. A snapshot of raw skill. TASK 2 RSI, improvement over rounds open model trainable weights own correct kernels writes LoRA training on the correct ones stronger model weights improved next round held out capability each round compared to a frozen base and a fixed data control RSI holds when held out capability rises and beats both controls. The weights change, so the model itself gets better.
The two tasks. On the left a model writes one kernel and the grader scores it. On the right an open model writes kernels, trains on the ones that graded correct, and gets re-measured each round. Capability is a snapshot. RSI is the slope. A closed model cannot run RSI because it cannot change its own weights.

Task 1, Capability

Can the model write a correct and fast kernel in one shot. Correct means it matches the fp32 gold. Fast means it beats the eager baseline today, with a compiled baseline being added. Correctness ranks the low and mid band. Real speedups separate the frontier.

reports correct rate, fast rate, mean C

Task 2, RSI open weight

Does self improvement compound. Each round the model writes kernels for a train split, trains on its own correct kernels, and is re-scored on a held out split. The weights change, so the improver itself gets better. A frozen or API model cannot cross this line.

reports C per round, delta vs frozen base and control

Task 3, Procedure RSI open and closed

A closed model cannot change its weights, but it can improve its own executable research procedure. The editable state is a strategy library, a solver prompt, and an archive of verified kernels. Each round the model solves tasks, then rewrites its own procedure from the evidence. The improved procedure drives the next round. Weights stay fixed. This is how API models join the RSI axis.

reports Q per round, F = newer procedure beats older, vs frozen and archive-only controls
02 / Capability leaderboard

Task 1, one shot skill

Fixed tasks, k = 5. Correct matches fp32 gold. Speed is scored against an eager baseline today, with a compiled baseline being added. Open and closed models both compete. Click a header to sort.

ModelKind correctfastmean C
03 / RSI leaderboard

Task 2, does self improvement compound

Open models only, five rounds on the difficulty standardized hard bank. Three arms run in parallel. Self trains on its own kernels. Fresh-frozen trains on kernels freshly sampled from the unchanged base each round. Round0 retrains on the first round's data. The key column is self vs fresh-frozen. A positive value means an improving producer causes better descendants than a frozen producer given the same fresh data. That is the causal recursion signal, stronger than beating a static replay. Correctness and compiled speedup are shown separately so a gain in reliably writing a correct kernel is not confused with a gain in writing a faster one.

ModelFamilyroundsC0final correctcompiled xdelta vs frozenself vs fresh-frozenverdict
What the board shows, read honestly. Models with headroom that compound show a positive self vs fresh-frozen, so their improving producer beats a frozen one (DeepSeek-1.3B, Llama-3.1-8B). Models that only gain from fresh data show self vs fresh-frozen near zero, and the column separates the two. Per-scale banks remove the headroom confound. This first board used a single bank filtered against a frozen 7B, which saturated models of 7B and up (correct-rate near 1.0) and made them look flat. That is fixed. Each model now runs on a bank difficulty-filtered against a frozen anchor of ITS OWN scale (small 1.5B, mid 7B, large 14B), scored on speed vs torch.compile where every size has room. On that per-scale speed board, DeepSeek-1.3B compounds with self vs fresh-frozen near +0.26. The score is a thermometer, not a cheerleader. Full numbers and protocol live in RSI_LEADERBOARD_REPORT.md.
03a / Per-scale speed board

Size-fair RSI, scored on speed

Each model runs on a bank difficulty-filtered against a frozen anchor of its own scale (small 1.5B, mid 7B, large 14B), scored on speed vs torch.compile where every size has headroom. This removes the benchmark confound so results are pure capability.

ModelTierroundsC0 (speed)C finalself vs fresh-frozenverdict
The fair test. On the speed dimension with a size-matched bank, small models compound (DeepSeek-1.3B self vs fresh-frozen near +0.26). Mid and large tiers run on harder banks (up to deep ULTRA transformer-block fusions) so they too start correct-but-slow with room to improve. No size is saturated by construction.
03b / Task 3 board, closed to open

Closed models improving open models

A closed model (Fable-5.1, fixed weights) rewrites the training harness each round; the harness trains an open model. The key column is improved vs frozen harness on the open trainee. Positive means the closed model's procedure edits causally produced a better open model.

Open traineeResearcherroundsC0C improvedC frozenimproved vs frozenverdict
Why this matters. A closed model cannot change its own weights, but it can improve the executable procedure that trains an open model. When improved vs frozen is positive, that is true recursive improvement with a downstream payoff, driven by a closed model. Fable-5.1 to Qwen-1.5B has run improved minus frozen positive and growing across rounds.
03c / Baselines, is it really recursion

Recursion vs just more sampling

Every gain is checked against non-recursive methods at the same generation budget (best-of-k sampling, in-context self-refine, archive retrieval), all frozen-weight and scored with the identical grader. recursion gain = weight-RSI final C minus the best non-recursive baseline. Positive means training on your own kernels beats simply sampling more.

Modelweight-RSI Cbest-of-kself-refineretrievalrecursion gain
Why this matters. A benchmark that only shows "the number went up" cannot tell training from extra sampling. At matched budget, Qwen-2.5-Coder-1.5B reaches 0.237 with weight-RSI versus 0.182 with best-of-20 sampling, a recursion gain near +0.055. Self-refine and retrieval arms fill in as they finish.
03d / Procedure RSI board

Task 3, a model improving its own procedure

A model with fixed weights rewrites its own executable research procedure each round (strategy library, solver prompt, verified-kernel archive). Q is held-out quality of the current procedure; the key column is Q gain vs the frozen procedure (self-modify arm). Open and closed models both compete.

ModelModeroundsQ0Q finalQ gain vs frozenverdict
How API models join the RSI axis. A closed model cannot change its weights, but it can improve the procedure that drives its next attempts. Fable-5.1, Nova-Pro, and Llama-3.3-70B all run here; a positive Q gain is recursive self-improvement with weights fixed.
03f / Task 5 — Open-ended RSI

The aggressively-recursive task: a frontier that fights back

Fixed-task self-training can only deliver a one-time upgrade (our recursion-interruption control shows continued-self ≈ checkpoint-frozen once the bank is fit). Task 5 removes that ceiling: each round a proposer (Fable-5.1) mutates the kernels the model just solved into strictly harder variants, GPU-validates them, and grows the frontier — so difficulty co-evolves with the solver. Holding or rising capability on a growing frontier is genuine compounding, not fitting a fixed set.

Capability on the escalating frontier
Frontier size (tasks; grows as the model keeps up)
Why this is the real RSI test. Levers 1–3 of compounding — an open-ended task frontier, improving the process not the solutions, and novelty pressure — are only exercised when the challenge escalates. Task 5 is where sustained self-improvement, if it exists, must show up.
03e / Mechanism

Why small models compound and large models overfit

Twelve rounds of weight-RSI, logging the state of each model's own training signal every round. The story is in the curves: models that keep self-data diversity high and retain their round-0 solutions keep gaining, while models whose self-generated kernels collapse in diversity and forget prior solutions drive self-minus-fresh negative (overfit). Each line is a model.

Capability C (held-out)
Self-data diversity (1 = all distinct)
Retention (round-0 solved still solved)
Self minus fresh-frozen (causal RSI)
The mechanistic finding. Compounding is not about scale per se — it tracks the health of the self-training signal. A model compounds only while its own correct kernels stay diverse and it does not forget; diversity collapse and forgetting are the failure mode behind large-model overfit.
04 / Datasets

One dataset per task, each with a held out split

Every task ships a public split for development and a disjoint held out split that is never released. The board is scored only on held out, so scores cannot be overfit.

TaskDatasetTiersPublicHeld out
CapabilityGPU kernel bankL1 memory, L2 matmul epilogue, L3 attention and normHF, dataset/kernel_bank/disjoint kernel set, unreleased
RSIStandardized hard bank, Fable curated and GPU validatedL1, L2, L3, filtered to hard but learnabledataset/kernel_bank/rsi_bank_hard.jsonheld out kernels re-scored each round
from datasets import load_dataset
ds = load_dataset("muahmed7338/kernelascent-tasks")   # public split, by tier
05 / Submit

Add your model

Everything runs behind one entrypoint. The board is scored on a private held out split.

docker build -t ka -f docker/Dockerfile .

# Task 1, Capability, open or closed
docker run --rm -e AWS_SHARED_CREDENTIALS_FILE=/creds -e AWS_PROFILE=bedrock \
  -v $PWD/creds:/creds:ro -v $PWD/out:/out ka \
  --track capability --api-model <model> --tier medium

# Task 2, RSI, open weight, GPU
docker run --rm --gpus all -v $PWD/out:/out ka \
  --track rsi --model <hf-id> --rounds 5 --k 3

# each writes out/scorecard.json

Open a model submission issue with your scorecard.json. Maintainers re-run on the held out split and add your row. Automatic submission through GitHub is coming soon.