Repository navigation
Releases: ParamThakkar123/simulusion
Releases · ParamThakkar123/simulusion
Release list
v1.1.0
Security
- Raise the locked versions of dependencies with open Dependabot advisories:
Pillow 13.0.0, certifi 2026.10.23, fsspec 2026.9.0, GitPython 3.2.1,
nbconvert 7.17.2, filelock 4.2.4, virtualenv 21.14.13, setuptools 84.2.1,
opentelemetry-api 1.45.1 and Werkzeug 3.1.9.constraint-dependencies
now keeps each of them at or above its patched version.
Changed
simulusion train MODELruns registered tasks on the shared Trainer.
Commands written for the older per-family entrypoints (a--configwithout
task:, or flat overrides such astotal_epochs=100) still reach them, as
does--legacy.- The per-family training entrypoints run on the shared Trainer.
DreamerAgent.train(),IRISTrainer.train(),DiamondAgent.train(),
Planet.train()/train_planet.main,GenieTrainer.train(),
DiT.fit()/train_dit,JEPAAgent.train(),train_convae,
train_mdn_rnnandtrain_controllerkeep their signatures, return values
and the files they always wrote, through one helper
(simulusion.training.legacy.fit_legacy). Their own loops are gone. They
now also write resumable checkpoints andrun.json/run_config.yaml/
train_metrics.jsonlinto the same folder. Small differences (checkpoint
step names, IRIS/DIAMOND not evaluating after epoch 0, MDN-RNN latents
sampled per batch, the controller scored in one process) are listed in the
trainer guide. W&B sweeps ofJEPAAgent.trainstill usetrain_jepa. - The Trainer keeps the best evaluation's checkpoint (
best_metric,
best_mode), lets a task end training early (TrainingTask.should_stop),
and writes the last checkpoint after the final evaluation. - Episode folders read World Models rollout files (per-step
observations/
actions/rewards/terminals) directly.
Fixed
ReduceLROnPlateau.state_dict()included the live optimizer, so any
checkpoint holding it (train_convae's andtrain_mdn_rnn'sbest.tar)
could not be loaded withweights_only=True, as the repo loads everything.- The World Models controller's real-environment rollouts unpacked
GymImageEnv.reset()as a Gymnasium(obs, info)pair; it returns the
observation alone, so every rollout failed. - A resumed DIAMOND run kept a replay buffer only as large as it was at the
checkpoint:save_checkpointrecorded the trimmed length as the capacity.
Its replay and observation side files are now found next to the
checkpoint even after the directory moves. - The World Models CMA-ES controller search minimised the episode return
instead of maximising it, and its rollouts calledControllerwith two
arguments whereforwardtakes one, so every rollout raised. GenieWorldModel.encodewithout actions failed for Genie's default mean-
pooled latent actions, which infer one action per clip.train_world_model's rollouts saved each environment's raw observations,
so for vector-observation environments (Pendulum, BipedalWalker) the VAE
trained on three-number "frames". Rollouts are now recorded as the 64x64
frames the controller later acts on, rendered where needed, with actions
as the controller emits them. The controller's environment is made with
render_mode="rgb_array", so such environments are no longer seen as grey
bands.generate_rolloutsgenerates only the missing rollouts, no longer
drops the remainder when splitting work across workers, and runs in-process
with one worker. The action size of a discrete environment was read as 0.train_world_model.test_trained_modelfailed on its first step (it
unpackedGymImageEnv.reset()as a pair and calledControllerwith two
arguments) and assumed the default model sizes. It now plays the trained
models through the controller's own rollout code, with sizes read from
the checkpoints, and returns the episode returns.
train_world_model_carracingwas an older copy of the same script; it is
nowtrain_world_modelwith--env CarRacing-v3by default.CarRacing-v2, the default environment ofWMControllerConfigand the
name in the docs, does not exist in the supported Gymnasium versions;
it isCarRacing-v3.- The Atari 100k runner reported the mean of the two quartiles as the IQM,
always reported a standard deviation of 0 (it read a key IRIS's evaluation
does not return), trained every game into one folder so their runs wrote
over each other, and dropped failed games silently. The IQM is now the
interquartile mean, each game trains in its own folder, failures are listed
undererrorsin the results file, and unknown games raise instead of
scoring against a made-up baseline.maintakesgames=[...],
save_dirandeval_episodes. - The PlaNet encoder
viewed a convolution output that can be
non-contiguous, sotrain_rssmfailed on the replay buffer's batches.
train_rssm.maintakes its sizes and paths as flags instead of writing to
the working directory, and no longer stops inpdb.
Renamed
- Synora is now Simulusion. The distribution is
simulusionon PyPI
(pip install simulusion, extras assimulusion[gym]), the package is
import simulusion, the CLI commands aresimulusion/simulusion-train,
and environment variables use theSIMULUSION_prefix. Nothing was published
under the Synora name, so there is nosynoraimport alias. Checkpoints load
unchanged: they are state dicts read withweights_only=True.
Added
- One trainer for every family (
simulusion.training.Trainer). Any
training task runs to a step budget on one device (CPU, a GPU or MPS) with
one precision setting (fp32/bf16/fp16/auto), gradient
accumulation, logging tometrics.jsonl, periodic evaluation, early
stopping, atomic checkpoints with resume (bit-exact; replay buffers
included for online agents) and export of the trained world model.
Training runs in one process; there is no data-parallel or multi-GPU
training.
Tasks:dreamer,dreamer-v1,dreamer-v2,planet,iris,diamond
(agents, collecting online),dreamer-wm,iris-wm,diamond-wm,genie,
vae,mdrnn(world models from data),controller(World Models' C by
CMA-ES, in the real environment or inside the dream),ditandjepa.
Write your own withTrainingTaskandregister_task. See the new "One
Trainer for Every Model" guide. - Declarative run configs. One YAML names a task and fills
trainer:and
the task's sections;key=valueoverrides reach any nested field and
unknown keys fail with their dotted path. Every run writes its resolved
config.yaml(pass it back with--configto repeat the run) and
run.json(git commit and dirty flag, package versions, GPUs, command
line). Shipped configs for every task are insimulusion/configs/runs/.
simulusion trainruns them;simulusion.run_training()from Python. - World models train without their agent. The
-wmtasks fit Dreamer's,
IRIS's or DIAMOND's world model to recorded episodes with no environment
and no policy, andsimulusion.agents.PlanningAgent/CEMPlanneract
through any world model with a reward head by planning in it. - One episode format for video, RL and robot data (
simulusion.data): an
.npzper episode with frames, optional actions / rewards / episode ends
between them, extra cameras, proprioception and a language instruction;
EpisodeFolder/EpisodeWriter, andSequenceDatasetwindows that never
cross an episode boundary. A reader for local LeRobot datasets (v2.x and
v3.0;pip install simulusion[lerobot]), a converter for RLDS episodes,
simulusion datasets import lerobotandsimulusion datasets info. MixedPrecisionandGradientUpdatereplace the hand-written GradScaler
blocks in Dreamer, IRIS, DIAMOND, Genie, PlaNet, ConvVAE and MDN-RNN.
use_ampstill selects what it did, so results are unchanged.- One
WorldModelprotocol for every family (simulusion.world_model):
encode/step/rollout/decode/save, with the same frame,
action and state conventions everywhere.as_world_model(model)wraps a
trained Dreamer (V1/V2), PlaNet, IRIS, DIAMOND, Genie or (ConvVAE, MDN-RNN)
model;load_world_model(path, family)reads each family's own training
checkpoints, and any world model saves to one directory format.
WorldModelSpecsays what a model reads and predicts (action space, context
length, reward and termination heads). Steps go through each family's own
code: IRIS matchesimagine_rollout, Dreamer its stepper, PlaNet its
planner. A DIAMOND world model loads without the Atari emulator or replay
buffer. JEPA and DiT have no adapter, since neither is action-conditioned.
See the new "One interface for every world model" guide. - A demo per model in
demos/(Dreamer, DreamerV2, PlaNet, ModularRSSM,
DIAMOND, IRIS, Genie, DiT, I-JEPA). Each trains from scratch on a 4 GB laptop
GPU in one to two hours and records video of what it learned;
demos/run_all.pyreproduces all of them. - A documentation gallery with the recorded clips, plus a "See it in action"
section on every algorithm page and in the README. - IRIS imagination replays each single-position Transformer step as a CUDA
graph on GPU (GraphedDecodeStep). Outputs are identical; on an RTX 3050 a
20-step imagination rollout drops from 11.4 s to 3.2 s, because the eager
path spent most of its time launching ~55k small kernels. Disable with
agent.use_cuda_graphs = False. DreamerV1AgentandDreamerV2Agent, the agents behind
create_model("dreamer-v1")/create_model("dreamer-v2").
Fixed
create_model("dreamer-v1")andcreate_model("dreamer-v2")raised a
TypeError; they now build agents that train their own version.- DreamerV2 could not train: its two-hot heads exposed
meanas a method with
an extra trailing axis, and its actor loss detached the lambda-returns, so th...
v0.4.2
v0.4.1
What's Changed
- Add --data_file option to bypass HuggingFace download in TinyWorlds by @ParamThakkar123 in #142
- Fixed Genie training and inference related bugs by @ParamThakkar123 in #143
- feat/cli by @ParamThakkar123 in #144
- Simplify docs navbar and fix Mermaid diagrams by @ParamThakkar123 in #149
- Add benchmark command to torchwm CLI by @ParamThakkar123 in #148
- docs: add CLI documentation by @ParamThakkar123 in #145
- Fix docs rendering (MathJax & Mermaid), add World Models study guide, and improve API reference by @ParamThakkar123 in #146
- Add vectorized env and RL harness unit tests; fix SimWorker seed handling by @ParamThakkar123 in #150
- Clean up TorchWM CLI entrypoint and make tools exports lazy by @ParamThakkar123 in #154
- Docs: switch to Sphinx-managed MathJax, add copy-to-clipboard, and expand environment docs by @ParamThakkar123 in #155
- Add Brax environment backend (BraxImageEnv) with docs, config, and tests by @ParamThakkar123 in #156
- Add native MuJoCo image environment support, docs, and extras by @ParamThakkar123 in #151
- Add optional windowed-attention pooling for latent action tokens by @ParamThakkar123 in #158
- Add Gymnasium Robotics backend support and automatic MuJoCo v2/v3 fallback by @ParamThakkar123 in #157
- Consolidate benchmarks into world_models/benchmarks and update docs by @ParamThakkar123 in #161
- ci: publish releases to PyPI and sync pyproject version by @ParamThakkar123 in #164
- Add CLI docs to navigation and relocate Brax backend into environments section by @ParamThakkar123 in #165
- Refactor public API for easier TorchWM usage by @ParamThakkar123 in #159
Full Changelog: v0.4.0...v0.4.1
v0.4.0
What's Changed
- refactor: clean public API, migrate to gymnasium, add operator factory by @ParamThakkar123 in #116
- README updates by @ParamThakkar123 in #118
- Added Genie Model components by @ParamThakkar123 in #91
- Fix Genie implementation per paper ( decoder, masking, QK norm) by @ParamThakkar123 in #140
- feat: separate core dependencies from optional extras by @ParamThakkar123 in #120
- feat: expose all model components via simple API with documentation by @ParamThakkar123 in #131
- Bump to v0.4.0 by @ParamThakkar123 in #141
Full Changelog: v0.3.2...v0.4.0
v0.3.2
What's Changed
- Implement Vectorized Simulator Workers and RL Harness by @ParamThakkar123 in #92
- Implement missing test files and NuPlan dataset support by @ParamThakkar123 in #109
- Add benchmark runner + adapters/metrics/reporting by @ParamThakkar123 in #111
- Refactor torchwm for systematization and efficiency by @ParamThakkar123 in #113
- Remove UI components to separate repository by @ParamThakkar123 in #112
- Add support for lower python versions by @ParamThakkar123 in #115
Full Changelog: v0.3.1...v0.3.2
v0.3.1
What's Changed
- Modify pytest workflow by @ParamThakkar123 in #47
- Move test workflow to workflows directory by @ParamThakkar123 in #51
- Modular RSSM with swappable encoder/decoder/backbone by @ParamThakkar123 in #50
- Added wandb and TorchWM integration by @ParamThakkar123 in #53
- Added IRIS World Model by @ParamThakkar123 in #61
- Added latent space visualizations and streaming video writers by @ParamThakkar123 in #67
- Added Mypy type checking to CI by @ParamThakkar123 in #89
- Added Diamond World Model by @ParamThakkar123 in #65
- fix: use fixed random seed in CI to prevent test cancellations by @ParamThakkar123 in #63
Full Changelog: v0.3.0...v0.3.1
v0.3.0
What's Changed
- Added Docs by @ParamThakkar123 in #17
- Add Tests by @ParamThakkar123 in #4
- Added test workflow by @ParamThakkar123 in #18
- Added Diffusion Transformers by @ParamThakkar123 in #19
- Refactor by @ParamThakkar123 in #20
- Added support for Unity ML agents and Bug Fixes by @ParamThakkar123 in #22
- Implement YAML config loader in utils.py by @Krabb18 in #23
- Added Workflow for building docs by @ParamThakkar123 in #26
- Improve docs workflow by @ParamThakkar123 in #27
- Added Docs by @ParamThakkar123 in #24
- Docs Fix by @ParamThakkar123 in #28
- Added Opengraph support by @ParamThakkar123 in #29
- Add UI for training World models by @ParamThakkar123 in #21
- Upgraded docs by @ParamThakkar123 in #34
- Updated docs and added UI test cases by @ParamThakkar123 in #35
- Made UI improvements with additional Features by @ParamThakkar123 in #38
- Adding new features by @ParamThakkar123 in #39
- Adding desktop app support for TorchWM by @ParamThakkar123 in #41
- Autopublish workflows by @ParamThakkar123 in #43
New Contributors
Full Changelog: v0.2.1...v0.3.0
v0.2.1
What's Changed
- Update Labeler by @ParamThakkar123 in #15
- Added Linter by @ParamThakkar123 in #16
- Name changed to torchwm
- Added tests
- Docs coming soon
Full Changelog: v0.2.0...v0.2.1
v0.2.0
What's Changed
- Refactored envs by @ParamThakkar123 in #5
- Added IJEPA model by @ParamThakkar123 in #8
Full Changelog: v0.1.0...v0.2.0
v0.1.0
What's Changed
- Added Dreamer_v1 by @ParamThakkar123 in #1
Full Changelog: https://github.com/ParamThakkar123/pytorch-world/commits/v0.1.0