Skip to content

NeSLE v0.2.0 - verified at scale

Choose a tag to compare

@hbofz hbofz released this 01 Sep 19:40
· 37 commits to main since this release

Second release, one day after v0.1.0. Everything below is measured, not projected.

Headline numbers (fresh, this release's HEAD)

  • A100-SXM4-80GB: 699,456 env-steps/s peak at 65,536 parallel envs (~2.8M NES frames/s, ~46,000x real-time); 161,430 at 4,096 envs = ~746x that machine's CPU. Verified from a clean clone with 69/69 tests green.
  • GTX 1050 Ti: 35,488 env-steps/s at 4,096 envs (110x CPU) - +20% over v0.1.0 from this release's optimization pass.
  • vs the standard CPU stack (nes-py): ~269x on identical hardware.

Correctness

  • Renderer now draws from a vblank-frozen presentation snapshot with a two-region scroll split (SMB's status bar) - eliminates the object-pop / HUD-loss / ghost-content artifacts that affected all recordings (render-only; training was never affected). Object-pop events: 130 -> 21 on a scripted A/B.
  • Fixed a use-after-free in the DLPack device-view bindings (tensor could outlive the GPU memory it pointed at).
  • Fixed checkpoint resume semantics (--total-timesteps is now cumulative) and resumed-run fps reporting.

Performance work (measured per-change, docs/gpu-scaling.md)

  • PPU hot-state register caching: +17% stepping.
  • Vectorized bulk copies (snapshot/reset/DMA): +9.5% stepping.
  • Hybrid render dispatch: 2.9x faster small-batch rendering (recording/eval).
  • Research note with code-level divergence/memory analysis, CuLE et al. survey, and a ranked redesign roadmap (tiers 1-3 open).

Tooling & docs

  • Cross-platform CUDA build: python scripts/build_cuda_extension.py (Windows MSVC auto-detection; Linux include fix found on Colab).
  • C++ tests now run in CI; smart-reward magnitudes exposed as CLI flags; native-checkpoint eval/recording tool with artifact-aware filtering (examples/native_ppo_eval.py).
  • Honest results throughout: the trained 1-1 agent clears the level occasionally (best episode recorded in the README GIF); the 8-world curriculum agent reaches mid-level everywhere but captures no flags. Training checkpoints from the A100 experiments are preserved outside the repo.

Requirements: CUDA GPU (CTK 12.x for Pascal), Python >= 3.10, user-supplied SMB ROM (never distributed).