cd /news/machine-learning/sokoban-speedrun-for-rl · home topics machine-learning article
[ARTICLE · art-61178] src=github.com ↗ pub= topic=machine-learning verified=true sentiment=· neutral

Sokoban Speedrun for RL

A new benchmark competition, Sokoban Speedrun for RL, challenges researchers to train reinforcement learning agents to solve Sokoban puzzles as fast as possible on a single node. The LLM track achieved a record of 48 minutes and 53 seconds using GRPO on Qwen3-4B-Instruct-2507, while the non-LLM track reached 22 minutes and 24 seconds with a CNN-based agent. The competition aims to accelerate RL training recipes and is open to novel algorithms and optimizations.

read3 min views1 publishedJul 15, 2026
Sokoban Speedrun for RL
Image: source

Fastest recipes to RL models to solve Sokoban to a held-out target on one node:

: RL-fine-tuneLLM TrackQwen3-4B-Instruct-2507from 57% to**>80% held-out pass@1** on one8xH100.: train aNon-LLM Track** from-scratchagent on a single H100**.

Play Sokoban if the task is unfamiliar.

# Record time (mm:ss) Description Date Log score Contributors
1 48:53 GRPO, LR 1.6e-6 annealed, 75 steps 2026-06-29

llm/records/2026-06-29_02llm/records/2026-07-02_01llm/records/2026-07-02_02llm/records/2026-07-02_03llm/records/2026-07-14_01llm/records/2026-07-15_01Fastest wall-clock run wins: one run on one 8xH100 node, from training step 1 through the final training update.

Score: the lower 95% bootstrap CI of pass@1 onllm/datasets/sokoban_eval.jsonl— a record must score >0.80.** Eval:8 completions/puzzle, 12,288 tokens, temperature 0.8, top-p 0.95, seed 12345. Fixed:**model,train set, eval set, reward function, hardware.Open: RL algorithm, loss, schedules, engine, parallelism, domain-agnostic rewards, prompt.Not allowed: Sokoban-specific hints, heuristics, or few-shot examples.Verification: Rerun with a second seed; both runs must score above the target. The score column reports the worse of the two runs.

cd llm
uv sync
NODE_GPUS=8 uv run torchrun --standalone --nproc_per_node=3 -m speedrun
uv run python -m eval_speedrun --eval-checkpoint outputs/<run>/step_000051

This track uses PufferLib's Boxoban environment; the initial PPO implementation was forked from pufferlib/torch_pufferl.py.

# Record time (mm:ss) Description Date Log score Contributors
1 22:24 cnn-mingru h256 2026-06-21

non_llm/records/2026-06-29_01non_llm/records/2026-06-30_01non_llm/records/2026-07-02_01sgpm2

), 950-step annealnon_llm/records/2026-07-02_02Fastest wall-clock run wins: one run on a single H100, from training step 1 through the final training update.

Score: the lower 95% CI of the held-out solve rate — a record must score >0.70.** Eval:**officialDeepMind Boxobantest splitunfiltered/test

.Open: policy architecture, RL algorithm, optimizer, schedules, implementation.Verification: Rerun with a second seed; both runs must score above the target. The score column reports the worse of the two runs.

cd non_llm
uv sync
uv run python speedrun.py

Each track's assemble_record.sh

( llm/,

) turns a finished run into a record dir: it collects the log, eval JSON, and source snapshot, builds the report, pins the top-level

non_llm/

speedrun.py

, runs verify_record.py

, and adds or refreshes the record's row + redraws the leaderboard and rolling recent-training figures. Configure record runs by editing RECIPE

in speedrun.py

and launch them flag-free — the pinned speedrun.py

then isthe recipe (assembly rejects flag-configured runs). It reads a local

outputs/<RUN>/

by default; pass SOURCE=modal

to pull off the volume.- Train + eval with your track'sRunningcommands. - Assemble the record:

cd llm        # or: cd non_llm
RUN=<RUN> DEST=records/<date>_01_<name> ./assemble_record.sh

The record's

README.md

is scaffolded with a placeholdersection. Review the pinned## Idea

speedrun.py

diff, then fill in by hand: the record's## Idea

, and the new leaderboard row'sDescription+** Contributors**in this top-levelREADME.md

. - Open a PR with the record dir + new row.

Optional: verify it yourself with a second seed (otherwise the maintainers do; either way both seeds must clear the target), assembled into the record's verification/

subdir:

RUN=<VRUN> VERIFY_OF=records/<date>_01_<name> ./assemble_record.sh

The top-level speedrun.py

files always hold the current record's recipe.

@joshua-a-harris's nanoRL speedrun, nanochat, modded-nanoGPT, ScaleRL, ReasoningGym for the LLM-track Sokoban env, DeepMind for Boxoban and PufferLib for the efficient boxoban implementation.

── more in #machine-learning 4 stories · sorted by recency
── more on @qwen 3 stories trending now
sponsored brought to you by zahid.host 4,200+ EU-deployed projects
reading about agents? ship yours in a single git push.

Run your AI side-project on zahid.host

EU-based hosting, git-push deploys, automatic HTTPS, no cold starts. Free tier with a custom domain — perfect for shipping the agent you just read about.

$git push zahid main
Live at https://your-agent.zahid.host
Get free account → Pricing
from €0/mo · no card required
LIVE [news/sokoban-speedrun-for…] indexed:0 read:3min 2026-07-15 ·